2012-02-02 92 views
0

这里是我的控制器笨 - 查询返回1行,即使没有数据来匹配

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构造函数将确保用户在登录之前不能访问任何页面。问题是,当我去管理员/登录时,它将is_logged_in设置为true,即使check_login函数应该返回为false。这是说,它正在发现一排,即使我的数据库中只有1行现在应该不匹配。

我是新来的CI,所以请温柔。 :)

回答

2

num_rows()是方法(不是属性),应该使用更多的是这样的:

return $query->num_rows() > 0; 
+0

即使在调整我的代码后,它不起作用。它正在做的查询是: SELECT * FROM ('客户') 其中'email' = 0 和'password' = 0 和它的返回check_login()是真的。 (0和0是默认发布的内容)也许我组织不正确? – ohiock 2012-02-02 15:47:45

+0

您可以直接针对您的数据库(CI之外)运行该查询并查看返回的内容吗? – 2012-02-02 16:03:59

+0

当然。以下是输出结果:“显示行0 - 0(总共1次,查询花费0.0004秒)”。我似乎无法弄清楚为什么$访问回归为真。 – ohiock 2012-02-02 16:18:41

1

科林的答案的扩展:

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

是的,我也试过这个。问题不在于我错误地编写了我的条件语句,而是它返回了1行,即使它不应该。当我直接进入管理员/登录时,它的行为就好像我提交了数据(这将是0和0),因此它返回true,而不应该是。 – ohiock 2012-02-02 15:53:58

0

我没有看到这一点在你的模型中。

模型不能(或者即使它可以,不应该)从视图中获取变量。它应该通过控制器来。

你确定,后期变量出现在模型中吗?

更好的解决方案。在控制器中捕获post变量。

在模型中,使用参数创建函数。

然后在控制器中,像这样检索它。

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

这将防止所有这些混淆。

+0

是的,我之前安排过它。两者工作相同,但我会再调整一次。 – ohiock 2012-02-02 16:41:57

相关问题