2017-02-15 2 views
0

Я пытаюсь создать логин. Но при проверке учетных данных из базы данных она регистрируется, если какие-либо данные верны, а другие неверны.
для имени входа, электронной почты, мобильного телефона разрешены.
«статус» должен быть «активным» является дополнительным условием.
Что я делаю неправильно?Ошибка в модели входа

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

Установите ИЛИ statments в скобках(), как: «статус = 'активный' AND (имя = '$ имя пользователя' OR email_id = '$ имя пользователя' OR mobile_no = '$ username') И пароль = 'trim ($ password)' " И я надеюсь, что вы избежите пользовательских входов, иначе ваш код будет уязвим для sql-injection – Tiega

+0

SQL-Injection ... –

ответ

1

У вас есть вопрос о том, где статья. Вам нужно использовать скобки для проверки столбцов с помощью OR.

Пожалуйста, проверьте ниже.

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

Использование запроса группировка с использованием group_start() и group_end() .Но страха 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(); 

подробнее см здесь Codeigniter Query Builder