CI的登陆表单验证,如何做分步验证?
我现在写了这样一些规则$config = array(
'administrator/login' => array(
array(
'field' => 'account',
'label' => '账号',
'rules' => 'trim|required|min_length|max_length|xss_clean'
),
array(
'field' => 'password',
'label' => '密码',
'rules' => 'trim|required'
),
array(
'field' => 'validate_code',
'label' => '验证码',
'rules' => 'trim|required|callback_captcha_check'
)
),
);
验证码做了一个回调函数来进行验证,然后我想加入一个账号密码的验证,账号密码是存在数据库中的,验证的方法我也写好了,可以用,但是有这样一个问题,因为所有的验证都是同步的,不是分步的验证,我希望当验证码,账号,密码,全部都符合了填写的验证要求之后再进行账号密码的验证。这样的功能如何做呢?我现在的回调函数是这样写的
function _user_check()
{
$this->load->model('admin');
if($this->admin->login_check())
{
return TRUE;
}
else
{
$this->form_validation->set_message('user_check', '密码错误');
return FALSE;
}
}
/**
*
* 验证码验证函数,函数在config/form_validation.php 文件里调用。
* 当验证码通过验证则进行用户账号验证。
* @param string $str 传入函数
* @return boolean
*/
function captcha_check($str)
{
$this->load->library('nsession');
if(strtoupper($str) !== $this->nsession->userdata('captcha'))
{
$this->form_validation->set_message('captcha_check', '%s 填写错误');
return FALSE;
}
else
{
//用户账号验证方法
if($this->_user_check())
{
return TRUE;
}
else {
$this->form_validation->set_message('captcha_check', '账号 & 密码错误');
return FALSE;
}
}
} 本帖最后由 jeongee 于 2011-5-3 17:23 编辑
这可能需要你自己扩展表单验证类了,或者你自己写一个。
简单点的,直接改验证类好了,在那个foreach的块最后,判断一下(判断方法在foreach外面),有错误,直接return
PS:表单验证类的填充表单也有个大BUG~~~,他只能填充设定了验证规则的域的值~~~~ 这可能需要你自己扩展表单验证类了,或者你自己写一个。
简单点的,直接改验证类好了,在那个foreach的块 ...
jeongee 发表于 2011-5-3 17:20 http://codeigniter.org.cn/forums/images/common/back.gif
这确实是个很麻烦的bug
有的字段不需要验证,但是如果回调页面的话,这些没有设置规则的字段就会消失
只能给他们设置一个trim规则,好让ci的form_validation把这些不需要验证的给存到数组里去.
页:
[1]