Класс Captcha
Класс для защиты форм сайта от ботов.
Параметр $inputName
Во всех методах используется параметр $inputName. Это идентификатор поля. Обычно в качестве идентификатора берется имя поля [name] формы.
Параметр $inputName необязательно должен совпадать с именем поля — это может быть любая уникальная строка.
Внимание! Не используйте на одной странице два одинаковых идентификатора поля.
Captcha::getImageUrl($inputName, $options=[])
- Возвращает URL картинки с изображением секретной строки.
- $inputName — идентификатор поля. Подробности выше.
- $options — массив с ключами:
- bg-color — цвет фона в виде шестнадцатеричного числа (по умолчанию прозрачный).
- color — цвет символов в виде шестнадцатеричного числа (по умолчанию 000000).
- font-file — путь к файлу шрифта (по умолчанию Blox::info('cms','dir').'/assets/Verdana.ttf').
- font-size — размер шрифта (по умолчанию 12).
- num-of-chars — количество символов (по умолчанию 3).
Captcha::check($inputName, $inputValue)
Метод для проверки переданной капчи.
- Возвращает true при совпадении.
- $inputName — идентификатор поля. Подробности выше.
- $inputValue — значение капчи, введенное пользователем в поле формы.
Captcha::exceeded($inputName, $maxNumOfAttempts=20)
- Возвращает true при превышении числа попыток ввода секретных знаков.
- $inputName — идентификатор поля. Подробности выше.
- $maxNumOfAttempts — максимальное количество попыток пользователя ввести капчу (по умолчанию: 20)
Пример
<?php
$inputName='data[2]';
if (Captcha::exceeded($inputName)
$report = 'Вы исчерпали лимит ввода секретных знаков. Попробуйте позднее';
elseif ($_POST['data']) {
if (Captcha::check($inputName, $_POST['data'][2])) {
# Отправить данные формы письмом
if (Email::send(...))
$report = "Ваше сообщение отправлено";
else
$report = "Сообщение отправить не удалось";}
else
$report = "Вы ввели неправильный секретный код!";
}
echo $report;
echo'
<form action="'.Blox::info('page','url').'" method="post">
<textarea name="data[1]">'.$_POST['data'][1].'</textarea>';
$captchaParams = ['color'=>'ff0000', 'num-of-chars'=>3, 'font-size'=>14];
echo'
<img src="'.Captcha::getImageUrl($inputName, $captchaParams).'">
<input type="text" name="'.$inputName.'" />
<input type="submit" value="ok" />
</form>
';
?>