Codeigniter - запрос возвращает 1 строку, хотя нет данных для сопоставления - PullRequest
0 голосов
/ 02 февраля 2012

Вот мой контроллер

public function login() {
    $this->load->model('admin_model');

    $access = $this->admin_model->check_login();
    $data['content'] = 'content/home';
    $data['title'] = 'Admin Panel Login';

    if($access) {
        $data= array(
            'email' => $this->input->post('email'),
            'is_logged_in' => true
        );
        $this->session->set_userdata($data);
        redirect('admin/index/dashboard');
    } else {
        $this->index($page = 'home', $msg = 'failure');
}

Вот моя модель

public function check_login() {
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', $this->input->post('password'));
    $query = $this->db->get('customers');

    return (bool) $query->num_rows;
}

То, над чем я работал, - это функция в моем конструкторе Admin, которая гарантирует, что пользователи не смогут получить доступ к какой-либо странице, пока они не вошли в систему. Проблема в том, что когда я захожу в admin / login, он устанавливает is_logged_in в true даже если функция check_login должна возвращаться как false. Он говорит, что находит строку, хотя сейчас в моей БД есть только 1 строка, которой она не должна соответствовать.

Я новичок в КИ, поэтому, пожалуйста, будьте осторожны. :)

Ответы [ 3 ]

2 голосов
/ 02 февраля 2012

num_rows() - это метод (не свойство), и его следует использовать примерно так:

return $query->num_rows() > 0;
1 голос
/ 02 февраля 2012

Расширение ответа Колина:

public function check_login() {
    $this->db->where('email', $this->input->post('email'));
    $this->db->where('password', $this->input->post('password'));
    $query = $this->db->get('customers');

    if ($query->num_rows()>0) {
      return TRUE;
    } else {
      return FALSE;
    }
}
0 голосов
/ 02 февраля 2012

Я не видел смысла в вашей модели.

Модель не может (или даже может, не должна) получать переменные из представления. Это должно прийти через контроллер.

Вы уверены, что переменные записей появляются в модели?

Лучшее решение. Поймать переменные поста в контроллере.

В модели создайте функции с параметрами.

Затем в контроллере получите его вот так.

$data['bla'] = $this->admin_model->method_name($this->input->post('blabla'));

это предотвратит все эти заблуждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...