Универсальная функция защиты форм от спама с помощью кода, изображенного на картинке. Данная функция способна создавать изображения без использования GD и с использованием GD, по вашему выбору. Хранение кода в сессиях, базе или файлах.
Для начала работы нужно настроить функцию. Открывайте файл confirm_f.php и внутри функции редактируйте следующие переменные: $_conf['variant']="file"; // (sess, file, mysql) один из трех варинтов хранения кода (сессии, файл, или база mysql) $_conf['type_pict']=2; // тип создания картинки (1-phpbb не использует gd, 2-использует gd) $_conf['only_num']=1; // (1 или 0) код содержит только цифры-1 или цифры с буквами-0 $_conf['pach_file']="c:/Program Files/Apache Group/Apache/htdocs/"; // если выбрано хранение кода в файле, указываем путь к папке, где будут храниться файлы с кодами $_conf['sess_name']="webi_code"; // если выбрано хранение кода в сессии, укажите имя переменной сессии Если выберите хранение в базе, отредактируйте данные для соединения с базой и создайте таблицу
CREATE TABLE `webi_pict_code` ( `md5` varchar(50) NOT NULL default '', `code` varchar(30) NOT NULL default '', `date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`md5`) ); Картинка с кодом вызывается так <img src="confirm_f.php?webi_code=1"> Чтобы вставить в форму картинку и поле для ввода кода, примерно можно сделать так <input type=text name=code value="" size=16 maxlength=100><br> <img src="confirm_f.php?webi_code=1"> Вам могут не понравится размеры создаваемых картинок, поэтому можете менять размер прямо внутри тега <img ...
Теперь проверка кода. В том месте, где вы принимаете данные из формы вставляйте файл confirm_f.php и вызывайте функцию на проверку, вот так <? include("confirm_f.php"); if(webi_confirm_pict("confirm", $_POST['code'])) // код введен вверно else // код введен не верно ?> Функция webi_confirm_pict("confirm", $_POST['code']) обязательно должна вызываться с параметром "confirm" $_POST['code'] в данном примере это код, введенный форме. Тут может быть любая ваша переменная, которая приходит из формы с кодом. Просто в моем примере для ввода кода я использовал имя code, поэтому и тут я использовал эту же переменную. Данная функция возвращает true или false. Если выберите тип хранения кода в файлах, тогда вам предется чистить время от времени папку, где создаются файлы с кодами. Так как при создании кода не всегда он будет удаляться, какой-то посетитель возможно не захочет добавлять ничего, и файл с кодом так и останется лежать в папке. Можете добавить какой то скрипт, по удалению старых файлов, а можете раз в месяц заходить и руками удалять накопившиеся файлы. Делать автоматическое удаление старых файлов в функции я не стал делать, так как по невнимательности можно случайно поудалять все нужные файлы.
20.12.2007 Вано
Не ожидал.
Достаточно просто установил, настроил и работает же...
12.01.2008 PitS_1
Спасибо за "сырец".
IMHO стоит передавать/сравнивать не сам код, а его MD5
13.01.2008 админ
Какой смысл передавать/сравнивать md5?
Код хранится на сервере и доступен только скрипту.
В самой форме кодов нет, только введенный посетителем.
29.01.2008 roknsev
Парни а обязательно эта капча дожна работать на БД можно ли как то переделать что бы не использовать БазуДаных. Ответ жду на roknsev@rambler.ru
07.02.2008 вано
Она может работать с базой, с сессиями или файлами.
Любой из трех вариантов.
01.03.2008 vatson.01
Такую каптчу "разкодирует" даже самый простой бот ))) http://sam.zoy.org/pwntcha/
24.12.2008 светик
ну возможно...
29.01.2009 cntgfy
Респект и уважуха. Спасибо.
Отлично прикрутился.
15.06.2009 ага
для md5 хватит 32 символов
25.10.2009
У меня не проверяет картинку
26.10.2009 сика12
Быть это не может.
Что то не так сделали.