Foros del Web » Programando para Internet » PHP » CodeIgniter »

Validar login en la base de datos

Estas en el tema de Validar login en la base de datos en el foro de CodeIgniter en Foros del Web. Buenas, necesito validar un formulario de login pero tengo un problema al validar los datos del usuario en la base de datos. Necesito que, luego ...
  #1 (permalink)  
Antiguo 26/05/2014, 12:21
aprendiz94
Invitado
 
Mensajes: n/a
Puntos:
Validar login en la base de datos

Buenas, necesito validar un formulario de login pero tengo un problema al validar los datos del usuario en la base de datos.
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;
    }

Como pueden ver, se validan los campos "nick" y "clave". Al validar la clave/contraseña, llama a un método (comprobarUsuarioDB) para comprobar en la base de datos si el nick y la contraseña coinciden con un usuario.
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'); 
Y mi vista quedó más o menos así:

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>
Pero si alguien tiene una solución mejor estaría muy agradecido, no me parece muy correcta la solución que encontré.

Última edición por aprendiz94; 26/05/2014 a las 13:19

Etiquetas: login
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:41.