Necesito que, luego de validar los campos del formulario, compruebe en la base de datos para ver si coinciden con un usuario. Si coincide se logea, si no, muestra un mensaje de error en el formulario. O sea mostrar el error de la validación como hago normalmente con los campos, por ejemplo "echo form_error('campo');".
Mejor muestro mi código, tengo esto en mi controlador:
Código PHP:
function index()
{
$this->form_validation->set_rules('nick', 'Nick', 'trim|required|xss_clean');
$this->form_validation->set_rules('clave', 'Clave', 'trim|required|xss_clean|callback_comprobarUsuarioDB');
$this->form_validation->set_message('required', 'No puedes dejar el campo %s vacío');
$this->form_validation->set_error_delimiters('<div class="error">', '</div>');
if ($this->form_validation->run() == false) {
$data['contenido'] = $this->load->view('vistas/formularios/login', '', true);
$this->load->view('plantilla_base/formularios', $data);
} else {
redirect('inicio');
}
}
function comprobarUsuarioDB()
{
$nick = $this->input->post('nick');
$clave = $this->input->post('clave');
$result = $this->usuarios_model->login($nick, $clave);
if ($result) {
$sess_array = array(
'usuario_id' => $result->id_usuario,
'usuario_nick' => $result->usuario_nick,
);
$this->session->set_userdata('logged', $sess_array);
return true;
} else {
$this->form_validation->set_message('comprobarUsuarioDB', 'Nick o clave incorrecta');
return false;
}
}
El problema es que esta validación la hace con el campo de la clave/contraseña. Yo necesito que valide el campo del nick, valide el campo de la contraseña, y luego compruebe si los datos coinciden con un usuario de la base de datos, se entiende?
Ya revisé el manual de Codeigniter, vi ejemplos de validaciones, tutoriales, y todavía no encuentro la forma de hacer exactamente lo que necesito. Agradecería si me pueden dar una mano.
EDITO:
Encontré una solución improvisada: crear un input invisible (hidden) y validar el usuario en la base de datos a través de ese campo. En la vista, si los campos "nick" y "clave" superaron la validación, luego comprueba y muestra el error en caso de que no se haya encontrado al usuario en la base de datos.
Para que se entienda mejor, añadí un input hidden en mi formulario, hice estos cambios en mi controlador:
Código PHP:
$this->form_validation->set_rules('nick', 'Nick', 'trim|required|xss_clean');
$this->form_validation->set_rules('clave', 'Clave', 'trim|required|xss_clean');
$this->form_validation->set_rules('campo_hidden', '', 'callback_comprobarUsuarioDB');
Código PHP:
<form id="login_form" action="<?php echo base_url() ?>login" method="POST" class="form-style-1">
<?php echo form_error('nick'); ?>
<label for="nick">Nick:</label>
<input type="text" name="nick" value="<?php echo set_value('nick'); ?>" class="input-text-style-1" id="nick">
<?php echo form_error('clave'); ?>
<label for="clave">Clave:</label>
<input type="password" name="clave" value="<?php echo set_value('clave'); ?>" id="clave" class="input-text-style-1">
<?php if (! form_error('nick') && ! form_error('clave')): echo form_error('campo_hidden'); endif; ?>
<input type="hidden" name="campo_hidden" value="0">
<input type="submit" value="Login">
</form>