用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4498|回复: 2
收起左侧

[HELP] CI的登陆表单验证,如何做分步验证?

[复制链接]
发表于 2011-5-3 14:28:14 | 显示全部楼层 |阅读模式
我现在写了这样一些规则
PHP复制代码
$config = array(
                'administrator/login' => array(
                                array(
                                        'field' => 'account',
                                        'label' => '账号',
                                        'rules' => 'trim|required|min_length[3]|max_length[12]|xss_clean'
                                ),
                                array(
                                        'field' => 'password',
                                        'label' => '密码',
                                        'rules' => 'trim|required'
                                ),
                                array(
                                        'field' => 'validate_code',
                                        'label' => '验证码',
                                        'rules' => 'trim|required|callback_captcha_check'
                                )
                ),     
);
复制代码


验证码做了一个回调函数来进行验证,然后我想加入一个账号密码的验证,账号密码是存在数据库中的,验证的方法我也写好了,可以用,但是有这样一个问题,因为所有的验证都是同步的,不是分步的验证,我希望当验证码,账号,密码,全部都符合了填写的验证要求之后再进行账号密码的验证。这样的功能如何做呢?我现在的回调函数是这样写的
PHP复制代码
        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;
                        }
                }
        }
复制代码
发表于 2011-5-3 17:20:02 | 显示全部楼层
本帖最后由 jeongee 于 2011-5-3 17:23 编辑

这可能需要你自己扩展表单验证类了,或者你自己写一个。

简单点的,直接改验证类好了,在那个foreach的块最后,判断一下(判断方法在foreach外面),有错误,直接return

PS:表单验证类的填充表单也有个大BUG~~~,他只能填充设定了验证规则的域的值~~~~
发表于 2011-5-4 12:55:33 | 显示全部楼层
这可能需要你自己扩展表单验证类了,或者你自己写一个。

简单点的,直接改验证类好了,在那个foreach的块 ...
jeongee 发表于 2011-5-3 17:20



    这确实是个很麻烦的bug
有的字段不需要验证,但是如果回调页面的话,这些没有设置规则的字段就会消失
只能给他们设置一个trim规则,好让ci的form_validation把这些不需要验证的给存到数组里去.

本版积分规则