CAPTCHA Problem

Nepheus

Erfahrenes Mitglied
Hey,
habe ein Script von der Page Stoppt-den-Spam.info in meine Homepage eingebaut, klappt leider noch nicht ganz so wie es soll. Es handelt sich um ein CAPTCHA Code. Die Anzeige des Codes funktioniert einwandfrei, das Problem stellt sich bei dem Sichern der Daten. Das Formular prüft ob der eingegebene CAPTCHA Code mit dem vorgegebenen übereinstimmt und 'sollte' den Eintrag speichern. Obwohl ich den richtigen Code eintrage sichert er nichts.

Der Code:

captcha.php
PHP:
<?php
   //ERSTELLEN EINES SICHERHEITSCODES
   session_start();
   unset($_SESSION['captcha_spam']);
   $text = rand(1000,10000); //Zufallszahl

   function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
   }

   $_SESSION['captcha_spam'] = encrypt($text, "8h384ls94"); //Key
   $_SESSION['captcha_spam'] = str_replace("=", "", $_SESSION['captcha_spam']);

        
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 0, 0, 0); //Farbe
   $ttf = "fontf"; //Schriftart
   $ttfsize = 25; //Schriftgrösse
   $angle = rand(0,5);
   $t_x = rand(5,50);
   $t_y = 35;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img);
?>

Im Formular
1. Eingabefeld
2. Abfrage ob falsche Eingabe
3. Ausgabe des Codes
PHP:
//1.
<input type="text" name="captcha" maxlength="4">

//2.
if(session_is_registered("captcha")){
 echo "<br><font color='#9B3C3C'><b>Sicherheitscode inkorrekt eingegeben!</b></font>";
 session_unregister("captcha");
}

//3.
<img src="captcha.php" border="0" title="sicherheitscode">

Überprüfung ob der vorgegebene mit dem eingetragenen Code übereinstimmt
PHP:
//if($_GET['action']=="save")
// {
  function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
  }
  $sicherheits_eingabe = encrypt($_POST['captcha'], "8h384ls94");
  $sicherheits_eingabe = str_replace("=", "", $sicherheits_eingabe);
  if($sicherheits_eingabe == $_SESSION['captcha_spam']){
    
    unset($_SESSION['captcha_spam']); 
    
    //speichern der daten
	
  }else{
   session_register("captcha");
  }
//  }

Es geht nur um die markierten Zeilen die ersten und letzten sind teil des Gästebuchscripts. Wie gesagt trotz korrekter Eingabe wird der Eintrag nicht gespeichert. Kann mir da evtl. jemand weiterhelfen? =/

Link: http://www.fahrrad-warscheid.de/html/gb.php


Greetz

Zusatzinfo:

Ich nehme an es liegt an der Session. Eigentlich müsste ja die session captcha registiert werden falls kein Eintrag vorgenommen wird, anders gesagt im Falle einer inkorrekten Eingabe des Codes. Sie wird aber nicht registiert...
 
Da du mit $_GET arbeitest nehme ich an, dass register_globals deaktiviert ist (was auch richtig ist), daher funktioniert [phpf]session_register[/phpf] nicht.
Stattdessen solltest du mit $_SESSION arbeiten.

PHP:
$_SESSION['captcha'] = true;
 
Problem leider nicht behoben =/

gleiche Fehler wie bisher...

habe else schleife erweitert:
PHP:
}else{
 $_SESSION['captcha'] = true;
 echo "<meta http-equiv='refresh' content='0; URL=?action=neu'>";
}

ohne Erfolg er leitet nicht weiter, das heißt er geht nicht in die else schleife. Müsste er aber oder nicht?!
 
Zuletzt bearbeitet:
Problem gelöst.

Habe die "Save" Funktion in eine neue Datei gepackt. Der Fehler war wohl was mit session. Da in der neuen Datei die session nochmal gestartet wurde wurde das problem wohl von selbst behoben, naja weiß auch nich genau trotzdem thx an euch =)
 

Neue Beiträge

Zurück