Я разработал простую систему входа, которая работает нормально, но не работает, и мне нужно знать, почему
ВОПРОС: Как показать, что вызывает неудачу. Это не ошибка проверки, а ошибка либо с данными, передаваемыми MySQL, либо с запросом, так или иначе
вот функция db:
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); } } }
Я знаю, что ошибка происходит, когда я перенаправляюсь обратно на страницу входа в систему, если не удается и изменить текст заголовка, чтобы показать мне (только в режиме тестирования сейчас), но как я могу узнать, что не так с запросом?
Вы можете использовать log_message и проверять журналы, если y ведет себя так, как ожидалось:
http://ellislab.com/codeigniter/user-guide/general/errors.html
Обычно я использую echo '<pre>'; print_r($query->result());die;
echo '<pre>'; print_r($query->result());die;
а echo '<pre>'; print_r($query->result());die;
сразу после формирования запроса $. Это быстрее.
$this->db->where("email",$email); $this->db->where("password",$password); $query=$this->db->get("users"); echo $this->db->last_query(); die();
вы можете echo
запрос, который вы только что сделали, используя $this->db->last_query()
это покажет запрос, сделанный вами со значениями, и проверьте, действительно ли запрос.
подробнее читайте на сайте http://ellislab.com/codeigniter/user-guide/database/helpers.html.