sql geenf via php error, niet via direct input
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
<?php
function connect(){
$online = $_GET["online"]; //username that the game provides
$ip = $_GET["ip"]; //password that the game provides
$poort = $_GET["poort"];
echo $ip."<br>";
echo "UPDATE server SET online=$online,poort=$poort WHERE ip=$ip<br>";
$a=mysql_query("UPDATE server SET online=$online,poort=$poort WHERE ip=$ip") or die( mysql_error());
echo $a.";";
echo mysql_fetch_array($a);
}
?>
function connect(){
$online = $_GET["online"]; //username that the game provides
$ip = $_GET["ip"]; //password that the game provides
$poort = $_GET["poort"];
echo $ip."<br>";
echo "UPDATE server SET online=$online,poort=$poort WHERE ip=$ip<br>";
$a=mysql_query("UPDATE server SET online=$online,poort=$poort WHERE ip=$ip") or die( mysql_error());
echo $a.";";
echo mysql_fetch_array($a);
}
?>
en dit is de output hiervan:
Quote:
'92.254.84.232'
UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''92.254.84.232'' at line 1
UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232'
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''92.254.84.232'' at line 1
bij het doorgeven van het ip gaat het dus mis.
maar als ik nu naar phpmyadmin ga, en daar via sql UPDATE server SET online=1,poort=12563 WHERE ip='92.254.84.232 laat draaien, doet ie t weer wel.
heeft iemand een idee?
Script is lek => SQL-Injection.
mysql_real_escape_string. Verder is het probleem waarschijnlijk dat je het IP adres opslaat als integer, terwijl dit als varchar moet, naar mijn weten. Let wel op dat er dan quotes om het IP heen moeten.
Let op SQL-injection, zoals SanThe al vermeldt, gebruik Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function connect(){
$sql = "UPDATE server SET online=".mysql_real_escape_string($_GET['online']).",poort=".mysql_real_escape_string($_GET['poort'])." WHERE ip='".mysql_real_escape_string($_GET['ip']."'";
if(!$result = mysql_query($sql){
trigger_error('Query foutgegaan');
}
else{
//nu weet je dat mysql in ieder geval geen error heeft gegeven
echo 'Query gelukt';
echo 'Ik ga geen fetch gebruiken, omdat we geen gegevens OPHALEN uit een database';
}
}
?>
function connect(){
$sql = "UPDATE server SET online=".mysql_real_escape_string($_GET['online']).",poort=".mysql_real_escape_string($_GET['poort'])." WHERE ip='".mysql_real_escape_string($_GET['ip']."'";
if(!$result = mysql_query($sql){
trigger_error('Query foutgegaan');
}
else{
//nu weet je dat mysql in ieder geval geen error heeft gegeven
echo 'Query gelukt';
echo 'Ik ga geen fetch gebruiken, omdat we geen gegevens OPHALEN uit een database';
}
}
?>
edit: @SanThe hieronder: Excuséz moi, beetje over hoofd gezien, nu gefixed. Anyway, er moet sowiezo even hard naar het script gekeken worden...
Gewijzigd op 15/06/2010 12:29:14 door Afra ca
SanThe Nvt op 15/06/2010 09:37:49:
Je mist de enkele quotes in de query.