andersrum...

Dorian Iten

Mitglied


hello,
also, ich hab ein gästebuch geschrieben das die einträge in einer *.txt speichert. der code zum "ins-file-schreiben" sieht etwa so aus:



Code:
$str= "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"2\"> <tr> <td width=\"120\">" . $ueberschrift . "</td> <td rowspan=\"4\">" . $eintrag . "</td> </tr> <tr>   <td width=\"120\">" . $name . "</td>  </tr>  <tr>    <td width=\"120\">" . $homepage . "</td>  </tr>  <tr>    <td width=\"120\">" . $icq . $icqstat . "</a></td> </tr></table><br><br>";


if ($fp=fopen($path,$modus))  {
    fwrite($fp,$str);
}
else
    echo "die Datei konnte nicht geöffnet werden";
fclose($fp);


dann bei der site die das ganze wieder ausliest:

Code:
<?
$path="gbdaten.txt";
$modus="r";
if ($fp=fopen($path,$modus))  {
    while (!feof ($fp) )   {
        $line=fgets($fp, 1000);
        echo $line;
    }
   }
else
    echo "die Datei konnte nicht geöffnet werden";
fclose( $fp );
?>
nun erscheint jeder neue eintrag am ende der datei, also unten. so muss man immer nach unten scrollem um den neusten beitrag zu sehen, was ja nicht unbedingt erwünscht ist..

meine frage wäre, wie kann ich das ganze umkehren?? also das der neuste eintrag zuoberst erscheint.


.:döS:.
 
Zuletzt bearbeitet:
Du musst die Einträge einfach in der "richtigen Reihenfolge" in die Text-Datei schreiben :p

der einfachste Weg ist folgender:

- die Datei mit $fp=fopen($datei,"r"); öffnen
- den Inhalt der datei mit $array=file($fp); in ein Array lesen
- die Datei wieder schließen fclose($fp);
- die Datei nochmal öffnen mit $fp=fopen($datei,"w+");
- zuerst den neuen Eintrag schreiben: fwrite($fp,$str);
- dann das Array in einer for-Schleife hinterher: for ($i; $i<sizeof($array); $i++) { fwrite($fp,$array[$i]); }
- die Datei wieder schließen fclose($fp);

alles klar ?

Gruß
Dunsti
 
uuh das mit den arrays.. kann ich [noch] voll nicht, naja, dann lern ich's jetzt :)
danke!! werd ich mal probieren [aber wohl nich mehr heute..]

.:döS:.
 
hmmmhmhmm..

wenn ich das so mache kommt ein fehler "no such file or directory", der auf die zeile verweist in der "$array=file($fp);" steht.

ich habe einen befehl gefunden:

rewind($fp);

der sollte den dateizeiger an den anfang der datei stellen, aber es geht nicht irgendwie.. ich mach das so:

Code:
$fp=fopen($path,$modus);

rewind($fp);

fwrite($fp,$str);

fclose($fp);

kennt jemand den rewind befehl?? was mach ich da falsch?


.:döS:.
 
Hi @ all!

@.:döS:.
Also das mit dem Array geht schon.
Da ist aber unserem Dunsti ein Fehler unterlaufen.

PHP:
$content = $str;
$content.= implode("\n",file($datei));
$fp = fopen($datei,"w");
fwrite($fp, $content);
fclose($fp);

@Dunsti
array file(string filename) ist die Syntax.
 
stimmt, war mein Fehler! sorry :rolleyes:

bei der Funktion file() darf nicht der Filepointer (hier $fp) stehen, sondern muss direkt der Filename als String stehen: file($datei)
dann müsste es gehen.

@maximka: muss ich dazu die Datei trotzdem vorher mit fopen() öffnen? oder geht das da auch ohne ?

Gruß
Dunsti
 
@Dunsti
Eigentlich macht die Funktion diesen Block fuer dich:
PHP:
function file($filename) {
$fp = fopen($filename,"r");
$result = explode("\n",fread($fp,filesize($filename)));
fclose($fp);
return $result;
}
 
nach der letzten anleitung wär dann in $result der inhalt der *.txt?

ich probier's mal, danke euch beiden

.:döS:.


---edit---
heey, das funktioniert sogar, kewl!! :|

hm, nützt mir ja nix wenn s einfach läuft, ich muss ja wissen warum wie was, also was bewirkt die funktion

implode("\n",file($datei));

? also das implode um genau zu sein.

wenn ihr keine zeit habt auch ok, das find ich sonst schon irgendwo
---/edit---
 
Zuletzt bearbeitet:
das letzte von Maximka war nur ne Erklärung für mich ;)

$result = file("irgendwas.txt");

damit hast Du in jedem Feld von $result eine Zeile der Datei "irgendwas.txt" !!!!!!!!!

das was in dem file() zwischen den Klammern steht darf nur kein Dateizeiger sein (so wie bei meinem ersten Post). Es muss der (relative) Dateiname als String sein.

sowas ginge dann auch:

$dateiname = "pfad1/pfad2/datei.txt";
$result = file($dateiname);

Gruß
Dunsti
 
aaaaaha :D
baaahnhof, aber egal, ich werd nie programmierer werden denk ich, wenn ich ne userGallery machen kann, wo jedes mitglied ein konto hat, bilder raufladen und kommentieren kann, wieder löschen, etc. bin ich zufrieden, viel weiter muss ich nicht mehr gehen denk ich ;-)
aber bis es soweit ist wird's noch ein weeeiter weg sein :%
 
Zurück