[PHP] Текстовая капча
От: Volgare  
Дата: 01.06.15 16:05
Оценка:
У кого есть 5 минут, помогите с PHP, плиз.

Есть старая графическая капча, которую боты имеют на 1-2-3.
Решил поменять на текстовую. Будет задан вопрос, ответ на который знают только пользователи, например фамилия "Иванов". Ну и нужно проверить её после ввода юзером в поле.
Только фамилия может быть написана в транслите и разным регистром.
Сейчас имею это:
function prepare_captcha() {
    if (extension_loaded("gd")) {
        if (!session_id()) {
            session_start();
        }
    }
}

function show_captcha_image() {
    if (extension_loaded("gd")) {
        global $CAPTCHA_NUM;
        $CAPTCHA_NUM=mt_rand(0,100000);
        $tmp = "<img src=\"kcaptcha/index.php?".session_name()."=".session_id()."&amp;rnd=".mt_rand(0,1000000)."&amp;knum=".$CAPTCHA_NUM."\" border=\"0\" alt=\""._KCAPTCHA."\">";
        return $tmp;
    }
}

function show_captcha_field() {
    global $CAPTCHA_NUM;
    if (extension_loaded("gd")) {
        $tmp = "
            <input type=\"text\" name=\"keystring\" size=\"20\" maxlength=\"10\" autocomplete=\"off\">
            <input type=\"hidden\" name=\"knum\" value=\"".$CAPTCHA_NUM."\">
        ";
        return $tmp;
    }
}

function show_captcha_text() {
    if (extension_loaded("gd")) {
        $tmp = "<strong>"._KCAPTCHA.": </strong>&nbsp;&nbsp;";
        return $tmp;
    }
}

function valid_captcha() {    //return 1 if valid or 0 if invalid
    if (isset ($_POST['knum'])) {
        $knum=intval($_POST['knum']);
    }
    else {
        $knum=0;
    }
    if(isset($_SESSION['captcha_keystring_'.$knum]) && $_SESSION['captcha_keystring_'.$knum] == $_POST['keystring']) {
        foreach($_SESSION as $k=>$v) {
            if (strpos($k,'captcha')!==false) {
                unset($_SESSION[$k]);
            }
        }
        return 1;
    }
    else {
        foreach($_SESSION as $k=>$v) {
            if (strpos($k,'captcha')!==false) {
                unset($_SESSION[$k]);
            }
        }
        return 0;
    }
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.