Давайте немного вспомним. что мы сделали в первой публикации на тему создание формы обратной связи на сайте, с проверкой и защитой от спама. И так мы создали код формы из 5 полей и одного скрытого поля, написали обработчик, для проверки правильности заполнения полей, имени, темы, email. Проверили на корректность заполнение поля email. Создали 3 файла php. И как я и обещал в следующей публикации создадим капчу, защитный код, от спам ботов.
Зачем нужна защита от спам ботов - капча? Если вы не хотите получать на свой email ежедневно тысячи бессмысленных писем, с кучей никому ненужных ссылок, а то даже и вирусов, то тогда спасает защитный код, который не даст, боту пройти, далее и отправить сообщение вам. На проверочном коде, если он конечно не от рекапчи, которую уже давно взломали и копируют боты их код и проходят. Это просто было главно знать.
Создаем капчу защитный код
Для создания такого скрипта, создавать велосипед не будим, а возьмем готовое решение, которое я прикладываю в исходниках, и просто подключаем, сейчас покажу как. В исходниках все файлы проверки лежат в папке kcaptcha. Можно ее просто скопировать на сайт, а потом просто прописать путь и все. Для примера я просто копирую в корневой каталог папку kcaptcha, в которой и будет генерироваться весь наш код защиты. Далее встроим в форму, вывод проверочного кода вот так;
Код HTML
<form action="./" method="post" id="mail_form">
<input name="test" value="1" type="hidden">
<fieldset>
<label for="name"><b>Ваше имя:</b></label>
<input class="text" size="25" name="name" id="name" type="text">
<label for="email"><b>Ваш E-mail адрес:</b></label>
<input class="text" size="25" name="email" id="email" type="text">
<label for="message"><b>Тема сообщения:</b></label>
<input class="text" size="25" name="message" id="message" type="text">
<label for="text"><b>Сообщение:</b></label>
<textarea cols="50" rows="20" name="text" id="text"></textarea>
// После поля текста вставляем следующий код
<label for="сaptcha"><center><b>Текст на изображении (цифры)</b>:<a href="readme.html"><img src="kcaptcha?<?php echo session_name()?>=<?php echo session_id()?>" border="0"></a></center>
// Перед полем ввода проверочного кода
<input class="text" size="25" name="key" id="key" type="text">
<br><br>
<label><input class="submit" name="submit" id="submit" value=" Отправить " type="submit"></label>
</label></fieldset>
</form>
Далее давайте перед формой добавим поля для вывода ошибок, либо успешного отправления. Вот таким образом;
Код HTML
<p id="emailSuccess">
<strong style="color:green;"><!--?php echo "$statusSuccess" ?--></strong>
</p>
<p id="emailError"><strong style="color:red;"><!--?php echo "$error" ?--></strong></p>
При проверке скрипт выведет в соответствующие поля, строки сообщение. Переходим к обработчику, проверке введенных символов с картинки.
Код PHP
// После
// Когда пользователь нажал кнопку отправить
if ($_POST['test']== "1")
{
// Вставляем
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['key'])
{
Далее подключаем скрипт капчи из папки и подключаем сессию, потому, что передавать данные из проверочного кода на проверку будим сессией. Делаеться таким образом, в самом верху добавляем:
Код PHP
include('kcaptcha/kcaptcha.php');
session_start();
require_once("config.php");
//Перед
require_once("error.php");
//После
// Здесь проверим капчу далее
// Вставим
$statusError = "$captcha_error";
unset($_SESSION['captcha_keystring']);
В файле error.php
Код PHP
// В самом конце добавим
$captcha_error = 'Проверьте правильность ввода защитного кода';
$send = 'Ваше сообщение успешно отправлено';
На этом наши созданные 3 файла, мы больше не трогаем, переходим к настройке самого скрипта. Открываем папку captcha находим файл config_captcha.php и настраиваем его следующим образом
Код PHP
$allowed_symbols = "23456789"; #Выбираем символы которые будут показаны на картинке (o=0, 1=l, i=j, t=f)
// Папка с шрифтами
$fontsdir = 'fonts';
//Количество символов
$length = 5;
// Ширина и высота соответственно
$width = 110;
$height = 50;
//Глубина искажения символов
$fluctuation_amplitude = 5;
//Далее лучше ничего не трогать
На этом завершаем и проверяем, если у вас все работает правильно значит вы сделали, все так как я сказал. Воникли вопросы пишите в комментарии.