И так начнем! Многие из вас кто пользуется интернетом наверняка встречались с такими защитными кодами. Зачем - это надо? Все просто, для того чтобы роботы спам пауков не добавили на ваш сайт, какую-то гадость, например вредоносный код, рекламу, кучу непонятных ссылок и так далее. Реализовать защиту для прохождения только человеком придумана так называемая - капча. Вот она (ее код) не виден паукам, а только человек может добавить материал или комментарий или другое. Защитить от спам ботов можно все. Я расскажу вам и покажу на примере своего сайта, защита которую мы сегодня разложим по полочкам установлена здесь в форме комментария ниже.
Шаг первый:
Необходимо создать php файл обработчик - назовем его например captcha.php его исходный код вот. Разберём каждую строку для настройки ниже.
Код PHP
<?php
session_start();
$string = "";
for ($i = 0; $i < 5; $i++)
$string .= chr(rand(97, 122));
$_SESSION['rand_code'] = $string;
$dir = "fonts/";
$image = imagecreatetruecolor(120, 60);
$black = imagecolorallocate($image, 0, 0, 0);
$color = imagecolorallocate($image, 120, 172, 221);
$white = imagecolorallocate($image, 215, 241, 242);
imagefilledrectangle($image,0,0,399,99,$white);
imagettftext ($image, 30, 0, 10, 40, $color, $dir."font3.ttf", $_SESSION['rand_code']);
header("Content-type: image/png");
imagepng($image);
?>
Теперь разберём по строкам В первой строке необходимо подключить сессию, затем задается переменная $string пустой, так как в последствии скрипт будет генерировать здесь свои символы, в нашем случае просто набор произвольных букв. Далее в for задаем количество выводимых символов в нашем случае достаточно и 5, больше уже напряжно для пользователей. Например как для меня всегда такой лом вводить символы когда их бывает и до 10. Просто жесть, зачем такое делать смысла не вижу. Может я и не прав но увы это моё мнение. Идем далее задаем сессии массив, подключаем директорию в которой у нас лежит файл со шрифтами с расширением ...ttf в нашем случае это папка fonts. В следующих строках настраиваем ширину, высоту переменная $image, нам достаточно и 120/60 желательно делать ширину в 2 раза больше, но это зависит от количества символов в коде. Далее переменные сами говорят за себя - выборка цвета в RGB формате. $color естественно текст самого кода. Далее выбираем фон, цвет, подключаем файл стилей текста ttf и подключаем сессию. Вот в принципе основные функции этого файла. Идём дальше.
Создадим форму с проверкой через защитный код. Смотрим ниже:
Код HTML
<p class='post_comment'>Добавить Ваш комментарий:</p>
<form action="обработчик.php" method="post" name="form_com">
<p><label>Ваше имя: </label><input name="author" type="text" size="30" maxlength="30"></p>
<p><label>Текст комментария: <br> <textarea name="text" cols="32" rows="4"></textarea></label></p>
<p>Введите символы с картинки<br /></p>
<p> <img src = "images/captcha.php" /> <input style='margin-bottom:16px;' name="kapcha" type="text" size="5" maxlength="5"></p>
<p><input name="sub_com" type="submit" value="Комментировать"></p>
Вот теперь рассмотрим форму. И так основные понятия формы добавления комментариев я думаю понятно всем. У нас есть форма ее обработчик файл обработчик.php и собственно сам код подключения капчи. После поля ввода текста <textarea> Мы видим подключение через изображения но файл нашей капчи. Инпут с полем ввода проверочного кода у нас с именем kapcha. Как же оно сработает. Для этого нам понадобиться в файле обработчике формы задать условие.
И так третий файл обработчик формы и само условие.
Код PHP
session_start();
if($_POST['kapcha'] != $_SESSION['rand_code']){
echo "Капча введена неверно";
} else {
$date = date("Y-m-d"); $result2 = mysql_query ("INSERT INTO название таблици (колонки таблици через запятую) VALUES (здесь все переменные которые нужно добавить)",$db);
}
Что происходит здесь? Опять подключаем сессию, и если (if) введённый код соответствует сгенерированному то добавляй в базу данные формы, если нет то выводим сообщение "Капча введена неверно". Вот в принципе и все. Так сделано у меня на сайте пример вот на моих комментариях. Вопросы что не понятно задаем отвечаем. Всем успехов в разработках.
И запомните сайт который вы сделаете сами это в любом случае лучше чем использовать CMS.