如何实现这样的功能
一个程序里就是修改用户资料时,对于密码这一项,可以保证为空时将不更改密码,但是如果输入还要进行验证(长度至少6个字符),问题是如何做个判断,为空可以跳过,输入还得进行验证! 判断长度不行吗?文本框长度大于0小于6之间,就调用修改密码的方法,然后小于6就是失败。
如果文本框的长度等于0,就调用不修改密码的方法。 谢谢,可能我没说明白,看下代码吧
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里的程序,他那个程序也是这个问题,每次如果修改用户资料时,密码必须得修改,留空就无法验证 required去掉就不是必填字段了啊,有填就验证,没填就略过。 我建议 CI 验证和手动 if 验证结合,有些东西 CI 做不到。
或者自己扩展验证类,添加新的验证规则。 我建议 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]