Nach fwrite ist die Datei leer

JSchreiber

Grünschnabel
Hallo Leute,

ist sicherlich kein großes Problem für Euch - aber ich bin blutiger Anfänger und habe trotz der Suche im Forum und eigenem versuchen einfach nicht das hinbekommen was ich möchte.

Also:
Ich habe einen News-Bereich angelegt, in den ich immer neue Newsmeldungen eintragen kann und die in einer Datei "news.txt" gespeichert werden. Eine Meldung besteht immer aus 3 Zeilen.

Jetzt möchte ich aber, daß ich zb. die 3. Newsmeldung löschen kann (also die 7-9 Zeile in meiner Textdatei).

Mit meinem nachfolgenden Skript wird aber irgendwie immer die ganze "news.txt" datei gelöscht - nicht nur diese 3 Zeilen.

Könnt Ihr mir erklären was ich falsch mache ?!

PHP:
<?php
       // Abfrage der zu loeschenden News-Meldung
       echo"";
       echo"<form action='news.php' method='post'>";
       echo"<b>Welche Meldung soll gel&ouml;scht werden ?</b><br>";
       echo"<input type='text' name='nummer' style='border-style: solid; border-width: 1; 
            padding-left: 4; padding-right: 4; padding-top: 1; padding-bottom: 1'><br><br>";
       echo"<input type='submit' value='l&ouml;schen' style='border-style: solid; 
            border-width: 1; padding-left: 4; padding-right: 4; padding-top: 1; 
            padding-bottom: 1; font-size: 10pt'>";
       echo"</form>";
       // Plausibilitaetskontrolle ob News-Melung ueberhaupt vorhanden
       if (($nummer>=1) & ($nummer<=$meldungsnummer))
            {
             #Zu loeschende Zeilen berechnen
             $temp01=(($nummer-1)*3);
             $temp02=$temp01+1;
             $temp03=$temp02+1;
             // Datei auslesen und in Array speichern
             $inhalt = file('news.txt');   
             // Testausgabe, ob auch die richtigen Array-Stellen berechnet wurden
             echo "zeile $temp01 - $inhalt[$temp01] wird gel&ouml;scht<br>";
             echo "zeile $temp02 - $inhalt[$temp02] wird gel&ouml;scht<br>";
             echo "zeile $temp03 - $inhalt[$temp03] wird gel&ouml;scht<br>";             
             // Loeschen der Array-Inhalte an den jeweiligen Zeilen
             unset($inhalt[$temp01]);  
             unset($inhalt[$temp02]);   
             unset($inhalt[$temp03]);     
             // Testausgabe ob die Array-Inhalte geloescht wurden
             echo "zeile $temp01 - $inhalt[$temp01]<br>";
             echo "zeile $temp02 - $inhalt[$temp02]<br>";
             echo "zeile $temp03 - $inhalt[$temp03]<br>"; 
             // Textdatei zum Überschreiben öffnen und schreiben
             $fp = fopen('news.txt','w'); 
             fwrite($fp,$inhalt);
             fclose($fp); 
             $nummer=0;
            }
       else
            {
              echo "L&ouml;schvorgang abgebrochen ! Meldungsnummer nicht vorhandn !";
            }
?>
 
wenn du hier nachliest, weisst du das du beim Anhängen an eine Datei diese mit 'a' statt 'w' öffnen (fopen) musst, da sie beim öffnen mit 'w' angelegt wenn nicht vorhanden oder überschrieben wird, wenn vorhanden da hier der Dateizeiger an den Anfang gesetzt wird.

Daher:

PHP:
$fp = fopen('news.txt','a');
 
Ich probier das gleich mal aus .. aber eigentlich hatte ich mir das so überlegt, daß er am anfang die datei in einen array liest ...

.. dann die zu löschenden zeilen entfernt (mit unset) ...

und dann die datei wieder mit den restlichen inhalten des arrays füllt ...

.. also durchaus den ganzen inhalt der alten datei mit den neuen daten überschreibt ... (also vom anfang der datei an)

... dummerweise das mal garnet so wie ich das gedacht hatte ...

:rolleyes:
 
Naja doch

mit $content = file('dateiname');

in ein Array einlsen. Jede zeile ist dann ein Element des Arrays.
Mit unset($content[5]) z.b. würdest du die 6. Zeile löschen.
Danach mit fopen('date', 'w') öffnen und mit fwrite($fh, implode('\n', $content));
schreiben.
 
VIELEN DANK FÜR DIE SCHNELLE HILFE

Tatsächlich hat das jetzt so geklappt ... und ich hab seit gestern
verzweifelt versucht das hinzubekommen :p

Vielen Dank

Tolles Forum ... Tolle User ! :)
 
Zurück