Вы действительно должны читать user_guide.Ваша логика неверна.Например, вы не использовали свой обратный вызов.Вот почему ваши сообщения об ошибках не отображаются.Я добавил несколько комментариев, чтобы вы могли их прочитать.
public function login()
{
$this->template->set('title','Admin Login');
$this->form_validation->set_rules('username','Username', 'required|trim|max_length[50]|xss_clean');
// You aren't using the callback here.
$this->form_validation->set_rules('password','Password', 'required|trim|max_length[200]|xss_clean|callback_checkUsernamePassword');
if($this->form_validation->run() == FALSE){
$this->template->load('template','admin/admin_login');
}else{
// You shouldn't be adding messages when the validation has already passed. The setting should be when the validation is false.
extract($_POST);
$user_id = $this->login_model->check_login($username,$password);
if(! $user_id || $password){
$this->session->set_flashdata('login_error',TRUE); //does not add the non valid login to the session
$this->form_validation->set_message('Sorry %s is not correct.');
redirect('admin');
}else{
$this->session->set_userdata('logged_in',TRUE);
$this->session->set_userdata('user_id',$user_id);
redirect('admin/dashboard');
}
}
}
Вот что вы должны сделать.Я не собираюсь все кодировать, но дам вам идею.
public function login()
{
$this->template->set('title','Admin Login');
$this->form_validation->set_rules('username','Username', 'required|trim|max_length[50]|xss_clean');
$this->form_validation->set_rules('password','Password', 'required|trim|max_length[200]|xss_clean|callback_checkUsernamePassword');
if($this->form_validation->run() == TRUE){
$this->session->set_userdata('logged_in',TRUE);
$this->session->set_userdata('user_id',$user_id);
redirect('admin/dashboard');
}
$this->template->load('template','admin/admin_login');
}
public function checkUsernamePassword() {
extract($_POST); // Gets data from form and creates vars
$user_id = $this->login_model->check_login($username,$password);
if(! $user_id || $password){ // != If username or password are not correct
$this->session->set_flashdata('login_error',TRUE); //does not add the non valid login to the session
$this->form_validation->set_message('checkUsernamePassword', 'Sorry %s is not correct.');
return FALSE
}else{
$this->session->set_userdata('logged_in',TRUE);
$this->session->set_userdata('user_id',$user_id);
redirect('admin/dashboard');
}
}