Sönke Tesch: nicht abgeschlossene Zeichenfolge

Beitrag lesen

//Die javascript-Fehlermeldung sagt eindeutig, dass es sich da um eine nichtabgeschlossene Zeichenkette handelt und zwar passiert es genau auf dieser Stelle !

while (list($k, $v) = each($_SESSION["meldung"])) {
echo "<script language="JavaScript">\n";
echo "status_zeigen('$v');\n";
echo "</script>";
}

Schön, ich hab gewonnen. Krieg ich jetzt einen Preis? ;)

Wie ich bereits geschrieben habe, macht man in solchen Fällen ganz einfach folgendes: Seite mit dem Javascript-Fehler aufrufen. Dann im Browser-Menü Ansicht->Seitenquelltext (o.ä.) auswählen, die anstößige Zeile

status_zeigen('blabla');

suchen und schauen, was da statt blabla steht, insbesondere solltest Du die Anführungszeichen beobachten.

Deiner ersten Beschreibung nach müsste diese Zeile so aussehen:

status_zeigen('Ein Datenbankfehler ist aufgetreten => 1064: You have an error in your SQL syntax near ''x','y','z'))' at line 2');

Das wird natürlich nix (zum dritten Mal: Anführungszeichen beachten, beachte jene nach "near" und vor "at").

Das sich Javascript nach Entfernen der einfachen Anführungszeichen über Hexadezimalwerte beschwert, ist auch nachvollziehbar:

near \x,\y,\z))
       ^^^

Hexwerte schreibt man zum Beispiel so: \x00.

Zur Problemlösung solltest Du Dir einfach überlegen, welche Anführungszeichen Du in Javascript verwenden möchtest (doppelte oder einfache) und diese dann mittels PHP.strtr() in den Fehlermeldungen durch die jeweils andere Sorte ersetzen. Zum Beispiel:

echo "status_zeigen("".strtr($v,""","'"). "");\n";

Mit den Klammern hat das übrigens nichts zu tun, Deine str_replace() kannst Du allesamt rausnehmen.
Ein Blick auf die PHP-Einstellungen für magic_quotes wäre IMHO auch sinnvoll, um eventuell die dusseligen '-Kombinationen aus der MySQL-Meldung rauszubekommen (obwohl ich mir jetzt nicht sicher bin, ob magic_quotes auch auf Fehlermeldungen wirkt).

Alternativ zum Ersetzen könnte auch eine PHP-Funktion wie addslashes() Abhilfe schaffen.

Gruß,
  soenk.e