Всем привет. Делаю форму с капчей (прмерно как тут http://dev.1c-bitrix.ru/community/forums/forum6/topic27270/). Форма реализована с помощью компонента bitrix:iblock.element.add.form. Перед отправкой формы, я делаю проверку на правильность ввода капчи через аякс метод (jquery метод ajax). Php скрипт (который зовется методом ajax), который проверяет правильность ввода капчи, проверяет все верно. Как только проверка на клиентской части закончилась верно (jquey ajax), продолжает выполняться метод submit формы. В моем случае - происходит добавление инфоблока. Но почему-то, после выполнениязавершения загрузки страницы, выходит сообщение "Неверно введено слово с картинки". Почему так?
Sergey Leshchenko пишет: Потому что удаляется соответствующая запись из базы после успешной проверки капчи, а значит, становится неверной при повторном постинге.
А как решить тогда данную проблему Вы знаете? Помогите пожалуйста.
Если компонент, принимающий и проверяющий в конечном итоге форму, не ваш, то самый простой способ - это проверять капчу при аякс-запросе не методом CCaptcha::CheckCaptchaCode(), а своим, фактически полной копией системного, но без CCaptcha::Delete($sid);
Sergey Leshchenko пишет: Если компонент, принимающий и проверяющий в конечном итоге форму, не ваш, то самый простой способ - это проверять капчу при аякс-запросе не методом CCaptcha::CheckCaptchaCode(), а своим, фактически полной копией системного, но без CCaptcha::Delete($sid);
Да, спасибо. Сделал по другому - в итоге хватило одной проверки при аяксе. Приходится верить в поддержку JS у пользователей =) Спасибо за Ваш ответ - буду знать на будущее.
Марат И зачем такая капча нужна? Чтобы усложнить жизнь пользователю? Ведь хакеру плёвое дело обойти любые проверки, осуществляемые на клиентской стороне и зафлудить сайт.
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include.php");
$res = $DB->Query("SELECT CODE FROM b_captcha WHERE ID = '".$DB->ForSQL($_REQUEST["captcha_sid"],32)."'");
$ar = $res->Fetch();
if ($ar["CODE"]!=strtoupper($_REQUEST["captcha_word"]))
{echo "Ошибка ввода капчи";}
else {echo "Капча введена верно";}