Datei auslesen und schreiben problem

styz

Mitglied
hallo,

hab nen problem beim schreiben in die news.txt datei, er schreibt halt nicht wie gewollt sondern nur 2 von 3 zeilen und löscht alle vorher in der datei enthaltenen zeilen, muss wohl irgendwie an der schleife liegen:
Code:
$zahl = 0;

$fread = fopen("news.txt", "r");

while(feof($fread)==0)
{

	$autor[$zahl]=chop(fgets($fread, 110));
	$head[$zahl]=chop(fgets($fread, 110));
	$newstext[$zahl]=chop(fgets($fread, 10500));
	$time[$zahl]=chop(fgets($fread, 110));
	$zahl++;

}
fclose($fread);


$autor[$nr]	                     =  $newautor;
$head[$nr]           	= $newhead;
$newstext[$nr]	= $newtext;

$fwrite = fopen("news.txt", "w");

if($zahl = $nr) 
{
	fwrite($fwrite, "$autor[$nr]\n");
	fwrite($fwrite, "$header[$nr]\n");
 	fwrite($fwrite, "$newstext[$nr]\n");
 	fwrite($fwrite, "$time[$zahl]\n");
}
else {
	fwrite($fwrite, "$autor[$zahl]\n");
	fwrite($fwrite, "$header[$zahl]\n");
 	fwrite($fwrite, "$newstext[$zahl]\n");
 	fwrite($fwrite, "$time[zahl]\n");
}

fclose($fwrite);
$zahl++

in newautor, newhead, newtext sind autor, überschrift und text enthalten der editiert wurde.

ich will eigentlich das er alles wie vorher in die datei schreibt nur wenn halt die variable $zahl genauso groß ist wie $nr (gibt welche news editiert wurde / werden soll) soll er den inhalt von autor[$nr] usw schreiben.
 
Zuletzt bearbeitet:
$fwrite = fopen("news.txt", "w");

Zitat PHP.net
'w' Öffnet die Datei nur zum Schreiben und setzt den Dateizeiger auf den Anfang der Datei sowie die Länge der Datei auf 0 Byte. Wenn die Datei nicht existiert wird versucht sie anzulegen.

ein Blick ins Handbuch erzählt mehr als tausend Threads im Forum! Mach ne Abfrage rein, ob die Datei bereits existiert, dann fopen(...,'a') , ansonsten fopen(...,'w')!
 
daran kanns nicht liegen, da ich bereits ne news.txt habe,
das is zum editieren und wenn ich ne news editiere muss ich se ja schon geschrieben haben -> die news.txt ist vorhanden.
wenn ich "a" nehme dann fügt er ne neue news hinzu und die alte bleibt einfach stehen.

das problem ist halt das er alle in der txt datei enthaltenen zeilen löscht bzw sie überschreibt also als bsp:

vorher:

autor1
news1
newstext1
autor2
news2
newstext2
usw


nachher:

autor_edited
news_edited
newstext_edited

der rest ist einfach mal verschwunden, ich würde auf die schleifen tippen aber komm einfach nicht drauf was da nicht will...


edit: vielleicht sollte ich mal hinschreiben was ich mir eigentlich mit dem code erhofft hatte:
er stollte alles einlesen und dann wieder alles hinternander in die news.txt schreiben (und das alte dabei überschreiben).
wenn $nr und $zahl gleich groß ist (das ist dann die news die ich editiert habe) soll er statt den inhalt von $autor[$zahl] usw den von $autor[$nr] in die txt schreiben.
 
Zuletzt bearbeitet:
Ich kann aber gar keine Schleife finden, die zum Eintrag passt!

du hast nur nen If($nr == $zahl) was übrigens 2= sein müssen, weil sonst $nr mit dem Wert von $Zahl gesetzt wird, was fast immer true ist. Aber nen while oder for finde ich nur einmal, aber in Verbindung mit dem Auslesen der Datei.
 
sry, mein die if else bedingung.

mhh mit 2 = will er garnicht,
glaube bin da auf dem komplett falschen weg..................
 
wie ich schon sagte fehlt dir die Schleife, die den Spaß wieder in die Datei reinschreibt!

for($i=0;$i<$zahl;$i++){

...
fwrite...

}

dann macht er den spaß solange, bis er alle einträge geschrieben hat.
 
Zurück