Генератор форм

Для веб-мастера

Реклама

Как создать капчу, для защиты формы обратной связи?!

Рейтинг:
Дата: 22 июня 2009 Просмотры 45116 Комментарии 82

Эта статья устарела. Обновленную версию смотрите тут

В этой статье я расскажу, как защитить форму обратной связи от специализированных скриптов, которые в автоматическом режиме отправляют сообщения с формы обратной связи!

Самый распространенный способ – это проверить действительно ли за монитором находится человек, а не программа-робот. Если за монитором находится человек, то от него потребуется ввести символы, изображенные на картинке. Такой метод получил название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 "Вы заполнили не все поля!";

}

?>

Ну вот собственно и все! Удачи!

Скачать исходники можно по этой ссылке

Оцените эту статью:



Похожие статьи
Интересно почитать

    Получать новые материалы этого сайта на свой email адрес?

    Отправлять мне комментарии по эл. почте?

Простая CRM

Нашли ошибку в тексте

Система Orphus
https://biznesguide.ru/coding/66.html
4,1 из 5 на основе 24 оценок.