В некоторых случаях, как правило, при использовании html-форм на сайте требуется сделать капчу, делается это для защиты от циклической отправки формы, от спам-ботов, и не только. Вообще сделать капчу несложно, но так как в стандартном функционале битрикса есть встроенный механизм капчи, то это дело упрощается вдвойне. Нам же остается воспользоваться этим функционалом, давайте посмотрим, как можно прикрутить капчу к форме.
Перед тем как размещать поля капчи на форме, нам необходимо инициализировать генерацию кода для проверки.
Генерируем код капчи:
// подключаем файл модуля капчи include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/captcha.php"); // создаем объект капчи $cpt = new CCaptcha(); // достаем значение параметра captcha_password из главного модуля $captchaPass = COption::GetOptionString("main", "captcha_password", ""); // если строка пуста, генерируем случайное значение If (strlen($captchaPass) <= 0){ $captchaPass = randString(10); COption::SetOptionString("main", "captcha_password", $captchaPass); } $cpt->SetCodeCrypt($captchaPass);
Обратите внимание на первую строчку в коде, где подключается файл модуля капчи – captcha.php. Если ранее уже подключался пролог, то подключать данный файл не нужно.
Размещаем поля на форме. Поля должны находиться строго после кода указанного выше, т.к. используется переменная с объектом класса CCaptcha, инициализированная ранее.
<input name="captcha_code" value="<?=htmlspecialchars($cpt->GetCodeCrypt());?>" type="hidden"> <img src="/bitrix/tools/captcha.php?captcha_code=<?=htmlspecialchars($cpt->GetCodeCrypt());?>"> <input id="captcha_word" name="captcha_word" type="text">
Проверяем капчу. В обработчике формы для проверки правильности ввода значения капчи можно использовать код:
if($APPLICATION->CaptchaCheckCode($_POST["captcha_word"], $_POST["captcha_code"])){ echo 'Всё верно!'; } else { echo 'Неправильно введен код с картинки!'; }
На этом вроде всё. Капча может быть использована в любой части сайта, важным условием является предварительное включение файла модуля. В системе битрикс модули подгружаются автоматически при подключении пролога в исполняемом скрипте. Существует возможность использования модулей битрикса без подключения пролога, практикуется зачастую для обработки ajax-запросов, и не только, где нет необходимости в подгрузке шаблона сайта, и его составляющих.
В форме не отображается картинка с капчей
Спасибо большое, редко встречается полностью рабочее решение задачи так детально прописанное.
Установка капчи заняла 30 секунд.
А как несколько форм с капчей добавить на страницу?
А как несколько форм с капчей добавить на страницу?
Можно попробовать (не проверял) создать два экземпляра класса, генерировать отдельный код для каждой капчи, сохранять параметры под разными именами, например: captcha_password_1, captcha_password_2