Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/247.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php codeigniter中的验证码验证错误_Php_Codeigniter - Fatal编程技术网

Php codeigniter中的验证码验证错误

Php codeigniter中的验证码验证错误,php,codeigniter,Php,Codeigniter,我发现我的验证码验证表单存在问题,有关更多详细信息,请参见我的代码: 验证码功能 private function gbr_captcha() { $vals = array( 'img_path' => './captcha/', 'img_url' => base_url().'captcha/', 'font_path' => './system/fonts/impact.ttf',

我发现我的验证码验证表单存在问题,有关更多详细信息,请参见我的代码:

验证码功能

private function gbr_captcha()
    {
        $vals = array(
        'img_path' => './captcha/',
        'img_url' => base_url().'captcha/',
        'font_path' => './system/fonts/impact.ttf',
        'img_width' => '150',
        'img_height' => 40
        );
        $cap = create_captcha($vals);
        $datamasuk = array(
            'captcha_time' => $cap['time'],
            'word' => $cap['word']
            );
        $expiration = time()-3600;
        $this->db->query("DELETE FROM captcha WHERE captcha_time < ".$expiration);
        $query = $this->db->insert_string('captcha', $datamasuk);
        $this->db->query($query);
        return $cap['image'];
    }

在我的网站上显示验证码是有效的,但要验证用户输入的验证码是否正确,它不起作用,我认为我的问题来自我的验证,如果有任何建议来修复我的代码,请分享,谢谢..

您正在将以下数据存储到数据库中

 $datamasuk = array(
            'captcha_time' => $cap['time'],
            'word' => $cap['word']
            );
IMHO没有标识用户的任何内容(如ip地址)。您将无法获取已生成和存储的文本进行比较。因为你没有任何指向用户的东西

选项1:存储更多信息,如ip地址,当您尝试验证验证码时,询问数据库是否有ip地址的任何记录

选项2:将验证码存储在会话中,如

$this->session->set_userdata("captcha", ["expires"=> time()+3600, "data" => captcha_string]) 
这样更容易验证(至少对我来说)


我希望它足够清楚。

您正在将以下数据存储到数据库中

 $datamasuk = array(
            'captcha_time' => $cap['time'],
            'word' => $cap['word']
            );
IMHO没有标识用户的任何内容(如ip地址)。您将无法获取已生成和存储的文本进行比较。因为你没有任何指向用户的东西

选项1:存储更多信息,如ip地址,当您尝试验证验证码时,询问数据库是否有ip地址的任何记录

选项2:将验证码存储在会话中,如

$this->session->set_userdata("captcha", ["expires"=> time()+3600, "data" => captcha_string]) 
这样更容易验证(至少对我来说)


我希望它足够清楚。

我认为您的验证码中应该有一个回调函数来验证它是否正确

 $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required|callback_checkCaptcha');

function checkCaptcha($word){
$ip = $this->session->get_userdata("ip");
    //check db/query db if the captcha word is correct
    $sql = "SELECT id FROM captcha WHERE word = {$word} and ip={$ip}"
//return true or false if word exists or not
    }
第二,你如何确定它是准确的验证码?
您可以存储用户ip地址,或者设置cookies/session

我认为您的验证码中应该有一个回调函数来验证它是否正确

 $this->form_validation->set_rules('captcha', 'Captcha', 'trim|required|callback_checkCaptcha');

function checkCaptcha($word){
$ip = $this->session->get_userdata("ip");
    //check db/query db if the captcha word is correct
    $sql = "SELECT id FROM captcha WHERE word = {$word} and ip={$ip}"
//return true or false if word exists or not
    }
第二,你如何确定它是准确的验证码?
您可以存储用户ip地址,或者设置cookies/session

Hmm,我看不到您询问数据库是否存在验证码的部分。检查这里:那么,我应该向代码中添加什么?你能给我一些参考资料吗?你问的不清楚。请再澄清一下嗯,我看不到你问数据库是否有验证码的部分。检查这里:那么,我应该向代码中添加什么?你能给我一些参考资料吗?你问的不清楚。请再清理一下