Avatar billede tbsandau Novice
14. marts 2005 - 21:37 Der er 15 kommentarer og
1 løsning

Fejl i SQL syntax

"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 '' at line 1" Denne fejlmeddelelse får jeg hver gang jeg prøver at poste til min sql server.

Min upload kode ser således ud:

if ($_POST['referer'] == 'edit_tilbud') {
    mysql_query("UPDATE martilbud SET navn='".$_POST['navn']."', land='".$_POST['land']."', region='".$_POST['region']."', drue='".$_POST['drue']."', indhold='".$_POST['indhold']."', storrelse='".$_POST['storrelse']."', alkohol='".$_POST['alkohol']."', npris='".$_POST['npris']."', tpris='".$_POST['tpris']."', udato='".$_POST['udato']."', typen='".$_POST['typen']."', text='".$_POST['text']."' WHERE id=".$_POST['id']."") or die(mysql_error());
    header("Location: admin.php?offset=".$_POST['offset']);
}

Det er meningen den skal uploade oven på det der står i forvejen... Man kan godt poste almindeligt med koden SET...

Håber nogen ved det!
Avatar billede detox Nybegynder
14. marts 2005 - 21:44 #1
Sikkert fordi $_POST['id'] er tom.
Avatar billede conundrum Nybegynder
14. marts 2005 - 21:46 #2
Du manglede lige et sæt plinger :-) (WHERE id='".$_POST['id']."')

if ($_POST['referer'] == 'edit_tilbud') {
    mysql_query("UPDATE martilbud SET navn='".$_POST['navn']."', land='".$_POST['land']."', region='".$_POST['region']."', drue='".$_POST['drue']."', indhold='".$_POST['indhold']."', storrelse='".$_POST['storrelse']."', alkohol='".$_POST['alkohol']."', npris='".$_POST['npris']."', tpris='".$_POST['tpris']."', udato='".$_POST['udato']."', typen='".$_POST['typen']."', text='".$_POST['text']."' WHERE id='".$_POST['id']."'") or die(mysql_error());
    header("Location: admin.php?offset=".$_POST['offset']);
}

Den skulle virke.
/Conundrum
Avatar billede detox Nybegynder
14. marts 2005 - 21:48 #3
Conundrum -> Det skulle jo ikke være nødvendigt med plinger om id'et (for så vidt det er et tal).
Avatar billede detox Nybegynder
14. marts 2005 - 21:50 #4
En god måde at tjekke syntaks og indhold af variabler er ved simpelhen at udskrive forespørgslen.
Avatar billede conundrum Nybegynder
14. marts 2005 - 21:51 #5
detox -> Nej enig, men det vi jo ikke om det er, men hvis det er så skal den jo slutte på WHERE id=".$_POST['id']) or die(mysql_error());
og altså ikke escape php efter $_POST['id'], og jeg skulle mene at uanset hvad så er det slutningen ."") som giver fejlen.
/Conundrum
Avatar billede conundrum Nybegynder
14. marts 2005 - 21:55 #6
Jeg er helt enig med detox, en god fremgangs måde ville være således:
if ($_POST['referer'] == 'edit_tilbud') {
$sql = "UPDATE martilbud SET navn='".$_POST['navn']."', land='".$_POST['land']."', region='".$_POST['region']."', drue='".$_POST['drue']."', indhold='".$_POST['indhold']."', storrelse='".$_POST['storrelse']."', alkohol='".$_POST['alkohol']."', npris='".$_POST['npris']."', tpris='".$_POST['tpris']."', udato='".$_POST['udato']."', typen='".$_POST['typen']."', text='".$_POST['text']."' WHERE id='".$_POST['id']."'";   
mysql_query($sql) or die($sql." <br />".mysql_error());
    header("Location: admin.php?offset=".$_POST['offset']);
}

På denne måde kan du se din query, og dermed meget nemt se fejlen, et andet lille fif jeg lige ville nævne er at det ikke er for smart at bruge $_POST værdierne direkte i en query, men istedet validere input inden man får ondhed i sin DB.
/Conundrum
Avatar billede tbsandau Novice
15. marts 2005 - 11:22 #7
Tak, for svaren, er i skole lige nu, men tester det i aften når jeg kommer hjem... conundrum -> Hvad mener du med "det ikke er for smart at bruge $_POST værdierne direkte i en query, men istedet validere input inden man får ondhed i sin DB" - Hvad er det du mener jeg skal skrive i stedet?
Avatar billede detox Nybegynder
15. marts 2005 - 17:57 #8
Det vigtigste er sådan set at de sikrer dig at der kommer escape på bl.a. apostroffer. Det laver php automatisk, hvis magic_quotes_gpc er sat til, men du bør sikre dig at det er tilfældet. Til formålet kan du bruge: get_magic_quotes_gpc():
http://dk2.php.net/manual/en/function.get-magic-quotes-gpc.php
Avatar billede tbsandau Novice
15. marts 2005 - 23:17 #9
Ok, har testet jeres svar... men det virker ikke!
Avatar billede detox Nybegynder
15. marts 2005 - 23:59 #10
Og hvordan ser fejlmeldingen nu ud efter: mysql_query($sql) or die($sql." <br />".mysql_error());
Avatar billede tbsandau Novice
17. marts 2005 - 14:38 #11
Der kommer ikke nogen fejlmeddelelse... Der springer den bare direkte til admin.php?offset=".$_POST['offset'] ....

www.zniffer.dk/marginal/rstilbud.php <- i kan selv teste det her... (Slet knappen virker, så ik tryk...)
Avatar billede alaflam Nybegynder
17. marts 2005 - 14:40 #12
du må gerne printe SQL'en ud

echo "UPDATE martilbud SET navn='".$_POST['navn']."', land='".$_POST['land']."', region='".$_POST['region']."', drue='".$_POST['drue']."', indhold='".$_POST['indhold']."', storrelse='".$_POST['storrelse']."', alkohol='".$_POST['alkohol']."', npris='".$_POST['npris']."', tpris='".$_POST['tpris']."', udato='".$_POST['udato']."', typen='".$_POST['typen']."', text='".$_POST['text']."' WHERE id='".$_POST['id']."'";
Avatar billede tbsandau Novice
17. marts 2005 - 16:30 #13
alaflam -> hvad mener du?
Avatar billede alaflam Nybegynder
17. marts 2005 - 17:32 #14
det er simpel skriv det kode jeg skrev og skriv resultat her.
Avatar billede tbsandau Novice
18. marts 2005 - 19:51 #15
alaflam, hvor skal jeg skrive den henne? i stedet for "header" koden?
Avatar billede tbsandau Novice
04. maj 2005 - 16:51 #16
fandt selv ud af det!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester