brockerdocker: Sonderzeichen in Datenbank schreiben.

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

  1. 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

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. 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";