我试图将帐户保存到数据库。 当使用form_validation验证表单时,即使我尝试插入正确的值,它也总是返回false。这是代码
public function save(){
$params = $this->input->post();
if(!empty($params['id_account']) && !empty($params['password']) ){
$this->form_validation->set_rules('confPass', 'Confirmation Password', 'matches[password]');
}else{
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('confPass', 'Confirmation Password', 'required|matches[password]');
}
$this->form_validation->set_data($params);
$this->form_validation->set_rules('username', 'Username', 'required');
$this->form_validation->set_rules('id_role', 'Role', 'required');
if ($this->form_validation->run() == TRUE) {
unset($params['confPass']);
$params['account_status'] = array_key_exists('account_status', $params) ? $params['account_status'] : ACCOUNT_STATUS_PENDING;
$this->load->model('user_model');
$this->user_model->save($params);
$this->session->set_flashdata('notif', '<div class="alert alert-success">Berhasil menyimpan data.</div>');
redirect('rbac/form/account');
} else {
$error = validation_errors();
echo '<pre>';
print_r($error);
echo '</pre>';
var_dump($params['password']);
var_dump($params['confPass']);
die();
// $this->session->set_flashdata('notif', '<div class="alert alert-danger">'.$error.'</div>');
// redirect('rbac/form/account');
}
}
我尝试返回validation_errors()
,$params['confPass']
和$params['password']
,结果如下:
“确认密码”字段与密码字段不匹配。
string(1)“ e”字符串(1)“ e”
您会看到$params['confPass']
和$params['password']
是匹配的。
答案 0 :(得分:0)
if(!empty($params['id_account']) && !empty($params['password']) ){
$this->form_validation->set_rules('confPass', 'Confirmation Password', 'matches[password]');
}else{
$this->form_validation->set_rules('password', 'Password', 'required');
$this->form_validation->set_rules('confPass', 'Confirmation Password', 'required|matches[password]');
}
当您在上面编写的条件为true时,即控件位于if(下方)块中
if(!empty($params['id_account']) && !empty($params['password']) )
您没有为“密码”字段设置条件,仅具有确认密码规则。什么都不匹配,尽管密码匹配也总是返回false。
您需要添加密码验证规则
$this->form_validation->set_rules('password', 'Password', 'required');
在确认要匹配密码的密码规则之前。
如果您的情况表明它不需要密码,则可以执行类似的操作
$this->form_validation->set_rules('password', 'Password', 'min_length[5]');
满足条件但不是“必需”的任何内容,即修剪或最小长度
希望有帮助。