1

次のコードに問題があります。ユーザーにユーザー名または電子メールを使用してログインしてもらいたい。ユーザー名を使用すると問題なく動作しますが、メールを使用するとパスワードが間違っていてもログインできます。

public function can_login(){

    $user_mail = $this->input->post('user_mail');

    $this->db->where('email =', $user_mail);
    $this->db->or_where('username =', $user_mail); 

    $this->db->where('password',md5($this->input->post('password')));
    $this->db->where('status =', 'registered');
    $query=$this->db->get('user');

    if($query->num_rows()== 1) {
        return true; 
    } else {
        return false;
    }
}
4

3 に答える 3

3

これを試して

$this->db->where("email = '$user_mail' or username = '$user_mail'"); 
$this->db->where('password', md5($this->input->post('password')));
$this->db->where('status', 'registered');
$query=$this->db->get('user');
于 2013-01-04T11:15:15.753 に答える
0

みんなありがとう、これは私の解決策であり、うまくいきます。

public function can_login(){
$user_mail = $this->input->post('user_mail');
$password= MD5($this->input->post('password'));
$this->db->select('username,email,password');
$this->db->where("(email = '$user_mail' OR username = '$user_mail') AND password = '$password' AND status = 'registered'");

  $query=$this->db->get('user');`

     if($query->num_rows()== 1)
     {
        return true; 
     }else 
     {
      return false;
     }

    }   
于 2013-01-05T02:55:25.000 に答える
0

次のようにCodeIgniter Query Bindingを使用できます。

変化する:

 $this->db->where('email =', $user_mail);
         $this->db->or_where('username =', $user_mail); 

 $this->db->where('password',md5($this->input->post('password')));
 $this->db->where('status =', 'registered');
 $query=$this->db->get('user');

に:

$sql = "SELECT * FROM user WHERE (email = ? OR username = ?) AND password = ? AND status = 'registered' LIMIT 1";
$query = $this->db->query($sql, array($user_mail, $user_mail, md5($this->input->post('password')));
于 2013-01-04T06:30:00.707 に答える