我有一个包含验证的登录表单,除了一个用例外。
如果用户输入有效的电子邮件地址而没有密码,我只想显示“需要密码”消息,但现在两个消息都显示“需要密码”消息,并且出现“电子邮件/密码不正确”消息。
我理解为什么但不知道如何更改此代码,以便仅在传递了其他验证时才运行回调。
public function login_validation() {
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean|callback_validate_credentials');
$this->form_validation->set_rules('password', 'Password', 'required|md5');
$this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');
if ($this->form_validation->run()) {
$data = array(
'email' => $this->input->post('email'),
'staff_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('clock/clock');
} else {
$this->load->view('login/login');
}
}
public function validate_credentials() {
$this->load->model('staff_model');
if ($this->staff_model->can_log_in()) {
return true;
} else {
$this->form_validation->set_message('validate_credentials', 'Incorrect Email/Password');
return false;
}
}
答案 0 :(得分:1)
不要使用表单验证本身来验证凭据。无论如何,这只是为了验证对我的理解的输入。您必须单独将输入传递给函数,因为它没有使用form_validation库。如下所示。
public function login_validation() {
$this->load->library('form_validation');
$this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean');
$this->form_validation->set_rules('password', 'Password', 'required|md5');
$this->form_validation->set_error_delimiters('<div class="alert alert-error">', '</div><br />');
if ($this->form_validation->run()) {
$this->validate_credentials($this->input->post($email),$this->input->post($password));
$data = array(
'email' => $this->input->post('email'),
'staff_logged_in' => 1
);
$this->session->set_userdata($data);
redirect('clock/clock');
} else {
$this->load->view('login/login');
}
}