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

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

Реклама

Создаем простую капчу для защиты формы обратной связи

Рейтинг:
Дата: 16 мая 2011 Просмотры 92035 Комментарии 47

Давным давно я уже писал, как создать самую примитивную капчу, для защиты формы обратной связи. Сегодня я решил немного переписать эту капчу.

Онлайн конструктор форм

Основные изменения касаются процесса передачи секретного кода для проверки пользовательского ввода. В прошлой статье, секретный код передавался в скрытом поле вместе с формой, что существенно снижало эффективность защиты от СПАМА, так как этот код можно было без проблем распарсить и вытащить.

Оптимальным вариантом передачи секретного кода являются сессии. Итак, как и в прошлой статье нам понадобятся 10 изображений с цифрами от 0 до 9, которые будут иметь названия аналогичные своим изображенным цифрам. Скачать архив с картинками можно здесь.

Теперь давайте создадим файл с названием captcha.class.php, который будет содержать класс Captcha для работы с капчей:

	<?php

Class Captcha{

    public $imgDir = 'images/'; // директория где хранятся изображения

    public $length = '5'; // количество цифр в капче

    public function __construct(){


    }

}

?>

Данный класс будет иметь 3 метода:

  •  __construct() - конструктор (вызывается при инициализации класса)
  • 2. draw() - будет выводить изображение на экран
  • 3. getKeyString() - возвращает секретный код

Итак, в __construct() нам необходимо сгенерировать секретный код и записать его в виде массива в переменную $this->keystring

	public function __construct(){

    $this->keystring=array();

    for($i=0;$i < $this->length;$i++){
         $this->keystring[] .= mt_rand(0,9);
    }

}

Теперь чтобы вывести изображения на экран, необходимо пройтись по этому массиву и сгенерировать html-код картинок:

	public function draw(){
    $img = '';
    foreach($this->keystring as $keystring){
        $img .= '<img src="'.$this->imgDir.$keystring.'.gif" border="0">';
    }

    return $img;
}

Ну и для того чтобы получить этот секретный код используем метод getKeyString(), который записывает в одну строку сгенерированный массив

	public function getKeyString(){
    return implode($this->keystring);
}

Теперь чтобы воспользоваться этим классом и защитить Вашу форму обратной связи, необходимо создать еще один файлик и назвать его captcha.php. Он будет иметь следующий код:

	require "captcha.class.php"; //Подключаем класс капчи
//Инициализируем капчу
$captcha = new Captcha();

$_SESSION['keystring'] = $captcha->getKeyString();

echo $captcha->draw();

Первым делом запускаем сессию, инициализируем капчу. Затем записываем в сессию значение keystring, которое будет содержать секретный код и выводим изображения на экран.

Теперь в нужном Вам месте, где Вы хотите видеть капчу необходимо просто подключить файл  captcha.php и запустить сессию. Делается это так:

	<?php session_start();?>

<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 require 'captcha.php';?>   

<input name="pr" style=" margin-bottom:11px" type="text" size="6" maxlength="5"></p>

<p><input type="submit" class="bt1" value="Отправить сообщение"></p>

</form>

Чтобы проверить правильность ввода капчи, необходимо в обработчике сделать следующую проверку:

	if (isset($_POST['pr']) && $_POST['pr'] == $_SESSION['keystring']){
    Проверка прошла успешно
}
else{
    Вывод сообщения об ошибке.
}

Скачать исходники можно здесь

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

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



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

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

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

Простая CRM

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

Система Orphus
https://biznesguide.ru/coding/133.html
3,64 из 5 на основе 59 оценок.