ich hab grad ein kleines Problem, dass ich vor längerer Zeit schonmal hatte, dort den Fehler auch selbst schnell gefunden habe, ich ihn aber jetzt nicht mehr finde und daher bräuchte ich nun mal ein paar Augen mehr.
Es geht um eine Captcha Funktion die aus einem Array von Hintergrundbildern und einem Zufallsstring aus 5 Zeichen ein PNG Bild generiert und den Zufallsstring gleichzeitig in der SESSION speichert, um später kontrollieren zu können ob der Benutzer auch das richtige eingetippt hat.
Mein Problem dabei ist nun, dass der Inhalt in der SESSION ein Seitenaufruf zu spät gesetzt wird. D.h. wenn man auf die Seite geht hat man in der SESSION noch keine Einträge, obwohl das Bild generiert wurde und "Text" drin steht. Aktuallisiert man die Seite, steht in der SESSION der "Text" des davor generierten Bildes drin, im Bild selber steht aber ein anderer "Text" usw.
<?php session_start(); header('Content-type: image/png'); unset($_SESSION['captcha_spam']); function randomString($len) { function make_seed(){ list($usec , $sec) = explode (' ', microtime()); return (float) $sec + ((float) $usec * 100000); } srand(make_seed()); // Der String $possible enthält alle Zeichen, die verwendet werden sollen $possible = 'ABCDEFGHJKLMNPRSTUVWXYZabcdefghijkmnpqrstuvwxyz23456789'; $str = ''; while(strlen($str)<$len) { $str.=substr($possible,(rand()%(strlen($possible))),1); } return($str); } function get_captcha_imgs () { $ar = array(); $o = opendir('../captcha/pics/'); while ($f = readdir($o) ) { if ( $f != '.' AND $f != '..' ) { $ar[] = '../captcha/pics/'.$f; } } closedir($o); return ($ar); } $text = randomString(5); // Die Zahl bestimmt die Anzahl stellen $_SESSION['captcha_spam'] = $text; $picarray = get_captcha_imgs(); $count = count($picarray); $key = rand(1, $count-1); $ex = explode(".",$picarray[$key]); $img = ImageCreateFromPNG($picarray[$key]); // Backgroundimage $color = ImageColorAllocate($img, 255, 255, 255); // Farbe $ttf = '../captcha/XFILES.TTF'; // Schriftart $ttfsize = 25; // Schriftgrösse $angle = rand(0,5); $t_x = rand(5,30); $t_y = 35; imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $_SESSION['captcha_spam']); imagepng($img); imagedestroy($img); ?>
Danke schonmal für eure Mühe und Mithilfe!
Gruß
Sonic