Textdatei wiederholt sich der letzte Eintrag

markberg

Erfahrenes Mitglied
Hallo,

ich habe eine Textdatei erstellt in der mit einem Formular etwas eingegeben werden kann. Die Eingabe erscheint auch, aber jedesmal wenn man die Seite aktualisiert, wird der Eintrag neu eingeschrieben und ausgegeben, heisst 10 x "Aktualisieren" = 10 x erscheint der letzte Eintrag!? Wo habe ich da einen Fehler, finde diesen nicht. Vielen Dank vorab...

<?
$datei = "kommentar.txt";
if($post)
{
$fp = fopen($datei,"a+");
$newDate = date("d.m.Y");
$newTime = date("H.i");
$newBericht = str_replace("\r","<br>",$newBericht);
$newBericht = str_replace("\n","<br>",$newBericht);
$data = "$name|-|$kommentar|-|$newDate|-|$newTime|-|\n\r";
fputs($fp,$data);
}


if(file_exists($datei))
{
$inhalt = file($datei);
$anzahl = count($inhalt);
for($i = 0; $i < $anzahl; $i++)
{
$newinhalt = array_reverse($inhalt);
$eintrag = explode("|-|",$newinhalt[$i]);
$name = $eintrag[0];
$kommentar = $eintrag[1];
$datum = $eintrag[2];
$zeit = $eintrag[2];

echo"<table width=\"437\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n";
echo"<tr>\n";
echo"<td width=\"335\" valign=\"top\">$datum $zeit</td>\n";
echo"</tr>\n";
echo"<tr>\n";
echo"<td height=\"18\" colspan=\"2\" valign=\"top\"><p>$bericht</p>\n";
echo"</tr>\n";
echo"</table>\n";
}
}
else
{
echo"Es wurde keine Datei gefunden";
}

?>
 
Das Formular wird bei jedem Refresh nochmals gesendet.

Sende nach dem Eintragen einen header() zur selben Seite.... dann sind die Formulardaten weg, und es wird nichts mehr eingetragen.
 
oha, damit kenne ich mich ja noch gar nicht aus? kannst Du mir da noch 'n Tipp geben? Habe nur etwas über no-cache header gefunden?

header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") ." GMT");
header("Cache-Control: no-cache");
header("Pragma: no-cache");
header("Cache-Control: post-check=0, pre-check=0", FALSE);
 
Mit einem Location-header wird zur angegebenen Adresse weitergeleitet,
ca so:
Code:
 if($post)
{
$fp = fopen($datei,"a+");
$newDate = date("d.m.Y");
$newTime = date("H.i");
$newBericht = str_replace("\r","<br>",$newBericht);
$newBericht = str_replace("\n","<br>",$newBericht);
$data = "$name|-|$kommentar|-|$newDate|-|$newTime|-|\n\r";
fputs($fp,$data);
header('Location:'.$_SERVER['PHP_SELF']);exit();
}
 
sehr komisch.... Ich habe alle Varianten ausprobiert, nirgends steht ein zeichen davor auch kein Leerzeichen, funkt. nicht... Muss ich mir wohl eine andere Variante überlegen.
 
Hallo
markberg hat gesagt.:
Muss ich mir wohl eine andere Variante überlegen.
...ist dir schon was eingefallen?
Würde mich auch interessieren, wie man diese Mehrfacheinträge nach dem Aktualisieren verhindert. Gelingt mir auch nicht.
 
Bei mir ging das mit dem header() einwandfrei...
das exit(); am Ende müsst ihr nicht einbauen, vielleicht liegts daran...
 
Hi

Includest Du die Datei, die Dir dann den Header ausgeben soll?
Wenn dem so ist, könnte schon in dem bereits laufendem Script eine Ausgabe statt gefunden haben.

Sonst fällt mir auch nix ein :-/
Bei mir funktioniert das Header-zeugs eigendlich problemlos (wenn man alle Ausgaben vorher entfernt hat).

Stichwort Ausgaben entfernen:
Wenn Dein Script VOR dem Eintrag der Daten irgendwelche Ausgaben gemacht hat (z.B. ein Formulat angezeigt), geht das nicht mehr.
Wie sieht's aus, wenn Du Deinen Verarbeitungs-Script von dem Formular-Script abtrennst, und beim Klicken auf 'Senden' den Verarbeitungs-Script aufrufst?
Dieser kann ja dann nach dem Eintragen wieder Deinen Formular-Script aufrufen.

Oder, Du fragst beim Scriptstart ab, ob der SUBMIT (Absende) Button gedrückt wurde.
Dann könntest Du in einem IF-Zweig die Daten verarbeiten (KEINE Ausgabe !!), dann das Location ausgeben und den Script ohne Argumente aufrufen (dadurch gehen wir beim anschließendem Script-Start an der Eintragen-Routiene vorbei).

ungefähr so:
PHP:
<?PHP
if ($eintrag){
   //Hier die Daten ins File schreiben
   header('Location:'.$_SERVER['PHP_SELF']);
}

echo "
<form methode=post action=".$_SERVER['PHP_SELF'].">
<input type=hidden name=eintrag value=jo>
<input type=text size=10 name=eingabetext>
<input type=submit value='Abschicken'>
</form>
";
?>
Hoffe, es klappt so

Posti
 
Zurück