
Итак как вы понимаете каптча должна прикручиваться к какой либо форме, чтобы её и защищать, для этого мы будем использовать обычную форму с тремя полями:
Итак давайте сделаем первую страницу на которой у нас будет размещена сама форма он у нас будет называться index.php, а вот собственно и код:
<?php
session_start();
Запускаем сессии (важно, если вы будете вставлять код в другую страницу эта строчка должна быть первой иначе будет ошибка)
if($_SESSION['uid'] =='') {$_SESSION['uid'] = substr(mt_rand(10000,99999), 0, 6); }
Генерируем ключ, далее передаем его в скрытом поле
echo '<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>Обратная связь</title>
<style>
form { font-family:Verdana, Arial, Helvetica, sans-serif;
font-size:12px; font-weight:600;
color:#747474;
}
</style>
</head>
<body>
Здесь у нас стандартная шапка с кодировкой, заголовком ну и стиль… сложного ни чего нет.
<div style="width:300px; height:330px" align="center">
<form action="cont.php" method="POST">
Ваше имя<br/>
<input name="name" size="30" type="text" /><br/>
Ваш e-mail<br/>
<input name="email" size="30" type="text" /><br/>
Сообщение<br/>
<textarea name="messages" cols="23" rows="5"></textarea>
<br/>Введите код подтверждения:<br />
<img src="img/image.php" alt="" width="120" height="33" border="0" /><br/> <input style="margin:5px;font-size:30px; font-color:blue; height:34px;width:120px;" type="text" name="sid" value="" size="6" maxlength="6"/>
<br/>
<input name="do" value="Отправить" type="submit"/>
Здесь у нас сама форма, файл обработчик для этой формы cont.php, в нем находится сама функция mail() т.е. отправка почты, далее мы имеем 3 заполняемых поля размера 30 (size="30"), и соответственно 3 переменных которые мы будем передавать, а именно name, email, messages. Ну а ниже мы имеем саму катпчу которая собственно вставляется как картинка, но вместо файла картинки мы указываем php с кодом самой каптчи. Ну и последнее сама кнопка отправки…
Едем дальше:
</form>
</div>
</body>
</html>';
?>
Ну а здесь как вы поняли, мы все закрываем и наша страница готова. Все теперь нам пора сделать файл с самой каптчей, для этого создадим папку с названием img в которой у нас будут находится шрифт, подложки, ну и сам файл с кодом каптчи. Подложки и шрифт вы найдете в архиве с уроком. Итак файл каптчи будет называться image.php и вот собственно код:
<?php
session_start();
Опять таки запускаем сессию
$im=ImageCreateFromJpeg(round(mt_rand(1,5)).".jpg");
Создаем изображение из 5 возможных подложек формата jpg
$color=ImageColorAllocate($im,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
Теперь мы генерируем цвет цифр которые будут у нас на картинке
ImageTtfText($im, 23, mt_rand(-5,5), 3, 30, $color, "addict.ttf", $_SESSION['uid']);
Теперь с помощью функции ImageTtfText() очень интересная функция о которой я расскажу поподробнее и так первое это у нас файл подложки $im, далее идет размер в нашем случае 23, теперь мы выставляем углы наклона у нас это от 5 до -5 градусов, потом задаем отступы по х,у, далее цвет который у нас сгенерирован в переменной $color, едем дальше здесь мы подгружаем шрифт, который лежит в той же папке что и наша каптча, ну и на последок текст надписи который у нас был сгенерирован на главной странице.
Header("Content-type: image/jpeg");
Здесь мы указываем тип содержания
ImageJpeg($im);
Создаем и выводим изображение
ImageDestroy($im); ?>
Разрушаем изображение и закрываем код…
Вот собственно и все с файлом image.php закончили, осталось нам привязать проверку каптчи к самой основной функции mail(), здесь собственно ни чего сложного достаточно добавить следующие строки в файл cont.php или тот файл в котором у вас находится функция mail():
if($_SESSION['uid'] == $_POST['sid']){
//Здесь будет находится сама функция и все то что будет у вас там есть в том числе всякие проверки…
}
else { echo '
Ошибка. Код подтверждения введен неверно
';Т.е. если описать это простыми словами эта функция сравнивает код сгенерированный в скрытом поле на главной странице с кодом, введенным в поле каптчи и если все верно то выполняется все что у вас там есть, другие проверки и т.д. ну и естественно самое главное это функция mail(). Ну а если не верно, то вылезает ошибка и сессия разрушается…
В общем это далеко не самая сложная каптча которую можно установить на своем сайте, но достаточно эффективная поэтому я её и привел и как мне кажется понять ее несложно.
Для тех кто совсем не хочет вникать или не может понять как все происходит можно тупо скопировать весь исходник который прилагается к уроку и просто скопировать содержимое страницы index.php без шапки, но обязательно с первыми строками где запускается сессия и генерируется код, вставить на страницы своего сайта, откорректировать cont.php изменив адрес почты на свой и пользоваться все будет прекрасно работать…
Надеюсь из этого урока вы поняли как установить каптчу на сайт и проблем у вас не возникло, ну а если что пишите буду рад помочь.
Дата публикации:2010-06-01
Буду очень признателен, если вы поделитесь ссылкой на страницу со своими друзьями в социальных сетях.
Если у вас возникнут вопросы по теме пишите, надеюсь у вас все получиться, удачи вам и всего наилучшего!