.txt dateien reiheinfolge ändern

dada10

Grünschnabel
Hallo Zusammen,

Ich habe auf meiner Seite ne "Newsbox" und kann die jetzt über einen Formular aktualisieren indem das "abgeschickte" in einer txt-Datei gespeichert wird. Jetzt möcht ich aber, dass wenn eine neure Beitrag dazukommt, der am Anfag der txt-Datei und nicht wie üblich am Ende gespeichert wird. Damit man die "News" immer oben sind...

dada10
 
Du wirst wohl nicht drum herum kommen, die komplette Datei einzulesen, und alle neu hineinzuschreiben. Dann natürlich mit der neusten News zuerst. Wenn du das verhindern willst, musst du das Grundsätzliche Einlesen verändern. Zu erste alles einlesen und dann in umgekehrter reihnfolge ausgeben.
 
Mit der Funktion fopen(); wirst du ja wohl deine Datei öffnen, denke ich,

Dieser Funktion übergibst du einfach den Wert 'r+' dann wird die Datei geöffnet und der Zeiger an den Anfang der Datei gesetzt

'r+' Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.

grüßle
 
Mit der Funktion fopen(); wirst du ja wohl deine Datei öffnen, denke ich,

Dieser Funktion übergibst du einfach den Wert 'r+' dann wird die Datei geöffnet und der Zeiger an den Anfang der Datei gesetzt



grüßle


Leider ist das nicht so einfach, so weit ich weiß wird dann der Anfang auch überschrieben und nicht etwas davor eingefüggt.

@dada10:Was hast du den Berreits? interessant wer deine Lese Routine, vor der bei der Ausgabe der News.
 
Wenn du meinen Code meinst, das ist er:

news_admin.html: (Forumular zum versenden der Aktulisierung)
PHP:
    <FORM METHOD=post ACTION="news_admin.php" NAME="news">
    
<TABLE>
<TR>

    <TD WIDTH="100" VALIGN="TOP">
    Datum:
    </TD>
    <TD WIDTH="400" VALIGN="TOP">
    <INPUT TYPE="text" NAME="datum" SIZE="40" MAXLENGTH="150">
    </TD>

</TR>
<TR>

    <TD>
    News:
    </TD>
    <TD WIDTH="400" VALIGN="TOP">
    <TEXTAREA NAME="news" ROWS="5" COLS="40">
    News
    </TEXTAREA>
    </TD>

</TR>
</TABLE>
    <INPUT TYPE=submit VALUE=Eintragen>
    </FORM>
    
    </BR>
    </BR>
    <A HREF="/seiten/news/news_del.html">Alles löschen</A>

news_amin.php (Speichert die oben beschriebenen werte in die Datei "news.txt)
PHP:
    <?php

    $datum = $HTTP_POST_VARS["datum"];
    $news1 = $HTTP_POST_VARS["news"];

    $news = fopen ("news.txt","a");
    fwrite($news, $datum);
    fwrite($news, "\n");
    fwrite($news, $news1);
    fwrite($news, "\n");
    fwrite($news, "\n");
    fclose($news);


    ?>

news_del.html (Formular zum löschen der news.txt)
PHP:
    </BR>
    </BR>

    <FORM METHOD=post ACTION="news_del.php" NAME="del">

<TABLE>
<TR>

    <TD WIDTH="400" VALIGN="TOP">
    Ich weiss, dass ich alles aus der Newsbox lösche...<P>
    </TD>

    <TD WIDTH="400" VALIGN="TOP">
    <INPUT TYPE="checkbox" NAME="del"><P>
    </TD>

</TR>
</TABLE>

    <INPUT TYPE=submit VALUE=Löschen>
    </FORM>
news_del.php (Führt den Löschen-Befehl aus)
PHP:
    <?php

    $del = $HTTP_POST_VARS["del"];

    $news = fopen ("news.txt","w+");
    fwrite($news, $del);
    fclose($news);
    
    ?>

news.php (zeigt den inhalt der news.txt datei an)
PHP:
    <?php
 
    $datei="news.txt";

    $dateizeiger=fopen($datei,"r"); 
    while(!feof($dateizeiger)) 
    { 
    echo fgets($dateizeiger)."<br>"; 
    } 
    fclose($dateizeiger); 

    ?>

Und dann hab ich noch die Datei news.txt

dada10
 
Moin,

vorrausgesetzt, du schreibst jeden Eintrag in eine eigene, einzelne Zeile(dein Skript erweckt den Anschein), geht es auch einfacher :)

Schreibe einfach alles an das Ende.
Lese die Textdatei dann per file() aus...das liefert dir einen Array
Den musst du nur noch per array_reverse() umdrehen oder gehst ihn rückwärts durch, das erspart dir das Einlesen vor dem Schreiben.
Also nicht die Datei ändern, sondern den Ablauf der Ausgabe.
 
Womit genau hast du denn Probleme, dass du es nicht selbst Probieren willst?

Code:
$file = file('news.txt')
...liefert dir die Datei zeilenweise als Array
Code:
array_reverse($file)
...dreht diesen Array um.

Code:
echo implode('<br />',$file) ;
Gibt den Array aus.

Probiere es einfach mal aus :)

Beachte aber Jenes aus meinem vorrangegangenen Posting:
vorrausgesetzt, du schreibst jeden Eintrag in eine eigene, einzelne Zeile
 
Danke für den code.

Ich kann aber nicht alles in eine zeile Schreiben, da das am schluss so aussehen soll:


10.11.2008
Neue News.Neue News.Neue News.Neue News.Neue News.Neue News.Neue News.Neue News.Neue News.Neue News.

Neue News.Neue News.

dada10

PS: War ein Beispiel
 
Zurück