Сделай отдельный файл с капчей(картинкой) там стартуй сессию на страницы где проверяешь тоже старуй ссесия
session_start()
выводи изображение с этой сессией. И проверяй.
<?php
session_start();
$int[1] = mt_rand(1,9);
$int[2] = mt_rand(1,9);
$_SESSION['int'] = $int[1] + $int[2];
$image = imagecreatetruecolor(90, 20);
$white = imagecolorallocate($image, 255, 255, 255);
imagestring($image,5,1,1,$int[1].' + '.$int[2].' = ?',$white);
header('Content-Type: image/x-png');
header('Content-Disposition: inline; filename="Капча.png"');
imagepng($image);
?>
Вот дегкий набросок на картинку...
Вот капча. Создай фоновы рисунок в корне белым цветом.
И создай отдельный файл и пропиши так:
<?php
session_start();
$_SESSION['pswd']=rand(10000,99999);
list(, , $type,)=@getimagesize('im.jpg');
if($type==1) {$funci='imagecreatefromgif';} //$funco="imagegif";}
if($type==2) {$funci='imagecreatefromjpeg';} //$funco="imagejpeg";}
$im1 = @$funci('im.jpg');
$black = ImagecolorAllocate($im1,0,0,0);
ImageString($im1, 2, 1, -2, $_SESSION['pswd'], $black);
@header('Content-type: image/png');
@imagepng($im1);
?>
Потом где проверяешь так:
//проверка капчи
if (htmlspecialchars($_SESSION['pswd']!=$chislo))
{
header("Location: forma.php?err=nochislo");
@session_unregister('pswd');
exit;
}
Ну и выводи саму картинку в форие:
echo "<span style='color:red'>*</span> Проверочное число:<br/>";
echo "<img src='kcaptcha.php?".session_name()."=".session_id()."' alt=''/><br />";
echo "<input name=\"chislo\" value=\"\" type=\"text\" maxlength=\"5\"/>\n<br>";
помоему session_unregister уже несуществует в последней версии php.
// поясни пожалуйста, что делает этот код
if (htmlspecialchars($_SESSION['pswd']!=$chislo))
Fashion, проверяет правильность заполнения капчи.
Если цыфры не совпадаю то переадресует на ошибку.
Да зыбыл написать
$chislo = htmlspecialchars($_POST['chislo']); 