PHP, SQL: SQL update mißlingt
-
Hi,
ich möchte, das mir ein datensatz in der mysql datenbank aktualisiert(überschreiben) wird und dazu verwendete ich PHP um die neuen daten zu ermitteln.
Das problem ist, das mir der pharser immer einen fehler in der SQL anweisung anzeigt und ich nicht genau weiß warum, bzw. war ich der meinung die sqlanweisung wäre korrekt.
$sql="UPDATE $_SESSION[tabelle] SET lehrgang_id = '$_POST[lehrgang_id]', lehrgang_titel = '$_POST[lehrgang_titel]', ort = '$_POST[ort]', hinweise = '$_POST[hinweise]', WHERE lehrgang_id = '$_POST[lehrgang_id_alt]';";
die einzelnen einträge sind alle als varchar definiert, so daß es keinen konflikt geben sollte.
hat da wer eine idee zu?
mfg
-
Ich würde den String mal ausgeben lassen bzw. denke, dass er beim Zusammensetzten Probleme hat. Also entweder würde ich um die Array-Zugriffe (wie z.B. $_SESSION[tabelle]) geschweifte Klammern setzten oder besser noch den String so zusammenbauen:
$sql = 'UPDATE '.$_SESSION['tabelle'].'SET lehrgang_id = "'.$_POST['lehrgang_id'].'", lehrgang_titel = "'.$_POST['lehrgang_titel'].'", ort = "'.$_POST['ort'].'", hinweise = "'.$_POST['hinweise'].'", WHERE lehrgang_id = "'.$_POST['lehrgang_id_alt'].'";';
Ich hoffe ich habe mich jetzt nirgends vertippt, aber das Prinzip sollte auf jeden Fall klar sein. Und dann solltest du eigentlich noch alle Strings (zumindest solche, die über Formulare vom User kommen) und die du in SQL-Querys verwendest vorher durch mysql_escape_string jagen:
$sql = 'UPDATE '.$_SESSION['tabelle'].' SET ' .'lehrgang_id = "'. mysql_escape_string( $_POST['lehrgang_id'] ).'", ' .'lehrgang_titel = "'. mysql_escape_string( $_POST['lehrgang_titel'] ).'", ' .'ort = "'. mysql_escape_string( $_POST['ort'] ).'", ' .'hinweise = "'. mysql_escape_string( $_POST['hinweise'] ).'", ' .'WHERE lehrgang_id = "'.mysql_escape_string( $_POST['lehrgang_id_alt'] ).'";';
Falls das noch nicht hilft, wäre die konkrete Fehlermeldung mal ganz nützlich...
-
wie flenders schon sagt, entweder die arrays raus und durch punkt konkatenieren (beispiel flenders).. oder in geschweifte klammern
"UPDATE {$_SESSION['tabelle']} ..."
sonst klappts nicht mit dem parsen.. und ersetzen..
-
Evtl. hilft auch ein:
mysql_query($sql) or die("Fehler in SQL Anweisung: ".mysql_error());
Damit bekommst du in der Regel von mysql direkt die Fehlermeldung entsprechend mitgeteilt.
-
Versuchs mal so
$sql = "UPDATE ".$_SESSION[tabelle]." SET lehrgang_id = '".$_POST[lehrgang_id]."', lehrgang_titel = '".$_POST[lehrgang_titel]."', ort = '".$_POST[ort]."', hinweise = '".$_POST[hinweise]."' WHERE lehrgang_id = '".$_POST[lehrgang_id_alt]."';";
hatte auch schon oft ein Problem und fast immer hab ich da was mit den hochkommas ( ' ) falsch gemacht bei vchar...
-
Ich denke, dass das Problem eher daran liegt, dass er ein Komma direkt vor dem Beginn der Where-Klausel gesetzt hat. AFAIK gehört das dort nicht hin.
-
ja das komma was ich habs aber igrendwie erst spät gesehen... wie das eben so ist bei all dem code
-
Und du musst kein ; am ende des Query machen.
-
muss nicht aber kann^^
in meiner Vorschlag hab ich das Komma automatisch rausgenommen weil ich mir gedacht hab das gehört da nicht hin, trotzdem ists mit nicht als Fehler aufgefallen...