可能是简单的,但是我的问题是,我已经在我的用户系统中实现了一个简单的验证码,但我似乎无法使用回调表单验证来检查验证码是否正确。
我将答案存储在用户会话中,并在表单验证时检查它是否正确。
你可以在这里看到它:http://77.96.119.180/beer/user/register
请原谅任何啤酒;)
这是我的代码:
$this->form_validation->set_rules('captcha', 'Image verification', 'trim|required|xss_clean|integer|callback_captcha_check');
以下是表格的一部分
// CAPTCHA
$random_word = rand(10000, 99999);
$vals = array(
'word' => $random_word,
'img_path' => './captcha/',
'img_url' => 'http://77.96.119.180/beer/captcha/',
'font_path' => './captcha/fonts/pdark.ttf',
'img_width' => '150',
'img_height' => 50,
'expiration' => 7200
);
$cap = create_captcha($vals);
// Store captcha answer in session
$this->session->set_userdata('captcha_answer', $random_word);
$content .= form_label('Please enter the numbers in the box to verify you are human (Hint: Only numbers will appear)', 'captcha');
$content .= '<div class="left" style="margin-left:20px;">' . $cap['image'] . '</div>';
$content .= form_input(array('name' => 'captcha', 'value' => '', 'class' => 'right', 'style' => 'width:75%; margin-top:5px;'));
这是回调函数
public function captcha_check($str)
{
if ($str == $this->session->userdata('captcha_answer'))
{
// Captcha is correct
$this->form_validation->set_message('captcha', 'The %s was wrong, please try again');
return FALSE;
}
else
{
return TRUE;
}
}
答案 0 :(得分:2)
你的验证规则在你的回调函数中是相反的。你的返回true和返回错误逻辑需要反转。
只需将if语句更改为:
if ($str != $this->session->userdata('captcha_answer'))