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

[已解决] 如何实现这样的功能

[复制链接]
发表于 2010-12-16 13:37:12 | 显示全部楼层 |阅读模式
一个程序里就是修改用户资料时,对于密码这一项,可以保证为空时将不更改密码,但是如果输入还要进行验证(长度至少6个字符),问题是如何做个判断,为空可以跳过,输入还得进行验证!
发表于 2010-12-16 14:06:15 | 显示全部楼层
判断长度不行吗?
文本框长度大于0小于6之间,就调用修改密码的方法,然后小于6就是失败。
如果文本框的长度等于0,就调用不修改密码的方法。
 楼主| 发表于 2010-12-16 14:57:59 | 显示全部楼层
谢谢,可能我没说明白,看下代码吧
PHP复制代码
 
        private function _load_validation_rules()
        {
                $this->form_validation->set_rules('uname', '用户名', 'required|trim|alpha_numeric|callback__name_check|strip_tags');
                $this->form_validation->set_rules('password', '新的密码', 'required|min_length[6]|trim|matches[confirm]');
                $this->form_validation->set_rules('confirm', '确认的密码', 'required|min_length[6]|trim');
                $this->form_validation->set_rules('screenName', '昵称', 'trim|callback__screenName_check|strip_tags');
                $this->form_validation->set_rules('phone', '联系电话', 'required|numeric|min_length[8]|max_length[15]');
                $this->form_validation->set_rules('mail', '邮箱地址', 'required|trim|valid_email|callback__email_check');
                $this->form_validation->set_rules('group', '用户组', 'trim');
        }
 
        private function _edit_user($uid)
        {
                $this->_uid = $uid;
                $user = $this->users_mdl->get_user_by_id($uid);
 
                if(!$user)
                {
                        show_error('用户不存在或已经被删除');
                        exit();
                }
               
                $this->_data['uid'] = $user['ID'];
                $this->_data['uname'] = $user['Name'];
                $this->_data['screenName'] = $user['ScreenName'];                
                $this->_data['mail'] = $user['Email'];
                $this->_data['phone']=$user['Phone'];
               
                $this->_data['group'] = $user['Group'];
                $this->_data['page_title'] = '编辑用户: '.$user['Name'];
       
                [color=blue]$this->_load_validation_rules();
               
                if ($this->form_validation->run() == FALSE)
                {        
                        $this->load->view('admin/add_user',$this->_data);
                }[/color]                else
                {
                        $this->users_mdl->update_user(
                                $uid,
                                array(
                                        'Password'         =>        $this->input->post('password',TRUE),
                                        'Email'                =>        $this->input->post('mail',TRUE),
                                        'Phone'                =>        $this->input->post('phone',TRUE),                                        
                                        'ScreenName'=>        ($this->input->post('screenName'))?$this->input->post('screenName',TRUE):$this->input->post('name',TRUE),
                                        'Group'                =>        $this->input->post('group',TRUE)
                                ),
                                FALSE
                        );
                       
                        $this->session->set_flashdata('success', '成功修改用户 '. $user['Name'] .'的账号信息');
                        go_back();
                }
        }
 
复制代码


视图和模型代码我就不粘了,不知道怎么处理才是最好了,是STBLOG里的程序,他那个程序也是这个问题,每次如果修改用户资料时,密码必须得修改,留空就无法验证
发表于 2010-12-16 17:39:22 | 显示全部楼层
required去掉就不是必填字段了啊,有填就验证,没填就略过。
发表于 2010-12-16 23:43:54 | 显示全部楼层
我建议 CI 验证和手动 if 验证结合,有些东西 CI 做不到。
或者自己扩展验证类,添加新的验证规则。
 楼主| 发表于 2010-12-17 08:41:49 | 显示全部楼层
我建议 CI 验证和手动 if 验证结合,有些东西 CI 做不到。
或者自己扩展验证类,添加新的验证规则。 ...
Hex 发表于 2010-12-16 23:43



    谢谢老大,我是这样做的,有点笨,但是问题是解决了

private function _load_validation_rules($action=NULL)
{
  if($action=='update')
  {
  $this->form_validation->set_rules('uname', '用户名', 'trim|alpha_numeric|callback__name_check|strip_tags');
  $this->form_validation->set_rules('password', '新的密码', 'trim|matches[confirm]');
  $this->form_validation->set_rules('confirm', '确认的密码', 'trim');
  $this->form_validation->set_rules('screenName', '昵称', 'trim|callback__screenName_check|strip_tags');
  $this->form_validation->set_rules('phone', '联系电话', 'required|numeric|min_length[8]|max_length[15]');
  $this->form_validation->set_rules('mail', '邮箱地址', 'required|trim|valid_email|callback__email_check');
  $this->form_validation->set_rules('group', '用户组', 'trim');
   }
   else
   {
   $this->form_validation->set_rules('uname', '用户名', 'required|trim|alpha_numeric|callback__name_check|strip_tags');
  $this->form_validation->set_rules('password', '新的密码', 'required|min_length[6]|trim|matches[confirm]');
  $this->form_validation->set_rules('confirm', '确认的密码', 'required|min_length[6]|trim');
  $this->form_validation->set_rules('screenName', '昵称', 'trim|callback__screenName_check|strip_tags');
  $this->form_validation->set_rules('phone', '联系电话', 'required|numeric|min_length[8]|max_length[15]');
  $this->form_validation->set_rules('mail', '邮箱地址', 'required|trim|valid_email|callback__email_check');
  $this->form_validation->set_rules('group', '用户组', 'trim');
   }
}

如果密码为空就传递一个参数进去,否则参数为空,就执行ELSE部分的验证,这样可以吧

本版积分规则