Как создать капчу, для защиты формы обратной связи?!
Эта статья устарела. Обновленную версию смотрите тут
В этой статье я расскажу, как защитить форму обратной связи от специализированных скриптов, которые в автоматическом режиме отправляют сообщения с формы обратной связи!
Самый распространенный способ – это проверить действительно ли за монитором находится человек, а не программа-робот. Если за монитором находится человек, то от него потребуется ввести символы, изображенные на картинке. Такой метод получил название – CAPTCHA
Именно созданием капчи, мы и будем заниматься, и выглядеть наша форма будет следующим образом:

Как видите, прежде чем нажать на кнопку "Отправить сообщение", пользователю необходимо ввести цифры изображенные на картинке.
Для реализации этого метода, Вам понадобится подготовить 10 изображений с цифрами от 0 до 9, которые бы имели названия аналогичные своим изображенным цифрам. Чтобы не заморачиваться можете воспользоваться моими. Скачать архив с изображениями можно здесь.
Теперь давайте посмотрим сам код страницы с формой. Выглядит он так:
<form action="send_test.php" method="post">
<p>Введите имя:<br>
<input type="text" name="name"></p>
<p>Введите email:<br>
<input type="text" name="email"></p>
<p>Введите сообщение:<br>
<textarea name="message" cols="40" rows="5" ></textarea>
</p>
<p>Введите числа с картинки: <br>
<?php
$i=1;
do
{
$num[$i] = mt_rand(0,9);
echo "<img src='img/".$num[$i].".gif' border='0' align='bottom' vspace='5px'>";
$i++;
}
while ($i<5);
$captcha = $num[1].$num[2].$num[3].$num[4];
?>
<input name="captcha" type="hidden" value="<?php echo $captcha ;?>">
<input name="pr" style=" margin-bottom:11px" type="text" size="6" maxlength="4"></p>
<p><input type="submit" class="bt1" value="Отправить сообщение"></p>
</form>
Для генерации случайных чисел, я использовал функцию mt_rand(), которая генерирует наилучшее случайное значение в диапазоне от 0 до 9.
Сгенерированное число (от 0 до 9) записывается в массив $num(), которое затем подставляется для вывода аналогичного изображения. Все это проделывается в цикле 4 раза, тем самым мы получаем 4 цифры.
Полученные цифры мы записываем в переменную $captcha, которая затем передается обработчику send.php, где она будет сравниваться с переменной $pr.
В переменную $pr заносится информация, которую ввел пользователь.
Следует заметить, что поле captcha – скрытое и оно не отображается в браузере:
<input name="captcha" type="hidden" value="<?php echo $captcha ;?>">
Как видите здесь нет ничего сложного.
Теперь перейдем к самому обработчику send.php, который мы уже создали в прошлой статье.
Как Вы помните, там осуществляется проверка на заполнение всех полей и правильность ввода email-адреса. Нам остается лишь добавить проверку на правильность ввода капчи!
Итак, обработчик send.php будет иметь следующий вид:
<?php
/* Проверяем существуют ли переменные, которые передала форма обратной связи.
Если не существуют, то мы их создаем.
Если форма передала пустые значения мы их удаляем */
if (isset($_POST['name'])) {$name = $_POST['name']; if ($name == '') {unset($name);}}
if (isset($_POST['email'])) {$email = $_POST['email']; if ($email == '') {unset($email);}}
if (isset($_POST['message'])) {$message = $_POST['message']; if ($message == '') {unset($message);}}
if (isset($_POST['pr'])){$pr = $_POST['pr']; if ($pr == '') {unset($pr);}}
if (isset($_POST['captcha'])){$captcha = $_POST['captcha'];}
/* Проверяем заполнены ли все поля */
if (isset($name) && isset($email) && isset($message) && isset($pr))
{
/* Убираем все лишние пробелы, а также преобразуем все теги HTML в символы*/
$name = htmlspecialchars(trim($name));
$email = htmlspecialchars(trim($email));
$message = htmlspecialchars(trim($message));
/* Проверяем правильность ввода email-адреса */
if(!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $email))
{
exit("<p>Неправильный формат e-mail адреса!</p>");
}
/* Проверяем правильность ввода капчи */
if ($captcha == $pr)
{
/* Формируем сообщение */
$address = "email@sait.ru"; //Здесь нужно вписать Ваш email
$sub = "Сообщение с моего нового сайта!!!";
$mes = "Автор назвался: $name \nОставил такой E-mail: $email \nСодержание письма: \n$message";
/* Отправка сообщения */
$verify = mail ($address,$sub,$mes,"Content-type:text/plain; charset = windows-1251\r\nFrom:$email");
if ($verify == 'true')
{
echo "Сообщение отправлено!";
}
else
{
echo "Сообщение не отправлено!";
}
}
else
{
echo "Вы не правильно ввели сумму чисел с картинки";
}
}
else
{
echo "Вы заполнили не все поля!";
}
?>
Ну вот собственно и все! Удачи!
Скачать исходники можно по этой ссылке
-
Комментарии (76)
- Сайт
Facebook
Подписка
Подпишитесь прямо сейчас на почтовую рассылку:
"Новичку Инфо-Бизнеса.
От Простого К Сложному"
и получайте каждую неделю на свой электронный адрес список новых статей, опубликованных на страницах этого проекта.

11543

