Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Problema con $_SESSION (https://www.clubdelphi.com/foros/showthread.php?t=32426)

javila 06-06-2006 01:36:28

Problema con $_SESSION
 
Hola, tengo un pequñito problema que llevo todo el día intentando solucionarlo pero no hay forma. Os explico.

Tengo por un lado este trozo de fichero que recibe datos de un formulario, entonces en caso de que el usuario tenga uno de los roles definifos, nos cargará a la página index.php.

Código PHP:

if ($correcto) {
$sql_sesion "SELECT login, rol_user, password FROM usuario WHERE login='$usuario' AND password='$password' "
$inicio_sesion pg_query($conexion$sql_sesion);
if(
$row pg_fetch_array($inicio_sesion)){
session_start();
$_SESSION['iniciosesion'] = TRUE;
$_SESSION['login'] = $usuario;
$_SESSION['password'] = $password;
$_SESSION['rol_user'] = $row["rol_user"];
switch(
$_SESSION['rol_user']){
case 
Cliente:
$_SESSION['cabeza']="cabeza_cliente.php";
header("Location: index.php");
break;
case 
Hostelero:
$_SESSION['cabeza']="cabeza_hostelero.php";
header("Location: index.php");
break;
case 
Administrador:
$_SESSION['cabeza'] = "cabeza_admin.php";
header("Location: index.php"); 
break;


y en la primera linea del index.php incluimos este otro fichero:

Código PHP:

<? 
session_start
();
//Elige que cabeza cargar
if($_SESSION['iniciosesion']){ require_once ($_SESSION['cabeza']); echo "intento";}
else{ require_once (
'cabeza.php'); echo "no puedo";}
?>

Mi problema viene al ejecutarlo. Me aparece un error muy bonito al cargar index.php, que no se donde proviene.


Código:

Fatal error: main(): Failed opening required '' (include_path='.:/usr/share/php:/usr/share/pear') in /home/al064993/public_html/EligeCabeza.php on line 4
Muchas gracias por adelantado

dec 06-06-2006 02:09:14

Hola,

De momento sólo se me ocurre decir que el error parece claro: no existe el archivo que se trata de incluir, esto es, no existe en la ruta que se indica. A ver por qué razón esa ruta lleva a otro sitio...

kayetano 06-06-2006 08:59:44

Hola

Peor aun yo diría que en $_SESSION['cabeza'] no hay ningún contenido, si te fijas el error es
Código:

Failed opening required ''
entre las comillas debería aparecer el nombre del archivo que intenta abrir y como se ve no hay nada.

Una duda ¿en $_SESSION['rol_user'] guardas una cadena de texto? lo digo porque lo comparas con, en teoría, constantes
Código:

case Cliente:

javila 06-06-2006 09:47:25

Mi duda es ahora, como lo cambio? Esque no lo tengo muy claro...
¿Poniendo las comillas?

kayetano 06-06-2006 09:54:28

Hola

Prueba con esto
Código PHP:

switch($_SESSION['rol_user']){
case 
"Cliente":
$_SESSION['cabeza']="cabeza_cliente.php";
header("Location: index.php");
break;
case 
"Hostelero":
$_SESSION['cabeza']="cabeza_hostelero.php";
header("Location: index.php");
break;
case 
"Administrador":
$_SESSION['cabeza'] = "cabeza_admin.php";
header("Location: index.php"); 
break;


Si en $_SESSION['rol_user'] guardas una cadena de texto, simplemente tienes que entrecomillar los valores del "case".
Ten en cuenta las mayusculas y las minusculas.

También te aconsejo que despues de un "header('Location ...')" pongas la sentencia "exit()". (manias mias)

javila 06-06-2006 10:15:26

Vale, muchas gracias. Ahora estoy en el trabajo y no puedo comprobarlo. A medio día lo pruebo y ya os comento los resultados.

Gracias

javila 06-06-2006 15:37:19

Bueno, el error era mucho más simple. Después de pasarme ayer todas la tarde y la noche intentando solucionar el error, ahora he descubierto que si, el fallo era que no entraba al bucle, pero no hacian falta las comillas, sino que administrador, cliente y hostelero eran en minuscula y no en mayúscula. Ahora todo funciona perfectamente.

Muchas gracias por todo

kayetano 06-06-2006 15:51:17

Hola

Y dices que no le pones comillas, yo te aconsejo que utilices comillas para las comparaciones entre cadenas de caracteres. Si no utilizas comillas estas comparando con una constante que no has definido pero que, segun el manual de PHP toma el como valor el propio nombre de la constante
Cita:

Si usas una constante todavia no definida, PHP asume que estás refiriéndote al nombre de la constante en si. Se lanzará un aviso si esto sucede. Usa la función defined() para comprobar la existencia de dicha constante.
Esto puede causar problemas, por ejemplo si en un momento determinado defines una constante con el mismo nombre y diferente valor o peor aun si los desarrolladores de PHP deciden cambiar el funcionamiento de las constantes.

Y lo mas peor de lo peor, estas haciendo algo que no es correcto pero que como te ha funcionado (por pura churra) pues lo dejas como está, pero seguro que no tenías ni idea de que estabas haciendo una comparación con constantes.

Te aconsejo que hagas las cosas como Dios manda, en resumen, las cadenas de texto llevan comillas.

javila 06-06-2006 16:35:33

Hola de nuevo. Es que, resulta que si las uso las comillas, no me entra dentro del case. Por eso las he tenido que volver a quitar.

kayetano 06-06-2006 17:05:25

Hola

Pues simplemente estas tapando un error en alguna parte de tu código con otro error. Yo no puedo hacer mas que aconsejarte tu eres el que decide finalmente.


La franja horaria es GMT +2. Ahora son las 15:00:03.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi