активная запись codeigniter где, или_ где? - PullRequest
6 голосов
/ 26 марта 2012

Я использую активную запись на CodeIgniter. Я не понимаю, какой подход я должен использовать. В настоящее время наша система входа в систему позволяет пользователю использовать имя пользователя / адрес электронной почты для входа в систему вместе с паролем. Но моя текущая активная запись, кажется, позволяет пользователю войти в систему, если он решит использовать электронную почту + без пароля.

Прямо сейчас это мой запрос:

$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;

Пример ввода:

  • Имя пользователя: test | Пароль: пароль | Результат: Успех
  • Имя пользователя: test | Пароль: пусто | Результат: Ошибка
  • Имя пользователя: test@domain.com | Пароль: пароль | Результат: Успех
  • Имя пользователя: test@domain.com | Пароль: пусто | Результат: Успех

Четвертый тестовый ввод должен быть В результате в результате, но кажется, что он регистрирует пользователя, даже если пароль пуст.

Ответы [ 3 ]

18 голосов
/ 26 марта 2012

Проблема, вероятно, заключается в том, что вам нужно добавлять скобки при смешивании 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');
4 голосов
/ 13 ноября 2014

@ 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 голосов
/ 01 декабря 2016
$conditions = '(`username`="'.$username.'" OR `email`="'.$email.' OR `mobile`="'.$mobile.'"') AND `password`="'.$password.'"';          
$query = $this->db->get_where('table_name', $conditions);
$result = $query->result();
...