Sönke Tesch: Shoutbox/Gästebuch: Einträge doppelt erstellt

Beitrag lesen

Bis jetzt hat auch alles gut geklappt, doch wenn ich jetzt einen Eintrag abschicke, wird er 2x erstellt. Einmal mit Inhalt und einmal ohne....

$benutzer=$HTTP_POST_VARS['Name'];
$kommentar=$HTTP_POST_VARS['Kommentar'];
$titel=$HTTP_POST_VARS['Titel'];

Alle diese Daten werden von Deiner PHP-Version mit Rückstrichen versehen, sobald da ein Anführungszeichen auftaucht. Das sieht nicht so sonderlich hübsch aus, also schalte entweder diese PHP-Option ab (magic_quotes, siehe Anleitung) oder benutze

$benutzer=stripslashes($HTTP_POST_VARS['Name']);

$datum=date(d);
$datum.=$punkt;
$datum.=date(m);
$datum.=$punkt;
$datum.=date(Y);

Das ist a) unnötig kompliziert (zuviele date()-Aufrufe) und b) falsch (Texte gehören in Anführungszeichen).

$datum=date("d.m.Y");

$zeit=date(G);
$zeit.=$dpunkt;
$zeit.=date(i);
$zeit.=$dpunkt;
$zeit.=date(s);

Siehe oben.

$eintrag="<!-- Beginn -->";
$eintrag.="\n<br><div class='eintrag'>";
$eintrag.=$benutzer;

Man kann Dir jeglichen HTML-, CSS- und Javascript-Code unterjubeln. Ich weiß zwar noch nicht, warum mein <style>-Block teilweise umgangen wird, aber benutze trotzdem besser htmlentities().

$eintrag.=" folgendes Kommentar: ";

Folgende_n_ Kommentar.

$eintrag.=$kommentar;

Man kann Dir jeglichen HTML-, CSS- und Javascript-Code unterjubeln. Benutze htmlentities().

$bol=file_exists('shoutbox.html');
if($bol)

Geht auch einfacher:

if (file_exists("shoutbox.html"))

{
   $datei=fopen("shoutbox.html","r");
   if($datei)

Kann man auch einfacher machen:

if ($datei = fopen("shoutbox.html","r")

[lesen], dann..

$datei=fopen("shoutbox.html","w");

$output=fwrite($datei,$ersetzen);

Warum machst Du die Datei nochmal auf? Benutze fseek() und einen entsprechenden Modus bei fopen().

Zum zweiten ist es nicht unbedingt glücklich, den Quelltext einer HTML-Seite an einer markierten Stelle per Skript zu ändern. Benutze vielleicht besser doch nur ein einziges PHP-Skript, das die Einträge aus einer gesonderten, absturzsicher aufgebauten Datei liest und darstellt.

Weiß jemand, wie ich das Doppelposting-Phänomen beheben kann?

Am Code scheint es nicht zu liegen. Die Verzögerung zwischen beiden Einträgen könnte darauf hindeuten, daß das Formular aus irgendeinem Grund zweimal beim Server eintrudelt, eventuell wegen der Werbung, die einen eigenen Rahmen aufmacht.

Gruß,
  soenk.e