Класс 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>
    ';
?>