Mysql: Wo is der Fehler?
Niko
- datenbank
0 Antipitch0 Niko
0 Vinzenz Mai0 Niko
Hallo,
Ich brüte gerade über einem PHP-Script und bin am verzweifeln! Ich möchte mit folgendem Befehl einen Eintrag in der Tabelle 'user' aktualisieren:
---------------------------------------------------------------------------
$result = mysql_query("UPDATE user SET username = '$username', vname = '$vname', nname = '$nname', password = '$password', email = '$email', group = '$group', registered = '$registered', block = '$block', rang = '$rang' WHERE id = $id");
---------------------------------------------------------------------------
Sämtliche Spalten existieren und sämtliche Variablen sind vorhanden, trotzdem bekomme ich folgende Fehlermeldung:
---------------------------------------------------------------------------
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 'group = '1', registered = '1208530093', block = '0', rang = 'Editor' WHERE id = ' at line 1
---------------------------------------------------------------------------
Soweit ich das ausmachen konnte liegt der Fehler irgendwo bei "group = '$group'", denn wenn man das rausnimmt funktioniert es!
Meine Bitte: Findet vielleicht einer einen Fehler, der mir entgangen ist??
Danke für eure Zeit und Mühe,
Lg Niko
Hi Niko,
eigentlich hast du den Fehler ja schon selbst gefunden:
Soweit ich das ausmachen konnte liegt der Fehler irgendwo bei "group = '$group'", denn wenn man das rausnimmt funktioniert es!
Gruß
Antipitch
eigentlich hast du den Fehler ja schon selbst gefunden:
Soweit ich das ausmachen konnte liegt der Fehler irgendwo bei "group = '$group'", denn wenn man das rausnimmt funktioniert es!
Oh man bin ich blöd! ^^ Hatte sowas schonmal mit ORDER und hab auch min. 2 Std. gesucht. Das hätte mir doch eigenlich ne Lehre sein sollen! ^^
Danke für die schnelle Antwort!
Lg Niko
Hallo
$result = mysql_query("UPDATE user SET username = '$username', vname = '$vname', nname = '$nname', password = '$password', email = '$email', group = '$group', registered = '$registered', block = '$block', rang = '$rang' WHERE id = $id");
denke bitte daran, alle Benutzereingaben mit mysql_real_escape_string() zu behandeln. Gegebenenfalls musst Du vorher die lästigen und häßlichen Magic Quotes entfernen
Soweit ich das ausmachen konnte liegt der Fehler irgendwo bei "group = '$group'", denn wenn man das rausnimmt funktioniert es!
GROUP ist ein reserviertes Wort (denke an die GROUP-BY-Klausel) und muss daher als Spaltenname maskiert werden. Das Maskierungszeichen ist bei MySQL der Backtick. Es ist meiner Meinung nach keine gute Idee, reservierte Worte als Spaltennamen zu verwenden.
Freundliche Grüße
Vinzenz
Hi Vinzenz Mai,
denke bitte daran, alle Benutzereingaben mit mysql_real_escape_string() zu behandeln. Gegebenenfalls musst Du vorher die lästigen und häßlichen Magic Quotes entfernen
Danke für den Hinweis, war mir der Gefahr wirklich nicht bewusst! Allerdings besteht bei dem vorliegenden Script glaub ich eher geringe Gefahr, da ich vorher überprüfe, ob derjenige, der das Script aufruft eingeloggt ist (Session). Beim einloggen sieht es dann so aus:
$username = str_replace("'", "", $username);
$password = str_replace("'", "", $password);
$result = mysql_query("SELECT * FROM user WHERE username = '$username' AND password = '$password'");
if(!$result OR mysql_num_rows($result) < 1) die("[ERROR]Benutzername und/oder Passwort falsch!");
else
{
(...)
Denke das ist relativ sicher, oder nicht?
Lg Niko
Hello,
Danke für den Hinweis, war mir der Gefahr wirklich nicht bewusst! Allerdings besteht bei dem vorliegenden Script glaub ich eher geringe Gefahr, da ich vorher überprüfe, ob derjenige, der das Script aufruft eingeloggt ist (Session). Beim einloggen sieht es dann so aus:
Ich gratuliere Dir zu deinen Usern, die niemals Fehler machen, weder zufällig noch absichtlich ;-)
Ein harzliches Glückauf
Tom vom Berg
http://bergpost.annerschbarrich.de
.
echo $begrüßung;
$username = str_replace("'", "", $username);
$password = str_replace("'", "", $password);
$result = mysql_query("SELECT * FROM user WHERE username = '$username' AND password = '$password'");
Denke das ist relativ sicher, oder nicht?
Wenn du sowieso schon eine Funktion auf die Werte anwendest, um Syntaxfehler zu verhindern, kannst du auch gleich die richtige Funktion anwenden: mysql_real_escape_string().
echo "$verabschiedung $name";