sql geenf via php error, niet via direct input

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Dvd brander

dvd brander

15/06/2010 07:44:45
Quote Anchor link
ik heb hier dit script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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);
}

?>

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

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?
 
PHP hulp

PHP hulp

25/04/2024 00:30:28
 
Moe BE

Moe BE

15/06/2010 08:35:34
Quote Anchor link
Ik weet niet of het kwaad kan, maar waarom staat er een br-tag bij in je query (regel 7)

+ breng je variabelen eens buiten de haken
Gewijzigd op 15/06/2010 08:47:49 door Moe BE
 
- SanThe -

- SanThe -

15/06/2010 09:37:49
Quote Anchor link
Je mist de enkele quotes in de query.
Script is lek => SQL-Injection.
 
Ivo K

Ivo K

15/06/2010 09:58:14
Quote Anchor link
Let op SQL-injection, zoals SanThe al vermeldt, gebruik 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.
 
Afra ca

Afra ca

15/06/2010 10:58:19
Quote Anchor link
Je zit onnodig variabelen te kopiëren, zoals SanThe al zegt is je script nu verre van veilig, en je zit een resource te echo-en op line 9, waar je echt totaal niks aan hebt, aangezien je er totaal geen nuttige informatie uit verkrijgt. Als laatste doe je een fetch op het resultaat van een update query. Update is totaal iets anders dan een SELECT met sql, dus je bent daar in principe níks aan het fetchen. Daar komt bij, waarom heet je functie connect? Het update een record uit je database, maar maakt toch echt geen verbinding met een database, terwijl de naam "connect" is... Oja, en omdat elke vorm van foutafhandeling ontbreekt krijgt de normale bezoeker ook mooi zo'n error te zien, wat niet helemaal de bedoeling is in een productieomgeving.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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';

    }
}


?>


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 -

- SanThe -

15/06/2010 11:16:07
Quote Anchor link
@Afra: Bij het ip-nummer.

SanThe Nvt op 15/06/2010 09:37:49:
Je mist de enkele quotes in de query.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.