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

Problema pantalla de login

Estas en el tema de Problema pantalla de login en el foro de CodeIgniter en Foros del Web. Hola a tod@s. Soy nuevo en el uso de este framework y estoy implementando una pantalla de login y no consigo que funcione. Uso los ...
  #1 (permalink)  
Antiguo 24/02/2013, 14:29
Avatar de aalleexx81  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 15 años
Puntos: 0
Problema pantalla de login

Hola a tod@s.

Soy nuevo en el uso de este framework y estoy implementando una pantalla de login y no consigo que funcione.

Uso los siguientes ficheros:

controlador: login.php
Código PHP:
<?php

class Login extends CI_Controller
{
  
    public function 
__construct()
    {
        
parent:: __construct();
        
$this->load->model('login_model');
        
$this->load->helper('form');
        
$this->load->library('form_validation');
        
$this->load->library('session');
    }
   
    public function 
index()
    {
        echo 
'USERNAME = '.$_POST['username'].' ';
        echo 
'PASSWORD = '.$_POST['password'];
        
        if(!isset(
$_POST['username']))
        {
            
$this->load->view('login/index'); //si no recibimos datos por post, cargamos la vista del formulario
        
}
        else
        {
        
//definimos las reglas de validación
       
            
$this->form_validation->set_rules('username','Usuario','required|min_lenght[5]|max_lenght[20]');
            
$this->form_validation->set_rules('password','Password','required');
       
            if(
$this->form_validation->run() == FALSE//si no supera las reglas de validación se recarga la vista del formulario
            
{
                
$this->load->view('login/index');
            }
            else
            {
                   
$isValidLogin $this->login_model->getLogin($_POST['username'],$_POST['password']); //pasamos los valores al modelo para que compruebe si existe el usuario con ese password
           
                
if($isValidLogin)
                {
                
// si existe el usuario, registramos las variables de sesión y abrimos la página de exito
               
                    
$sesion_data = array(
                                    
'username' => $_POST['username'],
                                    
'password' => $_POST['password']
                                        );
                    
$this->session->set_userdata($sesion_data);
               
                    
$data['username'] = $this->session->userdata['username'];
                    
$data['password'] = $this->session->userdata['password'];
                   
                    
$this->load->view('login/login_success',$data);
                }
                else
                {
                
// si es erroneo, devolvemos un mensaje de error
                
$this->load->view('login/login_error');
                }
            }
       
       
        }
       
    }
    
    public function 
data()
    {
        if(
$this->session->userdata['username'] == TRUE)
        {
            echo 
$this->session->userdata['username'];
            echo 
"<br>";
            echo 
$this->session->userdata['password'];
        }
    }
    
    public function 
destroy()
    {
        
//destruimos la sesión
            
$this->login_model->close();
 
        echo 
"Sesión borrada"."<br>";
    }
    
    public function 
perfil()
    {
        
//pagina restringida a usuarios registrados.
        
$logged $this->login_model->isLogged();
       
        if(
$logged == TRUE)
        {
            echo 
"Tienes permiso para ver el contenido privado";
        }
        else
        {
            
//si no tiene permiso, abrimos el formulario para loguearse
               
$this->load->view('login/index');
        }
    }
}
?>
modelo: login_model.php
Código PHP:
<?php

    
class Login_model extends CI_Model
    
{
     
        public function 
__construct()
        {
            
$this->load->library('session');
            
$this->load->database();
        }
       
       
        public function 
getLogin($username,$password)
        {
            
//comprobamos que el nombre de usuario y contraseña coinciden
            
$data = array(
                
'username' => $username,
                
'password' => $password
            
);
       
            
$query $this->db->get_where('usuarios',$data);
            
            return 
$query->result_array();
        }
       
       
        public function 
isLogged()
        {
        
//Comprobamos si existe la variable de sesión username. En caso de no existir, le impediremos el paso a la página para usuarios registrados
       
            
if(isset($this->session->userdata['username']))
            {
                return 
TRUE;
            }
            else
            {
                return 
FALSE;
            }
           
        }
       
       
       
