Kai der dritte: Zeilenvorschub im MYsql Datenbank nicht mehr vorhanden

Ich habe über ein textfeld in einem Formular einen String. Dieser steht in der var $text. Der Inhalt ist:

**Es war
einmal in
einem fernen
Land **

diesen speichere ich mittels

mysql_real_escape_string($text)

in meine Mysql Datenbank, doch dort kommt er nur als

Es wareinmal ineinem fernenLand

an.

Irgendwo ist ein Fehler, den ich mir aber nicht erklären kann?

  1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

    Ich habe über ein textfeld in einem Formular einen String. Dieser steht in der var $text. Der Inhalt ist:

    **Es war einmal in einem fernen Land ** diesen speichere ich mittels

    mysql_real_escape_string($text)
    

    in meine Mysql Datenbank, doch dort kommt er nur als

    Es wareinmal ineinem fernenLand

    an.

    Wie hast Du das denn kontrolliert, was in der DB ankommt?

    Und bei solchen Fragen ist ein bisschen Mehr Code drum herum nicht schlecht, um dem Fragesteller besser folgen zu können :-)

    Spirituelle Grüße
    Euer Robert
    robert.r@online.de

    --
    Möge der wahre Forumsgeist ewig leben!
    1. Tach!

      Wie hast Du das denn kontrolliert, was in der DB ankommt?

      Es würde mich auch sehr verwundern, wenn man das kontrollieren kann. Im Prinzip ist es ziemlich egal, wie das DBMS etwas in seinem Inneren speichert. Es sollte aber die Daten so wieder zurückgeben, wie sie übergeben wurden. Mir ist nicht bekannt, dass MySQL irgendwelche Zeichen verschlucken würde, wenn man nicht selbst irgendwelche Fehler (mit der Kodierung) macht.

      Jedenfalls wird wohl das Kontrollieren der Daten aller Voraussicht nach nicht im DBMS sondern irgendwo außerhalb stattgefunden haben. Und da kommt es drauf an, wie man sich das Ergebnis anzeigen lässt. Browser beispielsweise sehen Zeilenumbrüche in ihrer gerenderten Ausgabe wie Leerzeichen an, wenn man ihnen nicht ausdrücklich vorgibt, die Zeilenumbrüche zu berücksichtigen.

      dedlfix.

      1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

        Jedenfalls wird wohl das Kontrollieren der Daten aller Voraussicht nach nicht im DBMS sondern irgendwo außerhalb stattgefunden haben. Und da kommt es drauf an, wie man sich das Ergebnis anzeigen lässt. Browser beispielsweise sehen Zeilenumbrüche in ihrer gerenderten Ausgabe wie Leerzeichen an, wenn man ihnen nicht ausdrücklich vorgibt, die Zeilenumbrüche zu berücksichtigen.

        So ähnlich waren meine Gedanken auch. Aber wenn es eine simple Browserausgabe wäre, dann müssten die Linebreaks ja wenigstens noch als Leerzeichen auftauchen, was laut Kai III ja nicht der Fall ist. Warten wir also mal seinen zusätzlichen Input ab. :-)

        Spirituelle Grüße
        Euer Robert
        robert.r@online.de

        --
        Möge der wahre Forumsgeist ewig leben!
  2. Moin!

    Irgendwo ist ein Fehler, den ich mir aber nicht erklären kann?

    Das ist einfach zu beantworten:

    Wenn Du eine Möhre in etwas hineinsteckst und die riecht, wenn sie hinten wieder rauskommt, lieblich nach Kaninchenscheiße, dann war das, wo Du die Möhre reingesteckt hast, sehr wahrscheinlich ein Kaninchen und weniger wahrscheinlich eine Möhren-mit-Kaninchenscheiße-Mischmaschine.

    Wenn Du Daten in ein Programm steckst musst Du eben schauen, an welcher Stelle die nach welchen Tier riechen, wenn hinten Scheiße rauskommt.

    Das nennt man Debuggen. Wenn man seinen Code nicht zeigt, sondern nur den Kot (das Ergebnis), dann muss man eben selbst debuggen.

    Jörg Reinholz

  3. Hallo,

    Irgendwo ist ein Fehler, den ich mir aber nicht erklären kann?

    Das ist vermutlich nicht auszuschließen.

    Gruß
    Kalk

  4. Die Sternchen sind also auch weg? Versuchs ohne mysql_real_escape_string zu speichern. Ändert sich was? Mach einen Dump von dem ausgelesenen Wert und schau nach was tatsächlich drin steht. Wandel den Wert in der Datenbank in Binärdaten um und sieh dir die an.

    1. Moin!

      Versuchs ohne mysql_real_escape_string zu speichern.

      Nein, Nein, Nein! (Soll heißen: Unter keinen Umständen! (mysql_real_escape_string kann auch nicht die Ursache sein)

      Jörg Reinholz

    2. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

      Versuchs ohne mysql_real_escape_string zu speichern.

      Bitte entschuldige, aber dieser Tipp ist ohen weitere Fakten*) so daneben, dass mir das einen eigenen Minuspunkt wert ist.

      Zuerst einmal würde ich mir das gesamte zusammengebaute Statement bzw. dessen vorbereitete Daten anzeigen lassen. Es ist ja noch gar nicht offengelegt worden, mit welcher Methode oder Funktion der Eintrag in die Datenbank stattfindet. "mysql_real_escape_string()" deutet allerdings erst einmal darauf hin, dass es "mysql_query()" sein müsste, aber nix ist sicher. Ich habe noch nir ausprobiert, einen später per prepared Statement eigetragenen Wert vorher mit mysql_real_escape_string() zu behandeln. Vielleicht geht das ja und dann wäre das Escaping irgendwie doppelt.

      Spirituelle Grüße
      Euer Robert
      robert.r@online.de

      --
      Möge der wahre Forumsgeist ewig leben!
      1. Moin!

        ich vermute fast, dass vor dem Eintragen in die Datenbank etwas wie

        $str = str_replace("\n", "<br>", $str);
        

        gemacht wird (was schon falsch ist) und nach Auslesen und vor der Anzeige dann:

        $str = strip_tags($str);
        

        Da es aber ungefähr 2.345.436 weitere(!) mögliche Vermutungen gibt, wie das Zustande kommt, muss ich leider darauf bestehen, dass ich den Quelltext für die Eingabe und die Ausgabe sehe.

        Jörg Reinholz

        1. Liebe Mitdenker, liebe Wissende, liebe Neugierige,

          Da es aber ungefähr 2.345.436 weitere(!) mögliche Vermutungen gibt, wie das Zustande kommt, muss ich leider darauf bestehen, dass ich den Quelltext für die Eingabe und die Ausgabe sehe.

          Naja, es reichen doch schon 23.

          Aber hier musste ich über deine Überkarikatur doch lachen :-P

          Spirituelle Grüße
          Euer Robert
          robert.r@online.de

          --
          Möge der wahre Forumsgeist ewig leben!