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');
}
}
}
?>
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();
}
}
?>
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();?>
Código PHP:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
Logueado con éxito
</body>
</html>
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>
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.