2017-02-15 5 views
0

Ich versuche, Login zu erstellen. Beim Überprüfen der Anmeldeinformationen aus der Datenbank wird jedoch protokolliert, ob 1 Daten korrekt und andere ebenfalls falsch sind.
für Login-Name, E-Mail, Handy sind alle erlaubt.
"Status" sollte "aktiv" sein ist eine zusätzliche Bedingung.
Was mache ich falsch ??Fehler beim Login-Modell

function login($username, $password) { 
    $where = "status='active' AND name='$username' OR email_id= '$username' OR mobile_no='$username' AND password ='trim($password)'"; 
    $this->db->select('*'); 
    $this->db->from('user_details'); 
    $this->db->where($where); 
    //$this->db->where('password', trim($password)); 
    $this->db->limit(1); 

    $query = $this->db->get(); 
    if ($query->num_rows() == 1) { 
     return $query->result(); 
    } else { 
     return false; 
    } 
} 
+0

Stellen Sie die OR statments in Klammern() wie: „status = 'aktiv' AND (name = '$ username' OR email_id = '$ username' OR mobile_no = '$ username') UND password = 'trim ($ password)' " Und ich hoffe, Sie entgehen den Benutzereingaben, sonst ist Ihr Code anfällig für SQL-Injektion – Tiega

+0

SQL-Injection ... –

Antwort

1

Sie haben ein Problem in Where-Klausel. Sie müssen Klammern verwenden, um die Spalten mit OR zu überprüfen.

Bitte überprüfen Sie unten.

$where = "status='active' AND 
     (name='$username' OR email_id= '$username' OR mobile_no='$username') 
     AND password ='trim($password)'"; 
3

Verwenden Sie query Gruppierung mit group_start() und group_end() .Keine Angst vor SQL Injection.

$this->db->select('*')->from('user_details') 
      ->where('status', 'active') 
      ->group_start() 
        ->where('email_id',$username) 
        ->or_where('mobile_no',$username) 
      ->group_end() 
    ->where('password',trim($password)) 
->limit(1) 
->get(); 

für mehr sehen hier Codeigniter Query Builder