Claudia: Datenbankausgabe in Tabellenzeile

Hallo,
ich habe in meiner Datenbank eine Zeile mit Zeilenumbruche.
"dies ist eine zeile,
 mit zeilenumbruch"

wenn ich die Zeile in einer Tabellenzeile ausgeben will, gibt IE den Fehler aus. "Nicht abgeschlossene Zeichenfolgenkonstante"
und firefox "unterminated string literal".
echo "<td>'$text[1]'</td>\n";

muss ich noch irgendetwas davorschreiben, damit IE und FF das akzeptieren. Vielen Dank

  1. Hellihello

    Hallo,
    ich habe in meiner Datenbank eine Zeile mit Zeilenumbruche.
    "dies ist eine zeile,
    mit zeilenumbruch"

    wenn ich die Zeile in einer Tabellenzeile ausgeben will, gibt IE den Fehler aus. "Nicht abgeschlossene Zeichenfolgenkonstante"
    und firefox "unterminated string literal".
    echo "<td>'$text[1]'</td>\n";

    muss ich noch irgendetwas davorschreiben, damit IE und FF das akzeptieren.

    Interessant ist erstmal der Quelltext, der _ausgegeben_ wird.
    Ansonsten: Variablen in einfachen Hochkommas werden nicht interpretiert, oder?

    Vielen Dank
    Dank und Gruß,

    frankx

    --
    tryin to multitain  - Globus = Planet != Welt
    1. Ok,
      das mit dem Hochkommas war auch nur ein Versuch.
      Aber hab nun rausgefunden, dass er nur einen Fehler anzeigt, weil ich die Variable noch in einem Script verwenden.
      echo "<input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=$text[1]'" />"

      Der Fehler kommt auch nur, wenn die Zeile einen Zeilenumbruch hat. Ansonsten nicht.
      bestimmt was ganz banales. bin nur noch Anfänger

      1. Mahlzeit,

        echo "<input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=$text[1]'" />"

        Aha. Also ein Javascript-Fehler. Wenn Du uns das gleich mitgeteilt hättest ... ;-)

        Der Fehler kommt auch nur, wenn die Zeile einen Zeilenumbruch hat. Ansonsten nicht.

        Natürlich. Schließlich erwartet Javascript einen abgeschlossenen String. Wenn Du frankx' Hinweis "Interessant ist erstmal der Quelltext, der _ausgegeben_ wird." ernstgenommen hättest, wärst Du da vielleicht auch von selbst drauf gekommen:

        Javscript wird im Browser ausgeführt. Der Browser bekommt von PHP nichts mit, sondern "sieht" nur das reine HTML. Wenn in der (auf dem Server vorhandenen) PHP-Variable nun z.B. der folgende Text (mit Zeilenumbruch) drinsteht:

        Foo bar blubb
        bla laber

        Was kommt dann beim Browser an?

        Richtig:

        <input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=Foo bar blubb  
        bla laber'" />
        

        Und da der String, der beim "onclick" an top.location.href zugewiesen werden soll, nicht abgeschlossen ist (nach "blubb" ist nämlich plötzlich Ende mit der Zeile), kommt dieser Javascript-Fehler zustande.

        Für's nächste Mal: GENAUE Fehlermeldungen (sowie Zeit und Ort ihres Auftretens) sind die halbe Lösung. Wenn Du dann noch die Hinweise der Nachfrager beherzigst und darauf eingehst, geht's NOCH schneller ... :-)

        bestimmt was ganz banales. bin nur noch Anfänger

        Waren wir alle mal.

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
        1. Ok, danke. hatte aber erst später gesehen, dass es an JAVASCRIPT lag.
          Hast du nun auch ein Lösung für das Problem anzubieten?

          1. Hellihello

            Ok, danke. hatte aber erst später gesehen, dass es an JAVASCRIPT lag.
            Hast du nun auch ein Lösung für das Problem anzubieten?

            $text = str_replace("\n","",$text);
            $text = str_replace("\r","",$text);

            Dank und Gruß,

            frankx

            --
            tryin to multitain  - Globus = Planet != Welt
            1. Hallo Robert,

              Ok, danke. hatte aber erst später gesehen, dass es an JAVASCRIPT lag.
              Hast du nun auch ein Lösung für das Problem anzubieten?

              $text = str_replace("\n","",$text);
              $text = str_replace("\r","",$text);

              das ist meiner Meinung nach keine gute Idee, da Daten weggeworfen werden. Was wäre, wenn ein einfaches oder doppeltes Anführungszeichen in der Variablen vorkommt?

              Sinnvoller wäre eine kontextgemäße Behandlung:

              - Daten im Querystring mit urlencode
               - Ausgabe im HTML-Kontext: htmlspecialchars

              ... siehe auch diese Beiträge von dedlfix:
               - </archiv/2008/3/t168976/#m1103199>
               - </archiv/2008/3/t168823/#m1102025>

              Freundliche Grüße

              Vinzenz

              1. Hellihello Vinzenz,

                Hast du nun auch ein Lösung für das Problem anzubieten?

                $text = str_replace("\n","",$text);
                $text = str_replace("\r","",$text);

                das ist meiner Meinung nach keine gute Idee, da Daten weggeworfen werden. Was wäre, wenn ein einfaches oder doppeltes Anführungszeichen in der Variablen vorkommt?

                Grundsätzlich hast du mit u.g. sicher Recht. Aber zu obiger Frage: was wäre denn dann? Ein String mit Anführungszeichen ohne CR und LF und immer noch mit Anführungszeichen (;-)? Das Zeug kommt doch aus einer Datenbbankg und soll als in einem onclick-Attribut eine Query-String angehangen werden. Vermutlich kapier ich irgendwas nicht. Außer, dass urlencode natürlich sinnger ist.

                Sinnvoller wäre eine kontextgemäße Behandlung:

                ... siehe auch diese Beiträge von dedlfix:

                Dank und Gruß,

                Robert aka

                frankx

                --
                tryin to multitain  - Globus = Planet != Welt
              2. Sinnvoller wäre eine kontextgemäße Behandlung:

                ... siehe auch diese Beiträge von dedlfix:

                • </archiv/2008/3/t168976/#m1103199>
                • </archiv/2008/3/t168823/#m1102025>

                Hallo,
                Mir wäre auch lieb, wenn ich die Zeilenumbrüche beibehalten könnte. Wie kann ich urlencode bzw. htmlspecialchars benutzen?
                kann ich es beim Speichern das Textes in die Datenbank benutzen?

                1. Wie kann ich urlencode bzw. htmlspecialchars benutzen?

                  hast du bei den beiden links die funktionsbeschreibung nicht verstanden oder bist du den verweisen garnicht erst gefolgt?

                  1. Wie kann ich urlencode bzw. htmlspecialchars benutzen?

                    hast du bei den beiden links die funktionsbeschreibung nicht verstanden ich hab alles kurz überflogen.

                    hab jetzt einfach $text=urlencode($text) gemacht.
                    Damit funktionierts.
                    Kann das zu Problemen führen?

                    1. hab jetzt einfach $text=urlencode($text) gemacht.

                      Kann das zu Problemen führen?

                      natürlich, da urlencode jeden eingegeben string urlencodiert

                      wenn du also jetzt "hallo welt" stehen hast, sollte "hallo%20welt" oder "hallo+welt" rauskommen - im ausgabetext deiner seite sieht das natürlich nicht toll aus

                      darum solltest du ausschließlich die parameter die du im querystring übergibst mit urlencode behandeln

              3. Mahlzeit,

                $text = str_replace("\n","",$text);
                $text = str_replace("\r","",$text);

                das ist meiner Meinung nach keine gute Idee, da Daten weggeworfen werden.

                Sehe ich genauso.

                Sinnvoller wäre eine kontextgemäße Behandlung:

                Sehe ich auch so.

                Und wie würdest Du im konkreten Fall (in dem es weder um Querystrings noch HTML-Ausgaben geht, sondern um Javascript) die Daten kontextgemäß behandeln?

                Ich würde - da sowohl in PHP als auch in Javascript die ASCII-Codes 10 als "\n" bzw. 13 als "\r" dargestellt werden - einfach die Backslashes entsprechend maskieren:

                $text = str_replace("\n", "\\n", str_replace("\r", "\\r", $text));

                Damit dürfte als Ergebnis der HTML-Code folgendermaßen aussehen:

                <input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=Foo bar blubb\nbla laber'" />

                Und das sollte problemlos funktionieren ...

                Bessere Lösungsansätze sind herzlich willkommen!

                ... siehe auch diese Beiträge von dedlfix:

                • </archiv/2008/3/t168976/#m1103199>
                • </archiv/2008/3/t168823/#m1102025>

                Dummerweise behandeln diese Beiträge nicht den konkreten Fall.

                MfG,
                EKKi

                --
                sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Hellihello

        Ok,
        das mit dem Hochkommas war auch nur ein Versuch.
        Aber hab nun rausgefunden, dass er nur einen Fehler anzeigt, weil ich die Variable noch in einem Script verwenden.

        echo "<input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=$text[1]'" />"

          
        <input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=<?php echo $text[1];?>">  
        
        

        auch schön.

        Der Fehler kommt auch nur, wenn die Zeile einen Zeilenumbruch hat. Ansonsten nicht.

        Na schau dir mal die Ausgabe an. Der Zeilenumbruch steht ja dann vermutlich innerhalb des onclick-Attributs.

        bestimmt was ganz banales. bin nur noch Anfänger

        Normalerweise interessiert sich HTML (also nicht innerhalb eines Attributes) nicht für Zeilenumbrüche.

        Dank und Gruß,

        frankx

        --
        tryin to multitain  - Globus = Planet != Welt
        1. <input type="button" value="Bearbeiten" onclick="top.location.href='bearbeiten.php?text=<?php echo $text[1];?>">

          mhm, das geht nicht.  
          mein <input> ist doch schon ein php echo. der Zeilenumbruch kommt ja dann trotzdem  
            
          
          > Na schau dir mal die Ausgabe an. Der Zeilenumbruch steht ja dann vermutlich innerhalb des onclick-Attributs.  
            
          <input type="button" class="tablebutton" value="Bearbeiten" style="background-color:#FFD8A6" onclick="top.location.href='bearbeiten.php?beschreibung=text mit  
          zeilenumbruch'" />  
            
          
          > Normalerweise interessiert sich HTML (also nicht innerhalb eines Attributes) nicht für Zeilenumbrüche.  
          
          Mhm, anscheinend stört das schon.  
          aber wie kann ich das umgehen?  
          Danke euch
          
    2. Hallo frankx,

      echo "<td>'$text[1]'</td>\n";
      Ansonsten: Variablen in einfachen Hochkommas werden nicht interpretiert, oder?

      Variablen, die sich in einer durch doppelte Anführungszeichen begrenzten Zeichenkette befinden, werden auch dann ausgewertet, wenn diese Variablen innerhalb der Zeichenkette in einfachen Anführungszeichen eingeschlossen sind :-)

      Freundliche Grüße

      Vinzenz