Matthias: Zeilenumbrüche in MySQL?

Hallo,

gibt es eine Möglichkeit, Zeilenumbrüche im Feld einer MySQL-Datenbank festzuhalten?
Ich kann und will die Information nicht in mehrere Felder aufteilen. Sicher kann man das auch mit PHP festlegen, allerdings gibt es kein bestimmtes Zeichen nach dem immer der Umbruch erfolgen könnte - und auch das war bisher nicht erfolgreich. Habe "wordwrap" probiert und nichts tat sich! Vielleicht mit ereg? Aber der Inhalt ist dazu wie gesagt vielleicht sowieso zu inkonsistent.

Gruss,
Matthias

  1. hi

    gibt es eine Möglichkeit, Zeilenumbrüche im Feld einer MySQL-Datenbank festzuhalten?

    HTML-Zeilenumbrüche..? <br/>

    oder für den Source-Code? \n

    Grüße aus Bleckede

    Kai

  2. Moin!

    gibt es eine Möglichkeit, Zeilenumbrüche im Feld einer MySQL-Datenbank festzuhalten?
    Ich kann und will die Information nicht in mehrere Felder aufteilen. Sicher kann man das auch mit PHP festlegen, allerdings gibt es kein bestimmtes Zeichen nach dem immer der Umbruch erfolgen könnte - und auch das war bisher nicht erfolgreich. Habe "wordwrap" probiert und nichts tat sich! Vielleicht mit ereg? Aber der Inhalt ist dazu wie gesagt vielleicht sowieso zu inkonsistent.

    Du kannst wahlweise das <br> direkt in der Datenbank speichern, oder dort nur ein "\n" ablegen und es während der HTML-Ausgabe in PHP mit nl2br() in ein <br> wandeln. Andere Programmiersprachen müssen "\n" durch "<br>\n" eben umständlicher ersetzen.

    Die zweite Variante ist deshalb besser, weil du so immer noch eine Textarea mit dem Datenbankfeld füttern kannst, ohne daß <br>s stören - und die Zeilenumbrüche "\n" werden in der Textarea ja gut umgesetzt.

    - Sven Rautenberg

    1. Du kannst wahlweise das <br> direkt in der Datenbank speichern, oder dort nur ein "\n" ablegen und es während der HTML-Ausgabe in PHP mit nl2br() in ein <br> wandeln. Andere Programmiersprachen müssen "\n" durch "<br>\n" eben umständlicher ersetzen.

      Die zweite Variante ist deshalb besser, weil du so immer noch eine Textarea mit dem Datenbankfeld füttern kannst, ohne daß <br>s stören - und die Zeilenumbrüche "\n" werden in der Textarea ja gut umgesetzt.

      Das hört sich gut an. Zu gut. Darf ich mal fragen wie Ihr Eure Datenbankinhalte ausgebt? Ich hatte das ja schon ausprobiert, nur bei mir gibt er \n und <br> immer mit als String aus. Wie kann ich das verhindern?

      echo "<tr><td>".$zeile["$name"]."</td>/tr>";
      echo '<tr><td>'.$zeile["$name"].'</td>/tr>';
      echo $zeile["$name"];

      liefern alle dasselbe Ergebnis - wie sollte es auch anders sein.
      Welche Info fehlt mir da? Hat bestimmt was mit den Anführungszeichen zu tun, nicht wahr?

      1. Moin nochmal!

        Das hört sich gut an. Zu gut. Darf ich mal fragen wie Ihr Eure Datenbankinhalte ausgebt? Ich hatte das ja schon ausprobiert, nur bei mir gibt er \n und <br> immer mit als String aus. Wie kann ich das verhindern?

        echo "<tr><td>".$zeile["$name"]."</td>/tr>";
        echo '<tr><td>'.$zeile["$name"].'</td>/tr>';
        echo $zeile["$name"];

        liefern alle dasselbe Ergebnis - wie sollte es auch anders sein.
        Welche Info fehlt mir da? Hat bestimmt was mit den Anführungszeichen zu tun, nicht wahr?

        Gegeben sei:
        $string="Text\nMehr Text\nLetzter Text";

        Wenn du einfach
        echo $string;
        befiehlst, dann kriegst du die "\n" im Sourecode der HTML-Seite eingebaut, aber eben nicht zu sehen: Zeilenumbrüche werden vom Browser bei der Darstellung ignoriert, es sei denn, sie sind innerhalb von <pre> oder <textarea>.

        Deshalb:
        echo nl2br($string);
        Die Funktion nl2br() (newline to br) setzt "\n" in "<br>\n" um. Und damit klappts dann überall in HTML - nur innerhalb von <pre> und <textarea> sollte man damit vorsichtig sein, es hat dann eher unerwünschte Effekte.

        Aus eben diesem Grund (<textarea>) sollte man "\n" so direkt in die Datenbank packen und erst bei der Ausgabe des Textes bei Bedarf wandeln.

        - Sven Rautenberg

        1. Hallo Sven,

          Es leuchtet alles ein was du sagst, und ich habe mittlerweile auch das Gefühl es gibt nichts, auf das Du keine Antwort weißt. Respekt!

          Wenn ich dein Beispiel bei mir eingebe, funktioniert auch alles wie es sollte, aber:

          bei mir ist folgender Sachverhalt gegeben:
          $string1 = $array_aus_datenbank_abfrage["name"];

          und ein
          echo nl2br($string1);

          ergibt:

          "Text\nMehrText" und nicht:
          "Text
          Mehr Text"

          Hast du da noch eine Idee, woran das liegt?

          Gruss,
          Matthias

          1. Moin!

            Es leuchtet alles ein was du sagst, und ich habe mittlerweile auch das Gefühl es gibt nichts, auf das Du keine Antwort weißt. Respekt!

            Sind nur Erfahrungswerte und Erinnerungen, was andere hier im Forum alles schon geschrieben haben. Lesen bildet eben. :)

            Wenn ich dein Beispiel bei mir eingebe, funktioniert auch alles wie es sollte, aber:

            bei mir ist folgender Sachverhalt gegeben:
            $string1 = $array_aus_datenbank_abfrage["name"];

            und ein
            echo nl2br($string1);

            ergibt:

            "Text\nMehrText" und nicht:
            "Text
            Mehr Text"

            Hast du da noch eine Idee, woran das liegt?

            Ja, "natürlich". ;)

            In der Datenbank sind die Zeichen '' und 'n' gespeichert. Das muß beim Reinschreiben passiert sein. Normalerweise ist "\n" nämlich das Zeichen für "Newline", also den Zeilenumbruch.

            Du stehst jetzt vor dem Problem, daß die zwei Zeichen '' und 'n' mit nl2br nicht umgesetzt werden. Ist ja klar: Das Newline-Zeichen steht nirgends, also kommt kein "<br>" dazu.

            Ich kann da nur sagen: Überarbeite die Daten deiner Datenbank. Ersetze alle ''+'n' durch ein "\n", und es sollte eigentlich funktionieren. Sei gewarnt, daß "\n" in Strings nur funktioniert, wenn du doppelte Anführungszeichen nimmst. Mit einfachen Anführungszeichen klappt es nicht.

            - Sven Rautenberg

            1. Ich kann da nur sagen: Überarbeite die Daten deiner Datenbank. Ersetze alle ''+'n' durch ein "\n", und es sollte eigentlich funktionieren. Sei gewarnt, daß "\n" in Strings nur funktioniert, wenn du doppelte Anführungszeichen nimmst. Mit einfachen Anführungszeichen klappt es nicht.

              Falls du diese Nachricht nochmal lesen solltest:
              Danke. Daran lag es.  Manchmal ist es so einfach und man kommt nicht drauf. Problem ist bloss noch das ich bei der Ausgabe der Daten "htmlentities" benutzte und er nun '\n' repektive "\n" anzeigt. Na mal sehen, das bekomme ich auch noch hin.

              Danke Dir,
              Matthias

            2. Kommando zurück. Es geht doch nicht.

              bei mir ist folgender Sachverhalt gegeben:
              $string1 = $array_aus_datenbank_abfrage["name"];

              und ein
              echo nl2br($string1);

              ergibt:

              "Text\nMehrText" und nicht:
              "Text
              Mehr Text"

              Hast du da noch eine Idee, woran das liegt?

              Ja, "natürlich". ;)

              In der Datenbank sind die Zeichen '' und 'n' gespeichert. Das muß beim Reinschreiben passiert sein. Normalerweise ist "\n" nämlich das Zeichen für "Newline", also den Zeilenumbruch.

              Du stehst jetzt vor dem Problem, daß die zwei Zeichen '' und 'n' mit nl2br nicht umgesetzt werden. Ist ja klar: Das Newline-Zeichen steht nirgends, also kommt kein "<br>" dazu.

              Ich kann da nur sagen: Überarbeite die Daten deiner Datenbank. Ersetze alle ''+'n' durch ein "\n", und es sollte eigentlich funktionieren. Sei gewarnt, daß "\n" in Strings nur funktioniert, wenn du doppelte Anführungszeichen nimmst. Mit einfachen Anführungszeichen klappt es nicht.

              Wenn ich nl2br auf einen String anwende klappt alles:
                  echo nl2br ("das\n ist ein text");
              wird zu:
                  das<br /> ist ein text
              wird zu:
                  das
                  ist ein text

              Wenn ich nl2br auf eine Variable aus der DB anwende wird nichts umgesetzt.
              Wieso erkennt er das nicht als ein Zeichen, wenn es (s. oben) normalerweise doch auch geht?

              In der Datenbank: Text \n Text
              Im Quelltext: Text \n Text
              Angezeigt: Text \n Text

              In der Datenbank: Text "\n" Text
              Im Quelltext: Text "\n" Text
              Angezeigt: Text "\n" Text

              In der Datenbank: Text '\n' Text
              Im Quelltext: Text '\n' Text
              Angezeigt: Text '\n' Text

              Warum zeigt sich da keine Regung? Habe ich deine obige Erklärung falsch verstanden?

              Wenn ich <br> direkt in die DB schreibe funktioniert das. Kann ich aber nicht nur aus dem von Dir genannten Gründen nicht benutzen, sondern auf Grund von htmlentities.
              Das <br> würde zu <br> und somit als <br> im Browser angezeigt werden.

              Danke für die Hilfe,
              Matthias