Datei in Zielen auslesen

dsNDesign

Erfahrenes Mitglied
Hi,

Ich mache gerade für meine Page ein Gästebuch.

Dabei habe ich folgenden Code, um die Daten zu speichern.

PHP:
<?php

$daten=$_POST['eintrag'].'<br>von '.$_POST['name'].' <a href="mailto:'.$_POST['email'].'"><img src="./gif/email.png"></a> <a href="'.$_POST['homepage'].'"><img src="./gif/hp.png"></a><br><br>';

$datenbank = "daten.dat";

$datei = fopen($datenbank,"a");

fwrite($datei, $daten);

?>

und folgenden Code, um die Einträge anzuzeigen:

PHP:
<?php

$file = array_reverse( file( 'daten.dat' ) );

foreach ( $file as $line ){
echo "$line";
}

?>

Es funktioniert soweit auch alles, nur werden die Einträge die neusten immer unten angezeigt. Jedoch möchte ich, dass die neusten immer oben angezeigt werden. Dies habe ich vor, über den Befehl array_reverse zu machen. Jedoch bekomme ich die Daten aus der daten.dat nicht in einzelne Zeilen. Was muss ich machen, um die einzelne Einträge in extra Zeilen zu bekommen?

Ich hoffe mir kann jemand helfen.

Grüße

PS: Hier noch ein Beispiel der daten.dat:

Code:
Name1<br>von Name1 <a href="mailto:Name1"><img src="./gif/email.png"></a> <a href="http://Name1"><img src="./gif/hp.png"></a><br><br>Name2<br>von Name2 <a href="mailto:Name2"><img src="./gif/email.png"></a> <a href="http://Name2"><img src="./gif/hp.png"></a><br><br>
 
Speichern:

PHP:
<?php

$daten = htmlspecialchars(strip_tags($_POST['eintrag']))
        .'<br>von '.htmlspecialchars(strip_tags($_POST['name'])).' '
        .'<a href="mailto:'.htmlspecialchars(strip_tags($_POST['email'])).'">'
        .'<img src="./gif/email.png"></a> '
        .'<a href="'.htmlspecialchars(strip_tags($_POST['homepage'])).'">'
        .'<img src="./gif/hp.png"></a>'."\r\n";

$datenbank = "daten.dat";

$datei = fopen($datenbank,"a");

fwrite($datei, $daten);

?>


Ausgabe:

PHP:
<?php

foreach (array_reverse( file( 'daten.dat' ) ) as $line ){
    
    echo trim($line)."<br><br>";
}

?>
 
Hallo!

Warum setzt Du den Dateizeiger beim Schreiben in die "Datenbank" bei fopen() nicht mittels "r+" an den Anfang der Datei?
So hast Du den neusten Eintrag immer ganz oben.

Evtl. muss noch ein Zeilenumbruch mittels \n oder \n\r an den Anfang oder das Ende der Zeile angehängt werden (meine "ASCI-Datenbankzeiten" sind seit MySQL schon längst vorbei und vergessen ;) ).

Auslesen tust Du die Datei dann mit fopen(".....", "r" ) und fgets().

Gruss Dr Dau
 
Dann lass den Dateizeiger doch ruhig die Leerzeile, welche sich am Anfang der Datei befindet bzw. immer wieder von neuem dort eingefügt wird, doch überschreiben.
Wen juckts. ;)
 
;) Das Problem ist doch, dass man in Dateien keine Inhalte vorn einfügen kann. Entweder es wird angehängt, oder die komplette Datei wird ausgelesen und mit neuem Inhalt komplett überschrieben. Im letzten Fall allerdings würde bei einem großen Gästebuch irgendwann enormer Speicherbedarf entstehen und entw. der Server oder der Anwender die Geduld verlieren. ^^
 
Hmm, klingt irgendwie logisch. ;)
Wie gesagt, meine Zeiten mit ASCI sind vorbei..... zum glück.

Irgendwann wird er sich sicherlich auch Gedanken darüber machen wie er einzelne Einträge (z.B. Spam) löschen kann (oder gar muss). :-)
Da ist eine echte Datenbank klar im Vorteil. ;)
 
Ja. ^^ Dann kommt er hoffentlich wieder her und fördert die Statistik.

Aber hey, wir haben doch alle mal so angefangen. Lassen wir ihm die Erfahrung. Sie ist ja auch wichtig.
 
Genau. Ich arbeite mich in die Themen immer so langsam rein. Wenn ich dann auf Probleme stoße versuche ich es weiter zu entwickeln und so.

@sebastiangdot
Deine Lösung hat perfekt funktioniert.
Vielen Dank dafür.

Grüße



EDIT:
Ist es jetzt zufällig noch irgendwie möglich, nur eine begrenzte Anzahl an Einträgen auf einer Seite anzuzeigen? Das also unten 1,2,3 für weitere Seiten angezeigt wird, auf denen die restelichen Einträge liegen.

Beispiel: Auf einer Seite werden immer nur die neusten 10 Einträge angezeigt. Die älteren sind auf weiteren Seiten, die unten durch 1, 2, 3,... verlinkt sind.
 
Zuletzt bearbeitet:
"irgendwie" ist es ganz bestimmt möglich. ;)
Stichwort ist hier "Blätterfunktion", suche mal hier und/oder bei den Tutorials.
Nur ob da auch etwas passendes für eine ASCI-Datenbank dabei ist, kann ich Dir nicht sagen.
Das Problem wird aber irgendwann sein dass PHP aufgrund der Dateigrösse und der max. Ausführungszeit des Scripts irgendwann nichtmehr mitspielt, da die Datei jedesmal komplett ausgelesen werden muss.
 
Zurück