[ Foro de PHP ]
Soy nuevo en este tema de la programación en PHP y MySQL y tengo un problema.
Tengo varios usuarios ( 16 ) y necesito que cada uno este direccionado a una página específica, quiere decir para cada usuario va a una página diferente.
Las paginas ya las tengo diseñadas, No me da ningún error de código, el problema es que cada vez que accedo con un usuario diferente me abre la misma página.
Este es el codigo:
<?php
include_once 'database.php';
session_start();
if(isset($_GET['cerrar_sesion'])){
session_unset();
// destroy the session
session_destroy();
}
if(isset($_SESSION['rol'])){
switch($_SESSION['rol']){
case 1:
header('location: admin.php');
break;
case 2:
header('location: consultor.php');
break;
case 3:
header('location: 209.php');
break;
case 4:
header('location: 308.php');
break;
case 5:
header('location: 312.php');
break;
case 6:
header('location: 322.php');
break;
case 7:
header('location: 337.php');
break;
case 8:
header('location: 339.php');
break;
case 9:
header('location: 366.php');
break;
case 10:
header('location: 399.php');
break;
case 11:
header('location: 583.php');
break;
case 12:
header('location: 611.php');
break;
case 13:
header('location: 614.php');
break;
case 14:
header('location: 792.php');
break;
case 15:
header('location: 798.php');
break;
case 16:
header('location: 981.php');
break;
default:
}
}
if(isset($_POST['username']) && isset($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$db = new Database();
$query = $db->connect()->prepare('SELECT * FROM usuarios WHERE username = $username AND password = $password');
$query->execute(['username' => $username, 'password' => $password]);
$row = $query->fetch(PDO::FETCH_NUM);
if($row == true){
$rol = $row[3];
$_SESSION['rol'] = $rol;
switch($rol){
case 1:
header('location: admin.php');
break;
case 2:
header('location: consultor.php');
break;
case 3:
header('location: 209.php');
break;
case 4:
header('location: 308.php');
break;
case 5:
header('location: 312.php');
break;
case 6:
header('location: 322.php');
break;
case 7:
header('location: 337.php');
break;
case 8:
header('location: 339.php');
break;
case 9:
header('location: 366.php');
break;
case 10:
header('location: 399.php');
break;
case 11:
header('location: 583.php');
break;
case 12:
header('location: 611.php');
break;
case 13:
header('location: 614.php');
break;
case 14:
header('location: 792.php');
break;
case 15:
header('location: 798.php');
break;
case 16:
header('location: 981.php');
break;
default:
}
}else{
// no existe el usuario
echo "Nombre de usuario o contraseña incorrecto";
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF8_MB4">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Login</title>
</head>
<body>
<form action="#" method="POST">
Username: <br/><input type="text" name="username"><br/>
Password: <br/><input type="text" name="password"><br/>
<input type="submit" value="Iniciar sesión">
</form>
</body>
</html>
Lo habitual es que, a partir de los datos de login, conectes a la base de datos, para ver si ese usuario existe y si su contraseña es correcta.
Pues lo razonable es que la página a la que se deba saltar para cada usuario sea un campo más de esa misma tabla de la base de datos, en vez de estar prefijado en código. Si aun así, lo quieres dejar prefijado, la lógica se acerca mucho, pero el "session_start();" debería ser lo primerísimo de tu fuente, antes de los "include". Puedes comprobar lo que ocurre, mostrando variables aunque sea con un "echo", y verás que es probable que no te esté tomando esas variables de sesión.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)