PDA

Ver la Versión Completa : Problema con parámetros o sesiones


__cadetill
16-11-2003, 20:05:37
Hola compañeros

Pues la verdad es que no se de donde biene mi problema, si de las sesiones o del paso de parámetros, pero es que no me sale :(

Os cuento. Estoy haciendo una web multiidioma y, desde unas banderitas el usuario podrá escoger el idioma de la web. Bien, pues para hacer esto, he pensado utilizar sesiones y, me declaro la siguiente


session_start();
if ( !isset( $lan ) || ( $lan == '') )
$lan = 'esp';
session_register( "lan" );

Osea, pretendo iniciar la sesión, comprobar que la variable lan (que es la que me dice el idioma) exista y si no inicializarla y luego, registrar dicha variable.

El enlace de las banderitas hago lo siguiente

<a href="php_code/idioma.php?lang=0">
<img src="images/esp.gif" border="0" alt=" Español ">
</a>

Osea, llamo a un php que contiene lo siguiente

<?
switch ( $lang ) {
case 0 : $lan = 'esp'; break;
case 1 : $lan = 'cat'; break;
case 2 : $lan = 'fra'; break;
case 3 : $lan = 'ing'; break;
}
session_start();
session_register( "lan" );
header( "Location: ../index.php" );
?>

Dependiendo del parámetro, inicializamos la variable lan y luego la registro.

Pues bien, resulta que si voy chequeando las dos variables (lang y lan) a lo largo del recorrido, estas siempre valen lo mismo, el valor por defecto que le asigno al principio (es decir, "esp").

Lo extraño es que "lang" me valga ese valor (cuando se esta pasando como parámetro un 0, 1, 2, o 3 según el idioma), por lo que no se me actualiza nunca el valor de "lan" para cambiar el idioma.

Alguien ve donde estoy errando?

Gracias y perdón por el rollo

roman
16-11-2003, 20:54:48
Es difícil decir ya que no se qué código está en qué página. Mientras nos cuentas lo único que pregunto es:

¿Usas session_start() en todas las páginas? Si no es así, te recuerdo que hay que hacerlo.

// Saludos

pd: ¿Conoces la etiqueta [ php ]? :p

__cadetill
16-11-2003, 23:12:38
roman comentó:
Es difícil decir ya que no se qué código está en qué página. Mientras nos cuentas lo único que pregunto es:

¿Usas session_start() en todas las páginas? Si no es así, te recuerdo que hay que hacerlo.

bueno, solo estoy jugando con una pagina (la inicial) :p
así que tenemos el index.php y idioma.php (donde sólo está el switch

roman comentó:
pd: ¿Conoces la etiqueta [ php ]? :p
Esto.... no me acordé :D

Emilio
17-11-2003, 15:50:24
Hola

Me temo que se te estás haciendo un lío con las variables de sesión y las pasadas por POST

Dicho de paso, ten en cuenta que el switch puede evaluar cadenas, por lo que no es necesario que hagas cosas como case 0 : $lan = 'esp'; como si de Delphi se tratase.

Esta noche le pego un vistazo y lo solucionamos, que ahora tengo prisa.

Saludos
Emilio.

roman
17-11-2003, 17:51:39
Vamos a ver. Creo que el problema está en que en la página del "switch" llamas a session_start después del switch. session_start debe llamarse antes de utilizar cualquier variable registrada.

Por otra parte en la página de inicio me parece que debes revisar la condición con session_is_registered en lugar de isset y, para mi gusto, omitir la comparación con la cadena vacía así como encajar el registro dentro del condicional:


if (!session_is_registered('lan'))
{
$lan = 'esp';
session_register('lan');
}


// Saludos

__cadetill
17-11-2003, 19:37:52
buuuaaaa!!!!!
jejejeje, bueno, veamos, lo tengo ahora así

index.php

<?
...... // -> hago unos require_once

session_start();
if ( !session_is_registered( 'lan' ) ) {
$lan = 'esp';
session_register( "lan" );
}
?>
<html>
......
<body>
.....
<a href="php_code/idioma.php?lang=ing">
<img src="images/ing.gif" border="0" alt=" English ">
</a>
.....
</body>


idioma.php (los echos son para el testeo de los valores de las variables)

<?
session_start();
echo 'lang = '.$lang.'<br>';
echo 'lan = '.$lan.'<br>';
$lan = $lang;
echo 'lan = '.$lan.'<br>';
session_register( "lan" );
// header( "Location: ../index.php" );
?>

Pues bien, siempre valen el mismo valor ('esp') tanto lang que se pasa por parámetro como lan y lo que muestra el explorador como URL es

http://127.0.0.1/web/Proves/php_code/idioma.php?lang=cat

por lo que deduzco que se está pasando bien el parámetro pero no se esta recibiendo (o no se recibe bien).

Se me escapa algo, pero no veo el qué :'(

Alguna sugerencia más?

PD: ahora sí he utilizado la etiqueta php :D

Emilio
17-11-2003, 21:25:34
Pues sí, dos sugerencias más

1.- Mira que tu register_globals esté a "on"

2.- Si pasas la variable por GET recógela de igual forma, es decir con $HTTP_GET_VARS["lang"]

Seguramente su register_globals lo tienes a off y de ahí los problemas que te están surgiendo, el del Club lo tengo a on, sube tus ficherillos y seguramente sin tocar nada ya te va a funcionar.

Saludos
Emilio

__cadetill
17-11-2003, 23:05:59
Emilio comentó:
1.- Mira que tu register_globals esté a "on"

esta descartada, está en on (de hecho, otras páginas donde hago lo mismo, me funciona correctamente)

Emilio comentó:
2.- Si pasas la variable por GET recógela de igual forma, es decir con $HTTP_GET_VARS["lang"]

en esto sí que tengo una duda. Si hago el paso de parámetros como indico anteriormente.... que es, GET o POST? (si es que todabía soy un novatillo en esto :D)

__cadetill
17-11-2003, 23:31:52
cadetill comentó:
esta descartada, está en on (de hecho, otras páginas donde
Rectifico, en el ordenador de casa sí me funciona, quizás sea problema de que en el portátil no lo tengo activo, lo verificaré mañana :o

Gracias y perdón por las molestias :D