        public function 
close()
        {
            
//cerrar sesión
            
return $this->session->sess_destroy();
        }
    }
?>
vista index: index.php
Código PHP:
<?php echo validation_errors(); ?>
<? 
echo form_open('login/index');?>
<label>Usuario</label><br>
<input type="text" id="username" name="username"><br><br>
<label>Password</label><br>
<input type="password" id="password" name="password">
<br><br>
<input type="submit" value="Enviar">
<? echo form_close();?>
vista éxito: login_success.php
Código PHP:
<!DOCTYPE html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</
head>
     
<
body>
Logueado con éxito
</body>
</
html
vista error: login_error.php
Código PHP:
<!DOCTYPE html>
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</
head>
     
<
body>
Error en el inicio de sesión
</body>
</
html
El problema es que al visualizar el index me aparece los siguiente:


A PHP Error was encountered

Severity: Notice

Message: Undefined index: username

Filename: controllers/login.php

Line Number: 17
USERNAME =
A PHP Error was encountered

Severity: Notice

Message: Undefined index: password

Filename: controllers/login.php

Line Number: 18
PASSWORD =

y a continuación el formulario.

Los ficheros de las vistas están dentro de una carpeta llamada login y las rutas que he configurado en el fichero routes.php son las siguientes:

Código PHP:
//Rutas login
$route['login/login_error'] = 'login/login_error';
$route['login/login_success'] = 'login/login_success';
$route['login'] = 'login'

¿Alguién puede echarme una mano please?

Muchas gracias de antemano.

Un cordial saludo a tod@s.

Última edición por aalleexx81; 24/02/2013 a las 14:34
  #2 (permalink)  
Antiguo 01/03/2013, 14:58
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años, 6 meses
Puntos: 34
Respuesta: Problema pantalla de login

para que funcione la validacion de formulario tenes que usar form_validation() + set_value(). Si haces $this->input->post() te estas saltando la validacion y menos $_POST !!! Haciendo $_POST te salteas toda la validacion DEL FRAMEWORK!.

el error está en:
Código PHP:
Ver original
  1. echo 'USERNAME = '.$_POST['username'].' ';
  2.         echo 'PASSWORD = '.$_POST['password'];

esos datos a veces llegan y a veces no, si no completo el form, no existen por eso te sale el warning
  #3 (permalink)  
Antiguo 01/03/2013, 15:00
Avatar de patriciomase  
Fecha de Ingreso: abril-2012
Ubicación: Mar del Plata
Mensajes: 323
Antigüedad: 12 años, 6 meses
Puntos: 34
Respuesta: Problema pantalla de login

Te recomiendo www.formigniter.org

Te genera los forms automaticamente, y solo hay que retocar algunas cosas. Generá uno y fijate como trabajan form_validation() y set_value() para traer los datos y pasar la validación
  #4 (permalink)  
Antiguo 03/03/2013, 06:52
Avatar de aalleexx81  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 15 años
Puntos: 0
Pregunta Respuesta: Problema pantalla de login

Gracias por tu respuesta, pero sigo sin enternder.

Ya sé que el warning ocurre porque las variables no son enviadas, pero lo que no entiendo es por qué el botón "Enviar" no funciona.

Me comentas que no se produce el envío porque el formulario no está completo. He probado con formigniter y he visto que en el código que uso no incluye la función setvalue.

Estoy confundido y no sé exactamente dónde tendría que incluir dicha función.

¿en el controlador, detrás de las líneas siguientes?

Código PHP:
$this->form_validation->set_rules('username','Usuario','required|min_lenght[5]|max_lenght[20]');
            
$this->form_validation->set_rules('password','Password','required'); 

data = array(
                               
'username' => set_value('username'),
                               
'password' => set_value('password')
                        ); 
  #5 (permalink)  
Antiguo 03/03/2013, 09:45
 
Fecha de Ingreso: enero-2004
Ubicación: here I Am
Mensajes: 437
Antigüedad: 20 años, 10 meses
Puntos: 1
Respuesta: Problema pantalla de login

Buenas , este mismo ejemplo lo he sacado yo de una web de ejemplos... y tampoco consigo que funciona.

Lo consigueste hacer funcionar ?

Gracias
__________________
Nuevo foro sobr el mundo del motor - Renault foro
http://www.renaultforo.com
  #6 (permalink)  
Antiguo 04/03/2013, 05:30
Avatar de aalleexx81  
Fecha de Ingreso: noviembre-2009
Mensajes: 153
Antigüedad: 15 años
Puntos: 0
SOLUCIONADO:: Respuesta: Problema pantalla de login

No he conseguido que funcione el código anterior, pero gracias a la web de David Rojas y un poco de paciencia he conseguido crear un código que realiza la validación de un mail y una contraseña introducidos en un formulario.

Para conseguir que funcione, debéis crear una tabla usuario, con los campos mail y password.

A continuación muestro el código de los diferentes ficheros:

Controlador formulario.php

Código PHP:
class Formulario extends CI_Controller {

