Matthias: Zeilenumbrüche?

Ich versuch jetzt schon seit Tagen, meinem PHP Gästebuch Zeilenumbrüche beizubringen und bin zu dem Schluss gekommen, dass es eigentlich nur am Formular liegen kann:

echo "<form action='content/gaestebuch/eintragen.php' method='get'>";
echo "<center>";
echo "<table cellspacing='2' cellpadding='2' width='200' border=1 bordercolor='#000000' bgcolor='#00688B'>";

echo "<tr>";
echo "       <td bgcolor='#e0e0e0'>Name:</td>";
echo "       <td bgcolor='#e0e0e0'><input align='center' checked maxlength='30' name='Name' size='50' type='text' value='Name'></td>";
echo "</tr>";
echo "<tr>";
echo "       <td bgcolor='#e0e0e0'>Mail:</td>";
echo "       <td bgcolor='#e0e0e0'><input align='center' checked maxlength='30' name='Mail' size='50' type='text' value='@'></td>";
echo "</tr>";
echo "<tr>";
echo "       <td bgcolor='#e0e0e0' valign='top'>Text:</td>";
echo "       <td bgcolor='#e0e0e0'><Textarea rows=5 cols=38 name='Text' wrap='physical'>Text</Textarea></td>";
echo "</tr>";
echo "<tr>";
echo "       <td bgcolor='#e0e0e0'> </td>";
echo "       <td bgcolor='#e0e0e0'><input align='center' type='submit' value='Ab dafür!'></td>";
echo "</tr>";
echo "</table>";
echo "</center>";
echo "</form>";

Ich versteh einfach nicht, wieso die Umbrüche nicht übermittelt werden. Muss ich da irgendwas beachten? Kann es sein, dass die Umbrüche von einem Windowssystem anders als die eines anderen Betriebssystems sind? Auf meinem Testserver gehts nämlich und mein Hoster benutzt UNIX.

Für antworten wär ich dankbar,

Matthias

  1. Hallo Matthias,

    Ich versteh einfach nicht, wieso die Umbrüche nicht übermittelt werden. Muss ich da irgendwas beachten? Kann es sein, dass die Umbrüche von einem Windowssystem anders als die eines anderen Betriebssystems sind? Auf meinem Testserver gehts nämlich und mein Hoster benutzt UNIX.

    Wo werden die Textumbrüche nicht übertragen /angezeigt?
    Wo schreibst Du die Daten hin Textdatei /Datenbank?
    Sind die Zeilenumbrüche in der Datei / Datenbank korrekt vorhanden?
    Wie sieht die eintragen.php aus?
    Wie sieht Deine Ausgabe aus?

    TomIRL

    1. Anscheinend werden sie nicht korrekt von der Seite an mein Script übertragen, das alles in einer Textdatei speichert. Dabei belegt ein Eintrag eine Zeile, die Einzelnen Felder wie Name, Zeit, E-Mail etc. werden durch §-Zeichen getrennt. Aber in der Datei sind die Umbrüche schon nicht mehr vorhanden.

      Das Script sieht so aus:

      <?php

      if ((isset($Name) && isset($Name)) && (chop($Mail) != "" && chop($Mail) != "") && (chop($Text) != "" && chop($Text) != ""))

      {

      $dateiname = "gaestebuch.txt";
       $daten = file($dateiname);

      #Text mit Zeilenumbrüchen formatieren
       $Text = nl2br($Text);
       $Text = str_replace("\n", "", $Text);

      #feststellen, ob ein Wort länger als 50 Zeichen ist
       $Text = explode(" ", $Text);

      for($x=0; $x < count($Text); $x++)

      {

      if (strlen($Text[$x]) > 50)

      {

      echo "<center>Bitte versuchen sie nicht, das Gästebuch zu manipulieren!<br></center>";
           echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";

      exit();

      }

      }

      $Text = implode (" ", $Text);

      #§ durch html-character ersetzen
       $Text = ereg_replace("§","§",$Text);
       $Mail = ereg_replace("§","§",$Mail);
       $Name = ereg_replace("§","§",$Name);

      $timestamp = time(); //Zeit setzen
       $datum = date("d.m.Y", $timestamp);
       $zeit = date("H:i", $timestamp);

      #String zusammensetzen und an erste Stelle von Daten bringen
       $resultat[0] = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n"; //Korrekt

      for($x=0; $x < count($daten); $x++)

      {

      $resultat[$x +1] = $daten[$x];

      }

      #In Datei schreiben
       $resultat = implode("", $resultat);

      $filehandle = fopen($dateiname, "w");
       fwrite($filehandle, $resultat);

      echo "<center>Eintragung erfolgreich!<br></center>";
       echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";

      }

      else

      {

      echo "<center>Du hast ein Feld vergessen!<br></center>";
       echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";

      }

      ?>

      Wenn nun jemand aber jemand

      Zeilen
      umbruch

      eingibt,

      kommt Zeilenumbruch raus.

      1. hi,

        if (

        (isset($Name) &&
        isset($Name)) && (

        chop($Mail) != "" &&
        chop($Mail) != "" ) && (

        chop($Text) != "" &&
        chop($Text) != ""

        ))

        doppelt geprüft hält besser ...?

        gruss,
        wahsaga

      2. Hallo Matthias,
        Sorry das ich so ein bischen dumm Frage:
        Das Skript soll doch nur Daten eintragen oder?

        <?php

        if ((isset($Name) && isset($Name)) && (chop($Mail) != "" && chop($Mail) != "") && (chop($Text) != "" && chop($Text) != ""))

        Jut verstanden.. bis auf den doppelten $text

        $dateiname = "gaestebuch.txt";
        $daten = file($dateiname);

        Warum liest Du die Daten an der Stelle ein?

        $Text = implode (" ", $Text);

        #§ durch html-character ersetzen
        $Text = ereg_replace("§","§",$Text);
        $Mail = ereg_replace("§","§",$Mail);
        $Name = ereg_replace("§","§",$Name);

        $timestamp = time(); //Zeit setzen
        $datum = date("d.m.Y", $timestamp);
        $zeit = date("H:i", $timestamp);

        #String zusammensetzen und an erste Stelle von Daten bringen
        $resultat[0] = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n"; //Korrekt

        Ab hier denke ich sitzt das Problem.

        Ich würde um die Sache zu vereinfachen die Daten hinten dran schreiben und bei der Ausgabe das Array mit revers umdrehen.
        Ich glaube in der folgenden for Schleife liegt Dein Problem  meiner Ansicht nach in dem $resulat  $resultat[$x +1] = $daten[$x];

        Kann mich aber auch irren.

        for($x=0; $x < count($daten); $x++)

        {

        $resultat[$x +1] = $daten[$x];

        }

        #In Datei schreiben
        $resultat = implode("", $resultat);

        Außerdem finde ich komisch das Du mit $resultat implode () weiterarbeitest.
        Erst hast Du ein Array dass wandelst Du in einen String um?
        Warum ?
        Warum nicht einfach den String hinten ran klatschen?

        Also wie gesagt:

        $eintrag = $Name . "§" . $Mail . "§" . $datum . "§" . $zeit . "§" . $Text . "\n";
        $filehandle = fopen($dateiname, "w");
        fwrite($filehandle, $eintrag);

        echo "<center>Eintragung erfolgreich!<br></center>";
        echo "<center><a href='../../View.php?content=gaestebuch/gaestebuch.php'>Zurück</a></center>";

        Das müßte gehen und dann die Ausgabe formatieren.

        Ich hoffe ich konnte Dir wenigstens ein bischen weiterhelfen.

        Viele Grüße aus Berlin

        TomIRL