Knut: Text in Mysql Datenbank abpeichern

Hallo,

ich möchte aus einem Formular die Daten in meine MYSQL Datenbank abpeichern. Jetzt habe ich hier über Kontextwechsel gelesen und bin mir jetzt unsicher ob ich das richtig mache.

Wenn ich in einem TEXTAREA HTML Feld einen Text habe und diesen abspeicher, muss ich ihn doch auf bösen Code hin absichern.

mysqli_real_escape_string($string);

ab damit bekomme ich immer folgende Zeichen \r\n in meine Datenbank

bei

stripslashes($string);

funktioniert es.

Ist das auch korrekt, oder binich da auf dem Holzweg?

Knut

  1. Moin!

    Hallo,

    ich möchte aus einem Formular die Daten in meine MYSQL Datenbank abpeichern. Jetzt habe ich hier über Kontextwechsel gelesen und bin mir jetzt unsicher ob ich das richtig mache.

    Wenn ich in einem TEXTAREA HTML Feld einen Text habe und diesen abspeicher, muss ich ihn doch auf bösen Code hin absichern.

    mysqli_real_escape_string($string);

    ab damit bekomme ich immer folgende Zeichen \r\n in meine Datenbank

    Nicht immer. Nur wenn Windows-Zeilenumbrüche im String (Text) vorkommen. Unix-Zeilenumbrüche sähen so aus: \n

    bei

    stripslashes($string);

    funktioniert es.

    Ist das auch korrekt, oder binich da auf dem Holzweg?

    Holzweg. Bleibe bei mysqli_real_escape_string. Das "putzt" auch dann, wenn es Probleme mit der Zeichencodierung beim Marsch Deines Strings durch die Instanzen geben könnte, was das simple stripslashes nicht kann.

    Jörg Reinholz

    1. ab damit bekomme ich immer folgende Zeichen \r\n in meine Datenbank

      Bleibe bei mysqli_real_escape_string.

      Aber wie bekomme ich dann die \r\n in der Datenbank weg, bzw, gar nicht hinein

      Knut

      1. Hi,

        Aber wie bekomme ich dann die \r\n in der Datenbank weg, bzw, gar nicht hinein

        ich verstehe nicht, warum du die nicht haben willst. Die zwei Steuerzeichen \r\n (Carriage Return, Line Feed) sind nun mal die im Internet übliche Repräsentation eines Zeilenumbruchs. Wieso willst du den unterdrücken?

        So long,
         Martin

  2. Tach!

    ich möchte aus einem Formular die Daten in meine MYSQL Datenbank abpeichern. Jetzt habe ich hier über Kontextwechsel gelesen und bin mir jetzt unsicher ob ich das richtig mache.

    Wenn ich in einem TEXTAREA HTML Feld einen Text habe und diesen abspeicher, muss ich ihn doch auf bösen Code hin absichern.

    Nein, die Entschärfung "bösen Codes" ist nicht das Hauptziel sondern nur eine erwünschte Nebenwirkung. Hauptziel ist, dass die Daten für das SQL-Statement ein syntaktisch korrektes Stringliteral ergeben. Also, falls du überhaupt den Weg des Einbettens in das Statement wählen willst und nicht gleich auf Prepared Statements setzen möchtest, welche dieses Problem prinzipbedingt gleich gar nicht haben. (Zu empfehlen ist dann auch eher PDO statt mysqli, weil PDO programmiererfreundlicher verwendet werden kann.)

    aber damit bekomme ich immer folgende Zeichen \r\n in meine Datenbank

    Was konkret siehst du? Und auf welche Weise "schaust" du? Sind es die 4 Zeichen \ und r und \ und n oder meinst du wirklich Wagenrücklauf U+000D und Zeilenumbruch U+000A?

    Wenn du bestimmte Zeichen nicht haben möchtest, dann untersuch erstmal, wo sie herkommen. Sind sie bereits in den Eingabedaten? Dann wende auf diese eine Stringersetzung, um sie zu entfernen. Zum Untersuchen lässt sich urlencode() sehr gut missbrauchen. Es lässt die häufig verwendeten lateinischen Grundbuchstaben (nebst Ziffern und noch ein paar anderen Zeichen) ungeschoren und damit deutlich erkennbar, konvertiert dafür die anderen Zeichen in Prozentkodierung, so dass man ihre Bytewerte sehen kann.

    Nichtsdestotrotz muss weiterhin der Kontextwechsel beachtet werden.

    dedlfix.