CI – покажите мне, что пошло не так

Я разработал простую систему входа, которая работает нормально, но не работает, и мне нужно знать, почему.

ВОПРОС: Как показать, что вызывает неудачу?

Вот функция базы данных:

function login($email,$password) { $this->db->where("email",$email); $this->db->where("password",$password); $query=$this->db->get("users"); if($query->num_rows()>0) { foreach($query->result() as $rows) { //add all data to session $newdata = array( 'user_id' => $rows->id, 'user_name' => $rows->username, 'user_email' => $rows->email, 'logged_in' => TRUE, ); } $this->session->set_userdata($newdata); return true; } return false; } 

И вот логика:

 public function login() { $this->load->library('form_validation'); // field name, error message, validation rules $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); if($this->form_validation->run() == FALSE) { $this->signin(); } else { $email=$this->input->post('email'); $password=md5($this->input->post('pass')); $result=$this->user_model->login($email,$password); if($result) { $this->dash(); } else { $data['title']= 'Login Error'; $this->load->view('nav/header', $data); $this->load->view('login', $data); $this->load->view('nav/footer', $data); } } } для public function login() { $this->load->library('form_validation'); // field name, error message, validation rules $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); if($this->form_validation->run() == FALSE) { $this->signin(); } else { $email=$this->input->post('email'); $password=md5($this->input->post('pass')); $result=$this->user_model->login($email,$password); if($result) { $this->dash(); } else { $data['title']= 'Login Error'; $this->load->view('nav/header', $data); $this->load->view('login', $data); $this->load->view('nav/footer', $data); } } } в public function login() { $this->load->library('form_validation'); // field name, error message, validation rules $this->form_validation->set_rules('email', 'Your Email', 'trim|required|valid_email'); $this->form_validation->set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]'); if($this->form_validation->run() == FALSE) { $this->signin(); } else { $email=$this->input->post('email'); $password=md5($this->input->post('pass')); $result=$this->user_model->login($email,$password); if($result) { $this->dash(); } else { $data['title']= 'Login Error'; $this->load->view('nav/header', $data); $this->load->view('login', $data); $this->load->view('nav/footer', $data); } } } 

Я знаю, что ошибка происходит, когда я перенаправляюсь обратно на страницу входа в систему, если она терпит неудачу, и измените текст заголовка, чтобы показать мне (только в режиме тестирования сейчас). Но как я могу узнать, что происходит не так?

Это функция базы данных проверки:

 function login($email,$password) { $this->db->where("email",$email); $this->db->where("password",$password); $query=$this->db->get("users"); if($query->num_rows()>0) { foreach($query->result() as $rows) { //add all data to session $newdata = array( 'user_id' => $rows->id, 'user_name' => $rows->username, 'user_email' => $rows->email, 'logged_in' => TRUE, ); } $this->session->set_userdata($newdata); return true; } return false; } 

Я предполагаю, что весь ваш php-код в порядке, тогда вам нужно установить настраиваемую форму-валидацию-сообщение для каждого входа, чтобы узнать, какой вход поступил не так, и повторите его:

 <?php echo validation_errors(); ?> 

напишите ниже код в файле вида

 <section id="notification" > <?php if(validation_errors() !== '' ) { echo "<div class='alert-msg error'>"; echo validation_errors(); echo "</div>"; } $error = $this->session->flashdata('error'); $success = $this->session->flashdata('success'); if($error) { echo "<div class='alert-msg error'>"; echo $this->session->flashdata('error'); echo "</div>"; } if($success) { echo "<div class='alert-msg success'>"; echo $this->session->flashdata('success'); echo "</div>"; } ?> </section> 

и условно установить сообщение об ошибке / ошибке в данных вспышки в контроллере (см. ниже)

  if($result) {  $this->dash(); $this->session->set_flashdata('success', 'Login successfully.'); } else {   $this->session->set_flashdata('error', 'Login failed'); } 

Подробнее Flashdata в CI

Для вашего измененного ответа:

использование ниже логики в вашей модели

  $qry = $this->db->get_where('users', array('username' => $this->_username )); if ($qry->num_rows() == 1) { $user = $qry->row_array(); $submitted_pass = md5($this->_password); $db_pass = $user['password']; if ($submitted_pass === $db_pass) { return $user; } else { // wrong username/password $this->session->set_flashdata('error', $this->errorList[10]); return FALSE; } } else { // no such username exist $this->session->set_flashdata('error', $this->errorList[15]); return FALSE; }