2012-03-26 11 views
5

私はCodeIgniterでアクティブレコードを使用しています。私はどのアプローチをとるべきか混乱している。現在のところ、私たちのログインシステムでは、ユーザーはパスワードと共にログイン用のユーザー名/電子メールを使用します。しかし、私の現在のアクティブなレコードは、彼が電子メール+パスワードを使用することを選択した場合、ユーザーにログインさせるようです。codeigniterアクティブなレコードwhere、or_where?

今、これは私のクエリです:

$this->db->select('id,level,email,username'); 
$this->db->where('email',$user); 
$this->db->or_where('username',$user); 
$this->db->where('password',$pass); 
$query = $this->db->get('users'); 

if($query->num_rows>0) 
    return TRUE; 
else 
    return FALSE; 

サンプル入力:

  • ユーザー名:テスト |パスワード:pass |結果:成功
  • ユーザー名:テスト |パスワード: |結果:は失敗しました
  • ユーザー名:[email protected] |パスワード:pass |結果:成功
  • ユーザー名:[email protected] |パスワード: |結果:成功は

第四テスト入力は結果で失敗しましたでなければならないが、それは、パスワードが空の場合でも、ユーザーがログに記録されているようです。

答えて

17

おそらく問題は、ANDとORをWHERE句に混ぜるときに角括弧を追加する必要があることでしょう。これを試してください:

$this->db->select('id,level,email,username'); 
$this->db->where("(email = '$user' OR username = '$user') 
        AND password = '$pass'"); 
$query = $this->db->get('users'); 
+0

グレート:これは正しいことを行う方法です!このクイック返信をありがとう。 –

+13

これは、アクティブなレコードの目的を破ってSQL注入のためのアプリを開くことはありませんか? –

4

@RidIculousが正しいです。

$user = $this->db->escape($user); 
$this->db->select('id,level,email,username'); 
$this->db->where("(email = $user OR username = $user)"); 
$this->db->where('password', $pass); 
$query = $this->db->get('users'); 

それとも私が好むフォーマット(PHP 5+)

$user = $this->db->escape($user); 
$query = $this->db 
    ->select('id,level,email,username') 
    ->where("(email = $user OR username = $user)") 
    ->where('password', $pass) 
    ->get('users'); 
+0

私はクエリの上にそれをエスケープしています – Tumtum

+0

D'oh! :-(申し訳ありません! –

0
$conditions = '(`username`="'.$username.'" OR `email`="'.$email.' OR `mobile`="'.$mobile.'"') AND `password`="'.$password.'"';   
$query = $this->db->get_where('table_name', $conditions); 
$result = $query->result(); 
+1

このコードスニペットは問題を解決するかもしれませんが、それがなぜ、どのように質問に答えるかについては説明していません。[あなたのコードの説明を含めてください](// meta.stackexchange.com/q/114762/あなたのコード提案の理由を知らないかもしれません**フラッグスタッフ/査読者** ** [このようなコードのみの回答については、downvoteは削除しないでください!](// meta.stackoverflow.com/a/260413/2747593) –

関連する問題