Ordnung in Textdatei schaffen und Ausgabe ändern
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
archiv
ausgabe
ausgeben
code
date
datei
datum
ersten post
inhalt
neuigkeit
neusten post
post
posten
server
speichern
text
textdatei
uhrzeit
url
zeile
-
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öschen" type="reset" value="Lö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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
Danke aber kannst du mir zeigen, wie genau das bei meinem Code dann aussieht?
-
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 -
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. -
ultimate-bravery schrieb:
Zeilenumbruch => Textdatei:
Aber das ist ja für die Ausgabe auf der Seite. Ich will ja in der Textdatei ein Zeilenumbruch.fwrite($datei, "\n");
Oder meinst du etwas anderes? -
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 -
ultimate-bravery schrieb:
das geht so (dritte zeile '\n'):
... Ich will ja in der Textdatei ein Zeilenumbruch.
aber die ganze machart ist nicht sehr empfehlenswert.$text = "Vom $datum um $uhrzeit: "; $name=$_POST['name']; $text2 = "+' $name '+\n"; //+' steht für <br><br> und '+ steht für <br><br><hr>
-
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 '+
-
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 -
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. -
ultimate-bravery schrieb:
Jetzt wär noch interessant zu wissen, mit welchem Programm du die Textdatei anschaust.
Sorry aber es klappt weder mit dieser Zeile
fputs($datei,"\n");
noch mit dieser
.$text2 = "+' $name '+\n";
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:
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.
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.
Zum verkehrten speichern der Datei:$altedaten = file_get_contents('datei.txt'); file_put_contents('datei.txt', $neuedaten . "\n" . $altedaten);
-
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); ?>
-
ultimate-bravery schrieb:
sicher, nur wie gesagt ...
Super danke das klappt!
mein vorschlag wäre:
weil es übersichtlicher ist. das, was aber noch immer sehr ungut ist, sind die textdateien!<?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 ); }
und hier kannst es testen ;)
==== edit:
kadconbuy schrieb:
hoffentlich knallst das nicht in ein programm so rein!?
Dann Probier mal
fputs($datei,"\r\n");
\n ist Unix
\r\n ist Windows aber es gibt auch Windowsprogramme die \n erkennen!
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 -
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 -
ultimate-bravery schrieb:
Grund: Zeilenende.
EDIT: Wie es aussieht klappt dein Code nicht auf meinem Server. Bei XAMPP hats geklappt.
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. -
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); ?>
-
ultimate-bravery schrieb:
Indem du die Zeile
Und wie bekomme ich die 0 weg, die nur vor dem ersten Post steht?$newinhalt=0;
zu$newinhalt='';
änderst. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage