Supportnet Computer
Planet of Tech

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

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

$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?

´".$_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...

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

 ... 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

$_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

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

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: