not - codeigniter active record where, or_where?
update codeigniter example (3)
El problema es probablemente que necesite agregar corchetes al mezclar AND y OR en una cláusula WHERE. Prueba esto:
$this->db->select(''id,level,email,username'');
$this->db->where("(email = ''$user'' OR username = ''$user'')
AND password = ''$pass''");
$query = $this->db->get(''users'');
Estoy usando Active Record en CodeIgniter. Estoy confundido sobre qué enfoque debo tomar. Actualmente, nuestro sistema de inicio de sesión permite que el usuario use el nombre de usuario / correo electrónico para el inicio de sesión junto con la contraseña. Pero mi registro activo actual parece permitir que el usuario inicie sesión si elige usar el correo electrónico + sin contraseña.
En este momento esta es mi consulta:
$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;
Entradas de muestra:
- Nombre de usuario: prueba | Contraseña: pase | Resultado: éxito
- Nombre de usuario: prueba | Contraseña: vacía | Resultado: Fallido
- Nombre de usuario: [email protected] | Contraseña: pase | Resultado: éxito
- Nombre de usuario: [email protected] | Contraseña: vacía | Resultado: éxito
La cuarta entrada de prueba debe tener un resultado fallido , pero parece que registra al usuario incluso si la contraseña está vacía.
@RidIculous tiene razón. Esta es una forma correcta de hacerlo:
$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'');
O un formato que prefiero (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'');
$conditions = ''(`username`="''.$username.''" OR `email`="''.$email.'' OR `mobile`="''.$mobile.''"'') AND `password`="''.$password.''"'';
$query = $this->db->get_where(''table_name'', $conditions);
$result = $query->result();