hallo !
vielen Dank. Ich bin schon draufgekommen, ich weiß schon, wo das Problem ist ! In Zeilenumbrüchen ! Ich habe nämlich alle spezielle Zeichen schon entfernt, dennoch kommt die Meldung. Dann habe ich einen substring aus der Fehlermeldung gemacht, um festzustellen, auf welcher Stelle der Fehler passiert, bzw. welches Zeichen JS nicht verdauen kann. Es ist ein Zeilenumbruch. Ja, natürlich schaue ich mir immer den Quellcode an (rechte Maustaste...). Ja da ist es ganz deutlich zu sehen.
Der Zeilenumbruch ist nach dem 3. KOmma, also:
status_zeigen('1064: You have an error in your SQL syntax near x,y,z,
');
Fehlermeldung: nicht abgeschlossene Zeichenfolgenkonstante.
dann habe ich versucht ganz normal die "\n" wegzutun:
function set_st($a_st) {
while(list($k, $v) = each($a_st)) {
$temp = str_replace(")", "", $v);
$temp = str_replace("(", "", $temp);
$temp = str_replace("'", "", $temp);
$temp = str_replace(Chr(92), "", $temp); // ""
$temp = str_replace("\n", "", $temp);
//mit $temp = str_replace("\n", "<br>", $temp);
$temp = substr($temp, 0, 55);
$a_st[$k] = $temp;
}
$this->st = array_merge($this->st, $a_st);
}
function get_st() {
return $this->st;
}
Das haut aber nicht hin. Also jetzt sind alle speziellen Zeichen (auch ein "") weg, es muss nur an dem Zeilenumbruch liegen, weil
$temp = substr($temp, 0, 54); (also um 1 Zeichen weniger) keinen Fehler verursacht.
Ehrlich gesagt, weiß ich nicht mehr, was ich tun soll *schäm*
cu kati
//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