|
|
|
| Я недавно начал интересоваться PHP кодами. Скачал на этом сайте PHP скрипт, разработанный Афанасьевым Артёмом, который генерирует изображение для защиты от роботов (captcha), вставил его в код обратной связи корпоративного сайта, а как связать отправку письма с этим кодом не догоняю. Кто нибудь, образумьте. please. | |
|
|
|
|
|
|
|
для: kminas
(05.08.2009 в 16:22)
| | Каптча никак не связана с отправкой письма и прочего, ее единственная задача, это показать код пользователю. Пользователь должен ввести код с каптчи в поле, а вы его по получению сравниваете с кодом записанным в сессию, и если они совпали, занчит можно отправлять письмо, как или производить другие действия, которые вы хотите защитить от робота. | |
|
|
|
|
|
|
|
для: sim5
(05.08.2009 в 16:31)
| | Я догадываюсь, что капча не отправляет писем, но с ее помощью можно запретить отсылку СПАМа. Но где это прочитать не знаю. | |
|
|
|
|
|
|
|
для: kminas
(05.08.2009 в 16:49)
| | выложите сюда ваш код обратной связи | |
|
|
|
|
|
|
|
для: kminas
(05.08.2009 в 16:22)
| | Все очень просто. Вот файл, который генерит каптчу (назовем его, скажем, captcha.php):
<?php
// Ширина изображения
$width = 150;
// Высота изображения
$height = 50;
// Количество символов в коде
$sign = 5;
// Защитный код
$code = "";
// Инициируем сессию
session_start();
// Символы, используемые в коде
$letters = array('a','b','c','d','e','f',
'g','h','j','k','m','n',
'p','q','r','s','t','u',
'v','w','x','y','z','2',
'3','4','5','6','7','8','9');
// Компоненты для RGB-цвета
$figures = array('50','70','90','110',
'130','150','170','190','210');
// Создаем полотно
$img = imagecreatetruecolor($width, $height);
// Заливаем фон белым цветом
$fon = imagecolorallocate($img, 255, 255, 255);
imagefill($img, 0, 0, $fon);
// Заливаем фон точками
for($j=0; $j<$width; $j++)
{
for($i=0; $i<($height*$width)/1000; $i++)
{
// Формируем случайный цвет
$color = imagecolorallocatealpha(
$img,
$figures[rand(0,count($figures)-1)],
$figures[rand(0,count($figures)-1)],
$figures[rand(0,count($figures)-1)],
rand(10,30));
// Устанавливаем случайную точку
// случайного цвета
imagesetpixel($img,
rand(0,$width),
rand(0,$height),
$color);
}
}
// Накладываем защитный код
for($i=0; $i<$sign; $i++)
{
// Ориентир
$h = 1;
// Рисуем
$color = imagecolorallocatealpha(
$img,
$figures[rand(0,count($figures)-1)],
$figures[rand(0,count($figures)-1)],
$figures[rand(0,count($figures)-1)],
rand(10,30));
// Генерируем случайный символ
$letter = $letters[rand(0,sizeof($letters)-1)];
// Формируем координаты для вывода символа
if(empty($x)) $x = $width*0.08;
else $x = $x + ($width*0.8)/$sign+rand(0,$width*0.01);
if($h == rand(1,2)) $y = (($height*1)/4) + rand(0,$height*0.1);
else $y = (($height*1)/4) - rand(0,$height*0.1);
// Запоминаем символ в переменной $code
$code .= $letter;
// Изменяем регистр символа
if($h == rand(0,1)) $letter = strtoupper($letter);
// Выводим символ на изображение
imagestring($img, 6 ,$x, $y, $letter, $color);
}
// Помещаем защитный код в сессию
$_SESSION['mail_code'] = $code;
// Выводим изображение
header ("Content-type: image/jpeg");
imagejpeg($img);
?>
|
В форму помещаем картинку:
<input type=text name="mail_code">
<img src="captcha.php">
|
В обработчике формы пишем для проверки:
<?php
$mail_code = $_POST['mail_code'];//Получаем код, который ввел посетитель
if($mail_code == $_SESSION['mail_code']){
//Отправляем почту
}
else{
exit("Вы неправильно ввели код");
}
?>
|
| |
|
|
|
|
|
|
|
для: Commander
(05.08.2009 в 17:24)
| | Спасибо, все отлично получилось, только чересчур отлично, букв, практически не видно. Попытался увеличить размер или сделать чуть-чуть контрастнее, ничего не выходит, увы. А в довершение всего сообщение отправляется, когда ничего не набрано, а когда набран текст, даже правильно, пишет "Вы неправильно ввели код". | |
|
|
|
|