Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Problema con parámetros o sesiones

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

Código:
  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
Código:
<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
Código:
<?
  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
Responder Con Cita
  #2  
Antiguo 16-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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 ]?
Responder Con Cita
  #3  
Antiguo 16-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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)
así que tenemos el index.php y idioma.php (donde sólo está el switch

Cita:
roman comentó:
pd: ¿Conoces la etiqueta [ php ]?
Esto.... no me acordé
Responder Con Cita
  #4  
Antiguo 17-11-2003
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 17-11-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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:

Código PHP:
if (!session_is_registered('lan'))
{
  
$lan 'esp';
  
session_register('lan');

// Saludos
Responder Con Cita
  #6  
Antiguo 17-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
buuuaaaa!!!!!
jejejeje, bueno, veamos, lo tengo ahora así

index.php
Código 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)
Código PHP:
<?
  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
Responder Con Cita
  #7  
Antiguo 17-11-2003
Avatar de Emilio
*Emilio* Emilio is offline
Capo
 
Registrado: may 2003
Ubicación: Palma de Mallorca
Posts: 2.635
Poder: 10
Emilio Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 17-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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)

Cita:
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 )
Responder Con Cita
  #9  
Antiguo 17-11-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Cita:
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

Gracias y perdón por las molestias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 12:35:19.


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
Copyright 1996-2007 Club Delphi