Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как заставить работать CAPTCHA в собственном скрипте?

00 голосов
5
Здравствуйте!

/* я чайник, так что сорри */

Пытаюсь в свой скрипт вставить использование капчи в соответствии с документацией (вот ссылка на доку).

При обращении к странице с формой, битрикс ругается на строчку (см пример по ссылке выше)
if(!strlen($err)>0):

В чем ее сакральный смысл и почему после ":" ничего нет?
спросил 04 Июль, 13 от Piper (160 баллов)

5 Ответы

00 голосов
после if(): должно идти как минимум endif

этот код не относится к официальной документации, он относится к пользовательским комментариям, на что компания официально заявляется: "Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь."

я бы описал пример так:
Код
<?
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
// если без шаблона, то
//require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 

if($_SERVER["REQUEST_METHOD"]=="POST")
{
   if (!$APPLICATION->CaptchaCheckCode($_REQUEST["captcha_word"], $_REQUEST["captcha_sid"]))
   {
      echo "Неверно введены символы с картинки";
   }
   else
   {
      echo "Верно введены символы с картинки";
   }
}

$captcha_code = htmlspecialchars($APPLICATION->CaptchaGetCode());

?>
<form method="post" action="">
<input type="hidden" name="captcha_sid" value="<?=$captcha_code?>" />
<img src="/bitrix/tools/captcha.php?captcha_sid=<?=$captcha_code?>" width="133" height="29" alt="CAPTCHA" />
<input type="text" name="captcha_word" />
<input type="submit" value="Проверить CAPTCHA" />
</form>
<?


require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");
// если без шаблона, то
//require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); 
?>
ответил 04 Июль, 13 от Funlex (140 баллов)
00 голосов
О, спасибо!

Только вот с обработчиком ошибок проблема - как сделать, чтобы форма осталась на экране, но с сообщением об ошибке?
ответил 14 Авг, 13 от Piper (160 баллов)
00 голосов
Вы имеете в виду выводить форму только когда ошибка, и прятать её когда правильно введен Captcha?

есть множество вариантов расширить функционал этого простого примера, отличаются только оптимальностью решения и красотой исполнения.

инициируйте переменную $error как в примере с которого вы начали, добавляйте текст ошибки в случаи ошибок, и выводите форму только если длина строки в этой переменной более 0 или если не был выполнен post запрос (это если первый раз открываете страницу)
ответил 13 Ноя, 13 от Funlex (140 баллов)
00 голосов
Добрый день!
Решил спросить в этой теме, т.к. тоже есть проблемка с каптчей. Проверяю правильность введенных символов функцией
Код
$APPLICATION->CaptchaCheckCode($arCaptcha["word"], $arCaptcha["sid"]);

Но поведение результата немного странное. Я настроил проверку аяксом, т.е. вводим символы, выводим фокус из поля, пошла обработка на сервере. вернулся результат:
- при неправильном вводе выдается сообщение об ошибке (все норм),
- при первом правильном вводе - сообщение ОК (все норм),
- при следующем неправильном - сообщение об ошибке (все норм),
- если же снова ввести правильные цифры - сообщение об успешной проверке больше не приходит.

Чем можно объяснить данный результат? Есть подозрения, что ф-я CaptchaCheckCode() после успешной проверки уничтожает только что проверенный правильный результат.
ответил 21 Фев, 14 от Zaika03 (100 баллов)
00 голосов
Цитата
Евгений Полозов пишет:
Есть подозрения, что ф-я CaptchaCheckCode() после успешной проверки уничтожает только что проверенный правильный результат.


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

обычно при использовании ajax при неправильном выборе области которая обновляется очень часто дублируются формы в формах, ихние значение и id. проверьте принимает ли ваш обработчик именно те значения кода которые вы вводите в форме.
ответил 13 Июнь, 14 от Funlex (140 баллов)

Похожие вопросы

0 голосов
2 ответов
спросил 23 Июнь, 13 от Snezhka (2,240 баллов)
0 голосов
2 ответов
0 голосов
2 ответов
0 голосов
2 ответов
спросил 01 Май, 14 от Amentet (2,080 баллов)