   public function 
__construct(){
        
        
parent:: __construct();        
        
$this->load->helper(array('url''form'));
        
$this->load->library('form_validation');
        
$this->load->model('Formulario_model');
   } 

   function 
index()
   {
      
//establezco las reglas de validación 
      
$this->form_validation->set_rules('email''EMail''required|valid_email|max_length[50]');            
      
$this->form_validation->set_rules('password''Password''required|max_length[20]');
      
      
//Si no supera las reglas de validación se recarga la vista inciail del formulario
      
if($this->form_validation->run() == FALSE){ 
            
          
$this->load->view('formulario_login/vista_formulario');
      }
      else{
         
//Si la validación es correcta , recogemos los datos y procedeermos a la validación mediante el código insertado en el modelo 
         
$data['email'] = $this->input->post('email');
         
$data['password'] = $this->input->post('password');         
         
/*otra posible opción para enviar los datos recibidos mediante el formulario sería:
           $data['email'] = $_POST['email'];
           $data['password'] = $_POST['password'];*/
         
         
$numrows $this->Formulario_model->ValidarUsuario($this->input->post('email'), $this->input->post('password'));
         
//otra opción sería: $numrows = $this->Formulario_model->ValidarUsuario($_POST['email'], $_POST['password']);
         
         
if(!$numrows){//si el número de filas devueltas en la consulta es 0
             
$this->load->view('formulario_login/vista_formulario_error');
         }
         else{
              
$this->load->view('formulario_login/vista_formulario_exito'$data); 
         }
      }
      
      
   }

Modelo: vista_formulario

Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario Login</title>
</head>

<body>

<?php 
echo validation_errors();//muestra los errores al enviar los datos del formulario
echo form_open('formulario'); 
echo 
form_label('Usuario','email');
echo 
form_input(array('name' => 'email''id' => 'email''size' => '50''value' => set_value('email')));
echo 
form_label('Password','password');
echo 
form_password(array('name' => 'password''id' => 'password''size' => '20''value' => set_value('password')));
echo 
form_submit('enviar','Enviar');
echo 
form_close();
?>
</body>
</html>
¡Las tres vistas están dentro de la carpeta formulario_login, fíjense en que la ruta lo indica!

Vista del formulario: vista_formulario.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario Login</title>
</head>

<body>

<?php 
echo validation_errors();//muestra los errores al enviar los datos del formulario
echo form_open('formulario'); 
echo 
form_label('Usuario','email');
echo 
form_input(array('name' => 'email''id' => 'email''size' => '50''value' => set_value('email')));
echo 
form_label('Password','password');
echo 
form_password(array('name' => 'password''id' => 'password''size' => '20''value' => set_value('password')));
echo 
form_submit('enviar','Enviar');
echo 
form_close();
?>
</body>
</html>
Vista Éxito: vista_formulario_exito.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<h1>"Welcome home <?php echo $email ?>!!!"</h1> 
<?php
echo "Usuario: ".$email."<br>";
echo 
"Password: ".$password['password']."<br>";

echo 
anchor('formulario''Volver al formulario');?>
</body>
</html>
Vista Error: vista_formulario_error.php
Código PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Vista Login Error</title>
</head>

<body>

<h1>ERROR al insertar el usuario o la password!!!</h1> 
<?php echo anchor('formulario''Volver al formulario');?>
</body>
</html>
Espero que os sirva de ayuda.

Muchas gracias y un cordial saludo a tod@s.


Última edición por aalleexx81; 04/03/2013 a las 20:27

Etiquetas: login, pantalla
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 13:12.