2012-02-02 7 views
0

と一致するデータがないにもかかわらず、1行を返す私のコントローラここCodeIgniterの - クエリは、ここに

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/loginに行くときに、check_login関数がfalseとして返されていても、is_logged_inをtrueに設定していることです。それは私のDBに今すぐ一致するべきではない行が1つしかないにもかかわらず、行を見つけることです。

私はCIを初めて使っていますので、優しくしてください。 :)

答えて

2

num_rows()は方法(ないプロパティ)であり、よりこのように使用する必要があります。

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

コードを調整しても、機能しません。それはやっているクエリは次のとおりです。 SELECT * FROM ( 'customers') ' email' = 0 と 'password' = 0 、それはcheck_login()のように真を返します。 (0と0はデフォルトで投稿されているものです)おそらく私はそれが正しく構成されていないでしょうか? – ohiock

+0

データベース(CIの外)に対して直接クエリを実行し、返されるものを確認できますか? –

+0

ここに出力があります: "行0 - 0を表示(1合計、クエリは0.0004秒かかりました)"。私はなぜ$アクセスが本当に戻ってくるのか理解できないようです。 – ohiock

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行を返しているということです。私はadmin/loginに直接行くと、データを提出したかのように振る舞います(0と0)ので、本当ではないはずです。 – ohiock

0

あなたのモデルで。

モデルはビューから変数を取得できません(またはそうしてはいけません)。コントローラーを経由しなければなりません。

投稿変数はモデルに表示されていますか?

より良い解決策。コントローラー内のポスト変数をキャッチします。

モデルでは、パラメータを使用して関数を作成します。

コントローラで、このように取得します。

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

これはこれらすべての混乱を防ぎます。

+0

はい、私は前にそのように手配しました。どちらも同じように動作しますが、もう一度調整します。 – ohiock

関連する問題