Yadgar: Problem mit Antispam-Abfrage

Beitrag lesen

High!

Ich bin dabei, für meinen Website (www.khyberspace.de) nach zehn Jahren endlich mal ein Gästebuch zu programmieren... und würde dort gerne einen solchen "mathematischen" Spamschutz einbauen, wie ihn z. B. auch www.final-frontier.ch verwendet - eine einfache zufallsgenerierte Rechenaufgabe, die vom Benutzer gelöst werden muss, bevor er seinen Gästebucheintrag abschicken kann.

Offensichtlich kann sich PHP aber keine Variablenwerte aus dem vorherigen Aufruf einer Seite (die Formularseite sendet die eingegebenen Daten an sich selbst, siehe beigefügten Code) merken, so dass mit jedem neuen Aufruf (und folglich neu generierter Rechenaufgabe) das alte Ergebnis auf jeden Fall falsch ist... da bleibt wohl nur der Umweg über eine externe Textdatei, in die jedes Mal das Ergebnis für den ersten Aufruf der Seite hineingeschrieben wird... oder täusche ich mich da?

Hier ist der Code:

  
    <form method="post" action="gaestebuch.php">  
      <b>Name*</b><br>  
      <input type="text" name="user"><br>  
      <b>E-Mail*</b> (wird nicht veröffentlicht)<br>  
      <input type="text" name="email"><br>  
      <b>Eigene Webpage</b><br>  
      <input type="text" name="url"><br>  
      <b>Dein Eintrag ins Gästebuch:</b><br>  
      <textarea rows="20" cols="80" wrap="physical" name="eintrag">  
	Bitte hier Text eingeben!  
      </textarea>  
      <br><br>  
      <b>Spamschutz - bitte Ergebnis eingeben:</b>  
      <?php  
	srand((double)time());  
	$zahl1 = rand(1, 100);  
	$zahl2 = rand(1, 100);  
	static $z1;  
        static $z2;  
        $z1 = $zahl1;  
        $z2 = $zahl2;  
	echo $zahl1." + ".$zahl2." = ";  
	if (isset($_POST['antispam']))  
	{  
	  if ($_POST['antispam'] != $z1+$z2)  
	    echo $_POST['antispam']." Falsches Ergebnis!";  
	  else  
	  {  
	    echo "Dein Text wird in Kürze im Gästebuch erscheinen!";  
	    $date=getdate(time());  
	    $betreff = "Gästebuch-Eintrag von".$_POST['user']."(".$_POST['email'].") vom ".$date['mday'].".".$date['mon'].".".$date['year']." um ".$date['hours'].":".$date['minutes']." Uhr";  
	    $text = $_POST['eintrag'];  
	    mail("yazdegird@gmx.de",$betreff,$text);  
	  }  
	}  
      ?>  
      <input type="text" name="antispam"><br>  
      <input type="submit" value="Daten abschicken">  
    </form>  

Bis bald im Khyberspace!

Yadgar