kostenloser Webspace werbefrei: lima-city


Ordnung in Textdatei schaffen und Ausgabe ändern

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Hallo.

    Ich habe in einem Privaten Bereich, also nach einem Login, eine Textbox, wo man Neuigkeiten reinschreiben kann. Diese Neuigkeiten werden auf der Startseite ausgegeben. Also kann man über den Privaten Bereich eine Neuigkeit auf der Startseite hinzufügen. Das ganze habe ich mit Hilfe von einer Textdatei gemacht. Die Neuigkeit wird also in einer Textdatei gespeichert und daraus auch wieder ausgegeben.

    Hier ist mein Code:

    // Formular
    
      <form method="post" action="addnews.php">
      <fieldset style="width:430px">
      <legend>Neuer Post:</legend>
      <label><textarea name="name" cols="50" rows=""></textarea></label><br />
      <input name="Posten" type="submit" value="Posten" /> <input name="l&ouml;schen" type="reset" value="L&ouml;schen" />
      </fieldset>
      </form> 
    
    //Werte in Textdatei speichern
    
    <?php
    if(isset($_POST['Posten']) && isset($_POST['name'])) {
        //Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $text = "Vom $datum um $uhrzeit: ";
        $name=$_POST['name'];
        $text2 = "+' $name '+";                                //+' steht für <br><br> und '+ steht für <br><br><hr>
            $datei=fopen("news.txt","a");
        fputs($datei,$text);
        fputs($datei,$text2);
        fclose($datei);
    	$datei2=fopen("archiv.txt","a");
        fputs($datei2,$text);
        fputs($datei2,$text2);
        fclose($datei2);
    }
    ?>
    
    //Werte ausgeben:
    
    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = str_replace("+'","<br><br>",$inhalt);                  // +' wird ersetzt durch <br><br>
    $inhalt = str_replace("'+","<br><br><hr>",$inhalt);          // '+ wird ersetzt durch <br><br><hr> 
    
    echo($inhalt);
    fclose($datei);
    ?>


    So, wie kann ich es jetzt machen, dass jeder neue "Post" in eine neue Zeile in der Textdatei geschrieben wird? Damit das ganze übersichtlicher wird. Ich habe das schon gegoogelt und habe herausgefunden, dass man dafür \n nehmen sollte. Das hat allerdings nicht geklappt.

    Meine Zweite Frage ist, wie ich den neusten Post bei der Ausgabe nach ganz oben machen kann. Also entweder die Textdatei falsch rum ausgeben oder einen neuen Post anstatt unten in die Textdatei nach oben zu speichern. Ist das möglich?

    Liebe Grüße
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Da ja in HTML <br> eine neue Zeile beginnt und normale Zeilenumbrüche (\n) nur dazu da sind den Quelltext zu Ordnen,
    musst du dann in PHP "<br>\n" an die Datei anhängen.
    EDIT: Hab die Scrollbar in der Codebox nicht gesehen. Schau grad was da nicht geht

    Beitrag zuletzt geändert: 7.6.2012 14:51:14 von kadconbuy
  4. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke aber kannst du mir zeigen, wie genau das bei meinem Code dann aussieht?
  5. Musst nur Zeilenumbrüche durch HTML Zeilenumbrüche ersetzen.
    Der Code zum Ausgeben:

    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = str_replace("+'","<br><br>",$inhalt);                  // +' wird ersetzt durch <br><br>
    $inhalt = str_replace("\n","<br>\n",$inhalt);                  // Zeilenumbruch wird ersetzt durch <br> und Zeilenumbruch
    $inhalt = str_replace("'+","<br><br><hr>",$inhalt);          // '+ wird ersetzt durch <br><br><hr> 
    
    echo($inhalt);
    fclose($datei);
    ?>


    Beitrag zuletzt geändert: 7.6.2012 14:56:43 von kadconbuy
  6. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    kadconbuy schrieb:
    Musst nur Zeilenumbrüche durch HTML Zeilenumbrüche ersetzen.
    Der Code zum Ausgeben:

    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = str_replace("+'","<br><br>",$inhalt);                  // +' wird ersetzt durch <br><br>
    $inhalt = str_replace("\n","<br>\n",$inhalt);                  // Zeilenumbruch wird ersetzt durch <br> und Zeilenumbruch
    $inhalt = str_replace("'+","<br><br><hr>",$inhalt);          // '+ wird ersetzt durch <br><br><hr> 
    
    echo($inhalt);
    fclose($datei);
    ?>


    Aber das ist ja für die Ausgabe auf der Seite. Ich will ja in der Textdatei ein Zeilenumbruch.
  7. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Aber das ist ja für die Ausgabe auf der Seite. Ich will ja in der Textdatei ein Zeilenumbruch.
    Zeilenumbruch => Textdatei:
    fwrite($datei, "\n");
    Oder meinst du etwas anderes?
  8. Dann geht das so:

    <?php
    if(isset($_POST['Posten']) && isset($_POST['name'])) {
        //Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $text = "Vom $datum um $uhrzeit: ";
        $name=$_POST['name'];
        $text2 = "+' $name '+";                                //+' steht für <br><br> und '+ steht für <br><br><hr>
            $datei=fopen("news.txt","a");
        fputs($datei,$text);
        fputs($datei,$text2);
    fputs($datei,"\n");
        fclose($datei);
    	$datei2=fopen("archiv.txt","a");
        fputs($datei2,$text);
        fputs($datei2,$text2);
        fputs($datei2,"\n");
        fclose($datei2);
    }
    ?>


    Beitrag zuletzt geändert: 7.6.2012 15:41:47 von kadconbuy
  9. ultimate-bravery schrieb:
    ... Ich will ja in der Textdatei ein Zeilenumbruch.
    das geht so (dritte zeile '\n'):
    $text = "Vom $datum um $uhrzeit: ";
        $name=$_POST['name'];
        $text2 = "+' $name '+\n";                                //+' steht für <br><br> und '+ steht für <br><br><hr>
    aber die ganze machart ist nicht sehr empfehlenswert.
  10. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Sorry aber es klappt weder mit dieser Zeile

    fputs($datei,"\n");


    noch mit dieser

    $text2 = "+' $name '+\n";
    .

    In der Textdatei steht nach 2 Einträgen:

    Von Moritz am 07.06.2012 um 15:46: +' Hallo '+Von Moritz am 07.06.2012 um 15:46: +' Tschüss '+
  11. Dann Probier mal
    fputs($datei,"\r\n");

    \n ist Unix
    \r\n ist Windows aber es gibt auch Windowsprogramme die \n erkennen!

    Beitrag zuletzt geändert: 7.6.2012 15:52:18 von kadconbuy
  12. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Super danke das klappt!

    Weiß auch noch jemand wie ich das mit der Sortierung machen kann? Also das ich entweder bei der Ausgabe den neusten Post nach oben ausgeben kann oder das bei der Eingabe in die Textdatei der neuste Post nach oben kommt.
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Sorry aber es klappt weder mit dieser Zeile
    fputs($datei,"\n");

    noch mit dieser
    $text2 = "+' $name '+\n";
    .
    Jetzt wär noch interessant zu wissen, mit welchem Programm du die Textdatei anschaust.

    Wenn du das mit "Notepad" unter Windows machst und die Datei hier am Server von lima-city erzeugt wird sieht es so aus. Wenn du dann hingegen Wordpad oder einen besseren Editor verwendest stimmt es wieder...

    Ich empfehle dir einen besseren Editor zu verwenden, der mit allen Zeilenenden umgehen kann (Notepad++, vim, ...).

    ultimate-bravery schrieb:
    Weiß auch noch jemand wie ich das mit der Sortierung machen kann? Also das ich entweder bei der Ausgabe den neusten Post nach oben ausgeben kann oder das bei der Eingabe in die Textdatei der neuste Post nach oben kommt.
    Posts werden nur duch Leerzeilen getrennt und sonst kommt nirgendwo eine Leerzeile vor? Dann kannst du die gesamte Datei einlesen, bei Leerzeilen spalten und verkehrtherum das Array ausgeben.

    Zum verkehrten speichern der Datei:
    $altedaten = file_get_contents('datei.txt');
    file_put_contents('datei.txt', $neuedaten . "\n" . $altedaten);
  14. Hab deinen Code nochmal komplett überarbeitet:
    //Werte in Textdatei speichern
    
    <?php
    if(isset($_POST['Posten']) && isset($_POST['name'])) {
        //Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $text = "Vom $datum um $uhrzeit: ";
        $name=$_POST['name'];
        $name=nl2br($name);
        $text2 = "+' $name '+\r\n";                                //+' steht für <br><br> und '+ steht für <br><br><hr>
            $datei=fopen("news.txt","a");
        fputs($datei,$text);
        fputs($datei,$text2);
        fclose($datei);
    	$datei2=fopen("archiv.txt","a");
        fputs($datei2,$text);
        fputs($datei2,$text2);
        fclose($datei2);
    }
    ?>
    
    //Werte ausgeben:
    
    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = explode("\r\n",$inhalt);
    $newinhalt=0;
    krsort($inhalt);
    foreach($inhalt as $zeile){
    $newinhalt.=$zeile."\r\n";
    }
    $newinhalt = str_replace("+'","<br><br>",$newinhalt);                  // +' wird ersetzt durch <br><br>
    $newinhalt = str_replace("'+","<br><br><hr>",$newinhalt);          // '+ wird ersetzt durch <br><br><hr> 
    
    echo($newinhalt);
    fclose($datei);
    ?>

  15. ultimate-bravery schrieb:
    Super danke das klappt!
    sicher, nur wie gesagt ...
    mein vorschlag wäre:
    <?php
    
    error_reporting(E_ALL | E_STRICT);
    $content = null;
    $news    = null;
    
    if(!empty($_POST['Posten']) && !empty($_POST['name'])) {
    $e = print_r($_POST, true);
    
      $date = date('d.m.Y');
      $time = date('H:i');
      $news = <<< EOT
    
        <section class="news">
          <h4>Vom $date um $time:</h4>
          <p>{$_POST['name']}</p>
        </section>
    
    EOT;
      file_put_contents('./news.txt', $news, FILE_APPEND);
      file_put_contents('./archive.txt', $news, FILE_APPEND);
    
    } else {
      $content = <<< EOT
    
        <form method="post" action="">
          <fieldset style="width:430px">
            <legend>Neuer Post:</legend>
            <label><textarea name="name" cols="50" rows=""></textarea></label><br />
            <input name="Posten" type="submit" value="Posten" />
            <input name="löschen" type="reset" value="Löschen" />
          </fieldset>
        </form> 
    
    EOT;
    }
    
    highlight_file(htmlentities('./news.txt'));
    show();
    
    
    
    
    # ------------------------------------------------------------------------------
    function show() {
    
      exit(<<< EOT
    <!DOCTYPE html>
    <html>
      <head>
        <title></title>
      </head>
      <body>
    {$GLOBALS['content']}
    {$GLOBALS['news']}
      </body>
    </html>
    EOT
    );
    
    }
    weil es übersichtlicher ist. das, was aber noch immer sehr ungut ist, sind die textdateien!

    und hier kannst es testen ;)


    ==== edit:
    kadconbuy schrieb:
    Dann Probier mal
    fputs($datei,"\r\n");

    \n ist Unix
    \r\n ist Windows aber es gibt auch Windowsprogramme die \n erkennen!
    hoffentlich knallst das nicht in ein programm so rein!?
    ob '\n' oder '\r\n' ist bei richtigem php egal! richtig (cross-platform-compatible way) heißt es also PHP_EOL.

    Beitrag zuletzt geändert: 7.6.2012 16:14:29 von hemiolos
  16. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    kadconbuy schrieb:
    Hab deinen Code nochmal komplett überarbeitet:
    //Werte in Textdatei speichern
    
    <?php
    if(isset($_POST['Posten']) && isset($_POST['name'])) {
        //Datum:
        $datum = date("d.m.Y");
        $uhrzeit = date("H:i");
     
        $text = "Vom $datum um $uhrzeit: ";
        $name=$_POST['name'];
        $name=nl2br($name);
        $text2 = "+' $name '+\r\n";                                //+' steht für <br><br> und '+ steht für <br><br><hr>
            $datei=fopen("news.txt","a");
        fputs($datei,$text);
        fputs($datei,$text2);
        fclose($datei);
    	$datei2=fopen("archiv.txt","a");
        fputs($datei2,$text);
        fputs($datei2,$text2);
        fclose($datei2);
    }
    ?>
    
    //Werte ausgeben:
    
    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = explode("\r\n",$inhalt);
    $newinhalt=0;
    krsort($inhalt);
    foreach($inhalt as $zeile){
    $newinhalt.=$zeile."\r\n";
    }
    $newinhalt = str_replace("+'","<br><br>",$newinhalt);                  // +' wird ersetzt durch <br><br>
    $newinhalt = str_replace("'+","<br><br><hr>",$newinhalt);          // '+ wird ersetzt durch <br><br><hr> 
    
    echo($newinhalt);
    fclose($datei);
    ?>



    Vielen Dank! Auch an die anderen. Bei der Ausgabe steht jetzt noch eine 0 vor dem ersten Post. Wie krieg ich die Weg?

    EDIT: Wie es aussieht klappt dein Code nicht auf meinem Server. Bei XAMPP hats geklappt.

    Beitrag zuletzt geändert: 7.6.2012 17:01:00 von ultimate-bravery
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    EDIT: Wie es aussieht klappt dein Code nicht auf meinem Server. Bei XAMPP hats geklappt.
    Grund: Zeilenende.

    Wenn du die Dateien hochlädst wird aus \r\n einfach \n, was dann beim explode nicht mehr gefunden werden kann... und beim Schreiben der Datei im Textmodus müsste aus \r\n auch ein \n werden wenn es sich beim Server um ein Linux handelt.
  18. Autor dieses Themas

    ultimate-bravery

    ultimate-bravery hat kostenlosen Webspace.

    Danke klappt jetzt ;) Und wie bekomme ich die 0 weg, die nur vor dem ersten Post steht?

    Hier ist nochmal der Code:

    <?php
    
    $datei = fopen("news.txt","r");
    $inhalt = fread($datei, filesize ("news.txt"));
    $inhalt = explode("\n",$inhalt);
    $newinhalt=0;
    krsort($inhalt);
    foreach($inhalt as $zeile){
    $newinhalt.=$zeile."\n";
    }
    $newinhalt = str_replace("+'","<br><br>",$newinhalt);     
    $newinhalt = str_replace("'+","<br><br><hr>",$newinhalt);         
    
    echo($newinhalt);
    fclose($datei);
    ?>
  19. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    ultimate-bravery schrieb:
    Und wie bekomme ich die 0 weg, die nur vor dem ersten Post steht?
    Indem du die Zeile
    $newinhalt=0;
    zu
    $newinhalt='';
    änderst.
  20. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!