Валидиращ код против ботове
Публикувана от smilev на January 12 2011 07:25:11

Разширена новина
За урока ще ни трябва една картинка
bg.png:
[img]http://lesson2me.com/images/news/bg.png[/img]

,която ще ползваме за background на кода.
После ни трябва , файлът който генерира кода:
img.php
[code]
<?php
$dyl="5"; //дължина на кода
function randStr($length) {
$key = "";
$pattern = "1234567890abcdefghijklmnopqrstuvwxyz";
for($i=0;$i<$length;$i++) {
$key .= $pattern{rand(0,35)};
}
return $key;
} //взимаме произволен текст

//графична проверка за код
header("Content-type: image/png");
$bg = "bg.png"; //картинката за BG
$im = @ImageCreateFrompng($bg);

$text = randStr($dyl); //взимаме произволния текст
setcookie("imgcodepage",$text,time()+3600,"/"); //правим бисквитки с този текст

$text_color = imagecolorallocate($im, 0, 0, 0);//цвета на текста

imagestring($im, 50, 1, 1,$text, $text_color); //генерираме картинката
imagepng($im);
imagedestroy($im);

?>  
[/code]

И така.С този код се генерира картинка и за да проверим кода дали е верен задаваме бисквитки с кода.
Следващият файл е файлът за проверка, примерно test.php:

[code]
<?PHP
if (!$_POST['test']) {
?>
<table>
<form method="POST">
<tr><td>Текста*:</td><td><input type="text" name="text"></td></tr>
<tr><td>Код*:</td><td><input type="text" name="kod"></td><td><img src="img.php"></td></tr>
<tr><td><input name="test" type="submit" value="Тествай"> </td></tr>
</form>
</table>
<?php
}else{
$kod = htmlspecialchars($_POST[kod]);//взимаме текста
$text= htmlspecialchars($_POST[text]);//от полетата
if($kod!=$_COOKIE[imgcodepage]){echo"Не сте въвели правилно кода!";}else{ //проверка за кода
if($text==NULL|$kod=NULL) { //проверка дали всички полета са попълнени
echo"Моля попълнете всичките полета!";} else {
echo "Успешно, кода работи :P";
}
}
}
?>  
[/code]