Sonderzeichen in Datenbank schreiben.
brockerdocker
- php
Hallo,
ich habe folgendes Problem: Bei einem Formular gibt es bei bestimmten Zeichen einen Fehler beim Verschicken. Es gehen einige Sonderzeichen wie <>@..., aber \ geht zum Beispiel nicht. Ich weiß leider nicht woran dies liegen könnte. Mein Source-Code zur Verarbeitung der Formularanfrage sieht so aus:
$_POST["Sonstiges"] = htmlspecialchars($_POST["Sonstiges"]);
$_POST["Sonstiges"] = stripslashes($_POST["Sonstiges"]);
Danach wird das ganze noch in eine Datenbank geschrieben:
@mysql_connect("localhost", "test", "passwd") or die("Verbindung zu MySQL gescheitert!");
@mysql_select_db("test") or die("Datenbankzugriff gescheitert!");
$sql = "INSERT INTO adressen (id, Sonstiges, V...
Das Feld sonstiges ist vom Typ "text" und hat die Koallition "latin1_general_ci". Die Formularanfrage kommt von einer textarea.
Mich würde interessieren, woran der Fehler liegt. Ich hoffe diese Infos reichen aus.
Vielen Dank schonmal,
viele Grüße brockerdocker
Hi,
$sql = "INSERT INTO adressen (id, Sonstiges, V...
den interessanten Teil lässt Du natürlich aus, nämlich den, wie Du die Daten in den Kontext des SQL-Statements bringst. Immer (in Worten: *IMMER*) gilt: Wenn Du einen Wert - egal welchen - in einen Kontext - egal welchen - bringst, musst Du diesen Wert kontextspezifisch kodieren.
$_POST["Sonstiges"] = htmlspecialchars($_POST["Sonstiges"]);
$_POST["Sonstiges"] = stripslashes($_POST["Sonstiges"]);
Für einen SQL-Kontext sind dies übrigens völlig willkürliche Datenveränderungen. Sie nützen Dir nicht das geringste. Genauso gut kannst Du alle Vokale durch lustige Wingdings austauschen.
Cheatah
echo $begrüßung;
$_POST["Sonstiges"] = htmlspecialchars($_POST["Sonstiges"]);
Was willst du mit den für HTML aufbereiteten Daten in der Datenbank? Besser ist es, wenn du diesen Vorgang machst, wenn Daten ins HTML geschreiben werden sollen.
$_POST["Sonstiges"] = stripslashes($_POST["Sonstiges"]);
Wenn in deinem System Magic Quotes eingeschaltet sind, solltest du versuchen, das generell zu deaktivieren oder einmalig am Scriptanfang mit dem im Beispiel angeführten Code tun.
$sql = "INSERT INTO adressen (id, Sonstiges, V...
Den interessanten Teil hast du ausgelassen. Wie werden deine Daten in das Statement eingefügt? Hoffentlich hast du dabei nicht vergessen, mysql_real_escape_string() auf die Daten anzuwenden. In einem SQL-Statement gibt es einige Zeichen mit Sonderbedeutung. Wenn diese Zeichen Daten bleiben sollen, musst du sie mit der angegebenen Funktion maskieren.
echo "$verabschiedung $name";