PHP静态var无法正常工作

时间:2014-06-22 14:19:31

标签: php class static

我正在参加Captcha课程,我差不多完成了,有一件事是行不通的

在我放置表单的文件中,我从这一行开始:

    include 'captcha.php';
    $captcha = Captcha::tryCaptcha(2,4,'#000', '#ffffff');

这是captch构造:

static $do_generate = TRUE;
function __construct($aantal_letters = 2, $aantal_cijfers = 4, $voorgrond = '#000000', $achtergond = '#ffffff') {
    session_start();
    if (self::$do_generate == TRUE) {
        $letters = substr(str_shuffle('ABCDEGHJKLMNPQRSTUVWXYZ'),0 ,$aantal_letters);
        $cijfers = substr(str_shuffle('23456789'),0 ,$aantal_cijfers);
        $imgbreed = 18 * ($aantal_letters + $aantal_cijfers); 
        $_SESSION['imgbreed'] = $imgbreed;
        $_SESSION['captcha'] = $letters . $cijfers;
        $_SESSION['voorgrond'] = $this->hex2rgb($voorgrond);
        $_SESSION['achtergond'] = $this->hex2rgb($achtergond);
    }
}

所以换句话说,如果静态var $ do_generate == TRUE

,我会把我的东西放在会话中

因此,当我发布表单时,验证码会被procesor.php

检查 像这样:

if (Captcha::captcha_uitkomst() == TRUE) {
echo "Great";
} else {
echo "Wrong";

}

这是验证验证码代码的验证码功能:

static function captcha_uitkomst() {
    if (strcmp($_SESSION['captcha'], strtoupper(str_replace(' ', '', $_POST['captcha-invoer']))) == 0) {
        return TRUE;
    } else {
        echo "test";
        self::$do_generate = FALSE;
        return FALSE;
    }
}

如果我输入正确的验证码,它一切都很好,那就有效了,我的回声很棒。 如果错了,我的回声错了,

完美,但....当我回到表格时(按回退一个历史记录)输入正确的验证码,它会重新生成一个新的验证码。

在类:captcha_uitkomst中,你看到我使self :: do_generate为FALSE 回声' TEST'如果它是假的(仅用于检查)

我做错了什么

1 个答案:

答案 0 :(得分:1)

当您点击“返回”时,会重新加载该页面。你得到一个新的CAPTCHA。

你的问题的前提存在根本缺陷,因为你只是随机假设这不应该发生,而实际上这完全是设计的

如果你可以反复搞错,那就不是一个非常有效的CAPTCHA然后再回去再试一次;任何机器人都可以开始强制它并从经验中学习