Xwab
Форумыnavigate_nextПрограммирование на PHP

Капча(Вопрос)
Сообщения
megazlo

Sedoy, не обязательна это просто защита от ботов

26 Июн 2010, 10:26
Assassin

Сделай отдельный файл с капчей(картинкой) там стартуй сессию на страницы где проверяешь тоже старуй ссесия
session_start()
выводи изображение с этой сессией. И проверяй.

26 Июн 2010, 10:38
Sedoy

megazlo, спасибо,значит лучше с капчей?

26 Июн 2010, 10:45
Dezer


<?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);
?>

Вот дегкий набросок на картинку...

26 Июн 2010, 11:17
Assassin

Вот капча. Создай фоновы рисунок в корне белым цветом.
И создай отдельный файл и пропиши так:
<?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>";

26 Июн 2010, 11:44
Fashion

помоему session_unregister уже несуществует в последней версии php.

// поясни пожалуйста, что делает этот код
if (htmlspecialchars($_SESSION['pswd']!=$chislo))

26 Июн 2010, 12:04
suhonok

Assassin, ацкий фильтратор

26 Июн 2010, 12:11
Assassin

Fashion, проверяет правильность заполнения капчи.
Если цыфры не совпадаю то переадресует на ошибку.
Да зыбыл написать
$chislo = htmlspecialchars($_POST['chislo']);

26 Июн 2010, 12:38
Assassin

Fashion, существует

26 Июн 2010, 12:39
Assassin

suhonok, да...ты бы видал, я все фильтрую на всякий случай.

26 Июн 2010, 12:40
Ответить на тему