Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit einfachem Gästebuch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit einfachem Gästebuch

    Hallo,

    ich habe ein Problem mit einem Gästebuch. Bitte zerreisst mich nicht in der Luft wenn der Code totaler Schrott ist usw. Sicherlich geht es auch einfacher aber ich bin ja grad am Anfang.

    Und zwar geht es darum:

    Ich habe folgenden Functionscode:

    PHP-Code:
    <?php
        $beitraege 
    = array();
        
    beitrag_schreiben();
        
    beitrag_einlesen();
        
        function 
    beitrag_schreiben($datei "beitraege.txt")
        {
            if (!empty(
    $_REQUEST['text']))
            {
                
    $dh fopen($datei"a");
                if (!
    $dh)
                {
                    print 
    "Kann Beitrag nicht schreiben!\n";
                }
                else
                {
                    
    fputs($dhnl2br($_REQUEST['text'])."\n");
                    if (
    $_REQUEST['autor'])
                    {
                        
    fputs($dh$_REQUEST['autor']."\n");
                    }
                    else
                    {
                        
    fputs($dh"unbekannt\n");
                    }
                    
    fclose($dh);
                }
            }
        }
        
        function 
    beitrag_einlesen($datei "beitraege.txt")
        {
            global 
    $beitraege;
            
            
    $dh fopen($datei"r");
            if(!
    $dh)
            {
                print 
    "Datei kann nicht gelesen werden!\n";
            }
            else
            {
                for (
    $i 0; !feof($dh); $i++)
                {
                    
    $zeile fgets($dh);
                    if (
    $zeile != "")
                    {
                        
    $beitraege[$i]['text'] = $zeile;
                        
    $beitraege[$i]['autor'] = fgets($dh);
                    }
                }
                
    fclose($dh);
            }
        }
        
        function 
    beitrag_ausgeben($beitrag)
        {
            print 
    "<div id=GB>";
            print 
    "<b>Autor: </b>".$beitrag['autor']."\n";
            print 
    "<br />";
            print 
    $beitrag['text']."\n";
            print 
    "</div>\n";
        }
        
        function 
    formular_ausgeben()
        {
            
    ?>
            <form method="post" action="<?php print $_SERVER['PHP_SELF'?>">
            <b>Autor: </b><input type="text" class="felder" width="50"  name="autor" />
            <br />
            <b>Eintrag: </b><textarea class="felder" name="text" cols="50" rows="10"></textarea>
            <br />
            <input type="submit" class="felder" value="absenden" />
            </form>
            <?php
        
    }
        
    ?>
    Das Gästebuch schreibt ganz einfach in eine Textdatei und die Strings werden damit ausgelesen.

    Wenn ich nun einen Eintrag schreibe und im Textfeld für den Eintrag Absätze nutze, dann fügt er diese ebenfalls in die txtdatei ein was zur Folge hat, dass mehrere Einträge erstellt werden, da ja für einen Eintrag 2 Zeilen reserviert sind.

    Habe es bisher hinbekommen das er bei Absätzen <br /> in die Textdatei einfügt, jedoch die Absätze fügt er weiterhin ein.

    Sieht dann folgendermaßen aus:

    Autor1
    Das ist die erste Zeile<br />
    <br />
    <br />
    Das ist die 4. Zeile


    d.h. das der text "Das ist die 4. Zeile" wieder als Autor interpretiert wird und somit 1 Eintrag total leer drin steht.

    Mir ist klar, dass es eigentlich so drin stehen sollte:

    Autor1
    Das ist die erste Zeile<br /><br /><br />Das ist die 4. Zeile


    Dann würde es ja funktionieren, oder?

    Danke schonmal im Voraus

  • #2
    nl2br() solltest du erst bei der Ausgabe der Inhalte ausführen, nicht schon beim Abspeichern der Daten.

    Zum Problem: Du könntest jeden Datensatz durch ein selten verwendetes Trennzeichen abschließen und die Datensätze danach aufsplitten. [MAN]explode[/MAN]
    [URL]http://hallophp.de[/URL]

    Kommentar


    • #3
      Hm, ok macht sinn

      Ich habe es jetzt mal geändert.

      Da mein Server grad Probleme macht kann ich es leider nicht ausprobieren, aber habe es mal folgendermaßen gemacht. Hoffe mal das ich das so richtig verstanden habe.

      PHP-Code:
      function beitrag_schreiben($datei "beitraege.txt")
          {
              if (!empty(
      $_REQUEST['text']))
              {
                  
      $dh fopen($datei"a");
                  if (!
      $dh)
                  {
                      print 
      "Kann Beitrag nicht schreiben!\n";
                  }
                  else
                  {
                      
      fputs($dh$_REQUEST['text']."|");
                      if (
      $_REQUEST['autor'])
                      {
                          
      fputs($dh$_REQUEST['autor']."|");
                      }
                      else
                      {
                          
      fputs($dh"unbekannt\n");
                      }
                      
      fclose($dh);
                  }
              }
          } 
      Wird dann aber nicht das "|" auch geschrieben und ausgegeben?

      PHP-Code:
      function beitrag_ausgeben($beitrag)
          {
              print 
      "<div id=GB>";
              print 
      "<b>Autor: </b>".$beitrag['autor']."\n";
              print 
      "<br />";
              print 
      nl2br(explode('|'$beitrag['text'], 2))."\n";
              print 
      "</div>\n";
          } 

      Kommentar


      • #4
        Wird dann aber nicht das "|" auch geschrieben und ausgegeben?
        Nein, das Trennzeichen fällt raus.

        explode() gibt dir ein Array zurück (siehe Handbuch), deinen jetzigen Codevorschlag wirst du also noch mal überarbeiten müssen. Schlage vor, du meldest dich wieder, wenn du das Script getestet und alle Fehler behoben hast.

        Gruß
        [URL]http://hallophp.de[/URL]

        Kommentar


        • #5
          Habe das jetzt nicht mit Explode sondern str_replace gemacht.

          PHP-Code:
              if ($_REQUEST['text'])
              {
                  
          fputs ($dh$_REQUEST['text'] = str_replace("\n""<br>"$_REQUEST['text'])."\n");
              }
              else
              { 
          So funzt es wie ich es will

          thx for help!

          Kommentar


          • #6
            Wenn jemand ein Pipe-Symbol in den Text schreibt, dann könnte das deine Systematik durcheinanderbringen. Dem kannst du begegnen, dass du als Feldtrenner z.B. "ÌÌÌ" benutzt und diese Zeichenfolge in Usertexten löschst.
            [PHP]if ($var != 0) {
            $var = 0;
            }[/PHP]

            Kommentar

            Lädt...
            X