keyof 发表于 2010-12-16 13:37:12

如何实现这样的功能

一个程序里就是修改用户资料时,对于密码这一项,可以保证为空时将不更改密码,但是如果输入还要进行验证(长度至少6个字符),问题是如何做个判断,为空可以跳过,输入还得进行验证!

ooxx 发表于 2010-12-16 14:06:15

判断长度不行吗?
文本框长度大于0小于6之间,就调用修改密码的方法,然后小于6就是失败。
如果文本框的长度等于0,就调用不修改密码的方法。

keyof 发表于 2010-12-16 14:57:59

谢谢,可能我没说明白,看下代码吧

      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|trim|matches');
                $this->form_validation->set_rules('confirm', '确认的密码', 'required|min_length|trim');
                $this->form_validation->set_rules('screenName', '昵称', 'trim|callback__screenName_check|strip_tags');
                $this->form_validation->set_rules('phone', '联系电话', 'required|numeric|min_length|max_length');
                $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'];
      
                $this->_load_validation_rules();
               
                if ($this->form_validation->run() == FALSE)
                {      
                        $this->load->view('admin/add_user',$this->_data);
                }                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里的程序,他那个程序也是这个问题,每次如果修改用户资料时,密码必须得修改,留空就无法验证

tiana 发表于 2010-12-16 17:39:22

required去掉就不是必填字段了啊,有填就验证,没填就略过。

Hex 发表于 2010-12-16 23:43:54

我建议 CI 验证和手动 if 验证结合,有些东西 CI 做不到。
或者自己扩展验证类,添加新的验证规则。

keyof 发表于 2010-12-17 08:41:49

我建议 CI 验证和手动 if 验证结合,有些东西 CI 做不到。
或者自己扩展验证类,添加新的验证规则。 ...
Hex 发表于 2010-12-16 23:43 http://codeigniter.org.cn/forums/images/common/back.gif


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

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');
$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|max_length');
$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|trim|matches');
$this->form_validation->set_rules('confirm', '确认的密码', 'required|min_length|trim');
$this->form_validation->set_rules('screenName', '昵称', 'trim|callback__screenName_check|strip_tags');
$this->form_validation->set_rules('phone', '联系电话', 'required|numeric|min_length|max_length');
$this->form_validation->set_rules('mail', '邮箱地址', 'required|trim|valid_email|callback__email_check');
$this->form_validation->set_rules('group', '用户组', 'trim');
   }
}

如果密码为空就传递一个参数进去,否则参数为空,就执行ELSE部分的验证,这样可以吧
页: [1]
查看完整版本: 如何实现这样的功能