этот код не относится к официальной документации, он относится к пользовательским комментариям, на что компания официально заявляется: "Пользовательские комментарии не являются официальной документацией. Ответственность за их использование несет сам пользователь."
я бы описал пример так:
Код
<?
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");
?>
Вы имеете в виду выводить форму только когда ошибка, и прятать её когда правильно введен Captcha?
есть множество вариантов расширить функционал этого простого примера, отличаются только оптимальностью решения и красотой исполнения.
инициируйте переменную $error как в примере с которого вы начали, добавляйте текст ошибки в случаи ошибок, и выводите форму только если длина строки в этой переменной более 0 или если не был выполнен post запрос (это если первый раз открываете страницу)
Но поведение результата немного странное. Я настроил проверку аяксом, т.е. вводим символы, выводим фокус из поля, пошла обработка на сервере. вернулся результат: - при неправильном вводе выдается сообщение об ошибке (все норм), - при первом правильном вводе - сообщение ОК (все норм), - при следующем неправильном - сообщение об ошибке (все норм), - если же снова ввести правильные цифры - сообщение об успешной проверке больше не приходит.
Чем можно объяснить данный результат? Есть подозрения, что ф-я CaptchaCheckCode() после успешной проверки уничтожает только что проверенный правильный результат.
Евгений Полозов пишет: Есть подозрения, что ф-я CaptchaCheckCode() после успешной проверки уничтожает только что проверенный правильный результат.
ну это вроде и логично, нужно чтобы можно было только один раз ввести и проверить один и тот же код, в этом то и суть защиты. вы получили положительный результат после проверки, зафиксировали в какой-то переменной или выполнили какое-то условие, и все, данные удаляются из базы.
обычно при использовании ajax при неправильном выборе области которая обновляется очень часто дублируются формы в формах, ихние значение и id. проверьте принимает ли ваш обработчик именно те значения кода которые вы вводите в форме.