sangreal: Formular Daten in Textdatei speichern

Hi,

ich bin grad an einem Newsscript am arbeiten und möchte keine MySQL Datenbank verwenden, da ich mich damit nicht auskenne.
Deshalb hab ich mir ein Script gemacht in dem ich alle Daten in einer Textdatei abspeichern will.
Das klappt eigentlich weitesgehend auch, aber sobald ich mehrere Einträge mache, werden immer wieder Teile oder auch ganze ältere Einträge überschrieben.
Deshalb habe ich versucht die alten Einträge aus der Datei erst nochmal auszulesen und dann erneut anzuhängen.

Hier das Script:

$me=10;
$fn="news.txt";

if (file_exists($fn))
     {
       $fp=fopen($fn,"r");
       $dat=fread($fp,filesize($fn));
       fclose($fp);

$line=explode("\n",$dat);
       $anz=count($line)-1;
      }

if ($me>$anz) { $me=$anz; }

if ($action=="Absenden")
    $selected = $_POST('Kategorie');
 $selected = $_POST['Grafik'];
 $text=str_replace("\n","",$text);
    $entry="$Titel|$Datum|$Text|$Grafik-URL";

$fp=fopen($fn,"w");
    $res1=fwrite($fp,"$entry\n");
    if ($anz>0) { for($j=0;$j<$me;$j++) {
    fwrite($fp,"$line[$j]\n"); } }
    fclose($fp);

Ich hatte es vorher schon ausprobiert, bei fopen "r+" zu benutzen, da dort ja am Anfang der neue Inhalt angefügt wird, aber dort hatte ich das gleich Problem. Außerdem habe ich der Textdatei sicherheitshalber CHMOD 777 gegeben. Doch das Problem war noch immer da.

Habt ihr eine Idee wo das Problem liegt?

  1. Hallo

    if (file_exists($fn))

    diese Abfrage ist irrelevant, da bei nichtexistens die Datei angelegt wird

    {
           $fp=fopen($fn,"r");
           $dat=fread($fp,filesize($fn));
           fclose($fp);

    $line=explode("\n",$dat);
           $anz=count($line)-1;
          }

    if ($me>$anz) { $me=$anz; }

    if ($action=="Absenden")
        $selected = $_POST('Kategorie');

    PASE ERROR => $_POST['Kategorie'];

    $selected = $_POST['Grafik'];

    hier wird dein gerade durch $_POST['Kategorie'] gesetzter Wert schlichtweg durch $_POST['Grafik'] überschrieben

    $text=str_replace("\n","",$text);
        $entry="$Titel|$Datum|$Text|$Grafik-URL";

    $fp=fopen($fn,"w");
        $res1=fwrite($fp,"$entry\n");
        if ($anz>0) {

    Diese abfrage ist irrelevant, sie wird von for() genauso durchgeführt
          for($j=0;$j<$me;$j++) {

    fwrite($fp,"$line[$j]\n"); } }
        fclose($fp);

    Ich hatte es vorher schon ausprobiert, bei fopen "r+" zu benutzen, da dort ja am Anfang der neue Inhalt angefügt wird, aber dort hatte ich das gleich Problem. Außerdem habe ich der Textdatei sicherheitshalber CHMOD 777 gegeben. Doch das Problem war noch immer da.

    Übrigens Dein Script sollte ohne auslesen des Inhalts mit fopen($fp,'a'); soweit zurechtkommen.
    Im wesentlichen berücksichtigt Dein Script nicht das Auftreten konkurierenden Schreibzugriffe. Beschäftige Dich micht dem Einsatz von flock() oder aber mit Semaphoren.

    Gruß aus Berlin!
    eddi