Sven Rautenberg: POST übergabe erzeugt einen backslash

Beitrag lesen

Aloha!

funzte auf anhieb.
vielen dank, hab zwar vorher in php.net auch gesucht , habs aber nicht gefunden, tja, suchen muß auch gelernt sein;)

Vielleicht noch ein wenig Hintergrundinfo:

PHP hat eine Funktion "magic_quotes". Die bewirkt, daß alle einfachen und doppelten Anführungsstriche, die von Formularen gesendet werden (egal ob POST oder GET), mit einem Backslash escapet werden. Das hat den großen Vorteil, daß die Mehrheit der Leute sich mit ungeprüften Formulareingaben nicht die Datenbank zerschießen lassen kann, denn oftmals werden Eingaben ungeprüft in eine SQL-Abfrage gesteckt:

$sqlquery="SELECT * FROM tabelle WHERE spalte='$formularwert'";

Diese Anweisung erzeigt einen String, in dem $formularwert durch den Inhalt dieser Variable ersetzt wird. Würde man diese Variable aus einem Formular empfangen und den String "Tu's doch" (ohne die doppelten Anführungszeichen) übergeben, würde die SQL-Abfrage so aussehen:

$sqlquery="SELECT * FROM tabelle WHERE spalte='Tu's doch'";

Wie man sofort sieht: Da ist ein Anführungszeichenfehler. Das verhindert das Abspeichern in der Datenbank, da es zu einer Fehlermeldung kommt.

Mit einem Backslash ist das Anführungszeichen des Strings escapet und alles läuft glatt:
$sqlquery="SELECT * FROM tabelle WHERE spalte='Tu's doch'";

Bedenke: Die Funktion "magic_quotes" kann ausgeschaltet sein (wenngleich mir kein wichtiger Grund einfällt, das zu tun). Dann müßtest du mit addslashes() die Escapezeichen manuell hinzufügen. Bei http://www.php.net sind in der Befehlsbeschreibung von addslashes() und stripslashes() Anmerkungen dazu, wie man sowas feststellt und programmiert.

- Sven Rautenberg