Supportnet / Forum / Skripte(PHP,ASP,Perl...)
MySQL: Warum werden die Daten nicht geändert?!
Frage
Hallo
folgender Auszug aus meinem PHP Script:
[code] case "change":
$sql = "UPDATE
bands
SET
name = ´".$_POST[´name´]."´,
ort = ´".$_POST[´ort´]."´,
url = ´".$_POST[´url´]."´
about = ´".$_POST[´info´]."´
WHERE
id = ´".$_GET[´id´]."´;";
mysql_query($sql);
echo "Details geändert!<br><a href=\"javascript:window.self.close();\">Fenster schließen</a>";
break;[/code]
Die Daten werden aus einem Formular übernommen und sollen in einer Datenbank anktualisiert werden.
Da dies nur ein Teil eines Scriptes ist, weiß ich, dass die Datenbank verbindung hergestellt ist, da drüberliegende Teile fehlerfrei dargestellt werden.
Auch meine Meldung erscheint, und es wird scheinbar kein Fehler gefunden, da keine Fehlermeldung kommt.
ABER die Daten werden trotz voller Felder nicht aktualisiert.
Hab mal gesucht ob ich den Fehler finde und ein bisschen rumprobiert, aber ohne erfolg.
Vielleicht kann mir jemand von euch verraten, wo mein Fehler liegt.
Danke
Luke
Antwort 1 von disco
moin
schreib das statement mal komplett in eine zeile, um formatierungsprobleme auszuschliessen.
lass auch mal das ";" des sql-statements weg. mir ist so, als ob man das bei php nicht macht. bin mir aber nicht so sicher.
dann mal weiter sehen..
g,
disco
schreib das statement mal komplett in eine zeile, um formatierungsprobleme auszuschliessen.
lass auch mal das ";" des sql-statements weg. mir ist so, als ob man das bei php nicht macht. bin mir aber nicht so sicher.
dann mal weiter sehen..
g,
disco
Antwort 2 von Supermax
Bei SQL-Statements, die über mysql_query() abgesetzt werden, sollte das ; am Ende generell entfallen. Dies gilt nicht nur für PHP, sondern für alle anderen Programmiersprachen (C, Python, Perl etc.)
mach mal
Abgesehen davon sollte man alles was von einem Formular kommt nicht direkt in einen SQL-String einbauen, sondern immer durch mysql_escape_string() schicken. Das ist ein zusätzlicher Schutz sowohl vor bösartigen Angriffen (SQL-Injection) als auch vor unbeabsichtigten Fehleingaben.
mach mal
$rc = mysql_query($sql);
if (!$rc) {
echo "Datenbankfehler: ".mysql_error()."<br>";
}
Abgesehen davon sollte man alles was von einem Formular kommt nicht direkt in einen SQL-String einbauen, sondern immer durch mysql_escape_string() schicken. Das ist ein zusätzlicher Schutz sowohl vor bösartigen Angriffen (SQL-Injection) als auch vor unbeabsichtigten Fehleingaben.
Antwort 3 von luke
öhm
i only understand railwaystation ;)
was ist jetzt genau mit dem sql statement gemeint?
dashier?
geht es um das letzte ; ??!
luke
ps: danke für den tiopp mit mysql escape string
i only understand railwaystation ;)
was ist jetzt genau mit dem sql statement gemeint?
dashier?
´".$_GET[´id´]."´;";
geht es um das letzte ; ??!
luke
ps: danke für den tiopp mit mysql escape string
Antwort 4 von luke
hab mir das gerade mal bei php.net mit dem escape string angesehen, wofür ist das genau da?
wie benutzt man es?
hab das nicht so ganz verstanden...
wie benutzt man es?
hab das nicht so ganz verstanden...
Antwort 5 von Supermax
mysql_escape_string() dient dazu, Zeichen, die in SQL eine besondere Bedeutung haben, durch \X zu ersetzen. Das sind zumindest die einfachen und doppelten Anführungszeichen sowie das \ selbst.
Ansonsten würde ein Name wie z.B. d´Artagnan einen SQL-Fehler hervorrufen, weil für mySQL dann dasteht
d.h. der Interpreter würde versuchen, Artagnan als SQL-Befehl zu interpretieren, was natürlich einen Fehler hervorruft.
Ansonsten würde ein Name wie z.B. d´Artagnan einen SQL-Fehler hervorrufen, weil für mySQL dann dasteht
... name = ´d´Artagnan´...
,d.h. der Interpreter würde versuchen, Artagnan als SQL-Befehl zu interpretieren, was natürlich einen Fehler hervorruft.
Antwort 6 von luke
sehr interessant, und das muss ich vor der query einsetzen oder wie läuft das dann?
Antwort 7 von Supermax
schreib einfach statt nur
bzw. wenn du weisst daß in einem Feld nur Zahlen übergeben werden, kannst du auch
$_POST[´feldname´]
=> mysq_escape_string($_POST[´feldname´])
bzw. wenn du weisst daß in einem Feld nur Zahlen übergeben werden, kannst du auch
intval($_POST[´feldname´])
(nur ganze Zahlen) oder floatval($_POST[´feldname´])
(für Dezimalzahlen) verwenden.Antwort 8 von luke
danke
wobei ich mein anfangsproblem immernoch habe, wie war das jetzt mit dem semikolon?
was muss ich ändern, muss ich vllt. noch irgendwo anführungszeichen (´) reinmachen?
luke
wobei ich mein anfangsproblem immernoch habe, wie war das jetzt mit dem semikolon?
was muss ich ändern, muss ich vllt. noch irgendwo anführungszeichen (´) reinmachen?
luke
Antwort 9 von luke
habs gefunden, das komma am ende der dritten änderungszeile war vergessen ;)
Antwort 10 von thomasn1975
Kleiner Tipp:
POST- und GET-Variablen mischen funktioniert nicht immer. Habe auch mal gedacht, mir das Leben leicht zu machen, aber leider schicken einige Browser die GET-Variablen bei POST nicht mit.
Gruß
Thomas
POST- und GET-Variablen mischen funktioniert nicht immer. Habe auch mal gedacht, mir das Leben leicht zu machen, aber leider schicken einige Browser die GET-Variablen bei POST nicht mit.
Gruß
Thomas