Foros del Web » Programando para Internet » PHP »

Problema con un GET y algo raro

Estas en el tema de Problema con un GET y algo raro en el foro de PHP en Foros del Web. Código PHP: // <? $lang  = (isset( $_GET [ 'lang' ])) ?  $_GET [ 'lang' ] : (!empty( $_COOKIE [ 'sLANG' ])) ?  $_COOKIE [ 'sLANG' ] : (!empty( $SETTINGS [ 'SITELANG' ...
  #1 (permalink)  
Antiguo 14/05/2006, 12:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Problema con un GET y algo raro

Código PHP:
//<?

$lang 
= (isset($_GET['lang'])) ? $_GET['lang'] : (!empty($_COOKIE['sLANG'])) ? $_COOKIE['sLANG'] : (!empty($SETTINGS['SITELANG'])) ? $SETTINGS['SITELANG'] : 'sp';

die(
$lang);
Bueno el asunto es este. Uso el codigo anterior para definir el idioma en el que los visitantes podran ver la web. COmo ven le doy prioridad a un $_GET['lang']. Si esta definido, entonces se tomara ese como idioma base. Si no lo esta verifico si existe una cookie con info sobre el idioma. SI existe la cookie, el valor que trae es el escogido, sino recurro a la BD, cuyos valores estan en la variable $SETTINGS. Si la base de Datos esta vacia o no hay un valor para idioma, entonces defino como default el idioma sp

El problema es este. No tengo conexion a la BD, ni cookies, ni nada, asi que el default me lo coloca en sp, ahi esta bien, luego si llamo a la pagina como pagina.php?lang=cualquiera, en vez de mostrarme como idioma la palabra cualquiera me muestra sp...

que puede estar mal??

gracias
  #2 (permalink)  
Antiguo 14/05/2006, 14:12
Avatar de ProgramadorMax  
Fecha de Ingreso: diciembre-2003
Ubicación: Ciudad de Mexico.
Mensajes: 47
Antigüedad: 20 años, 4 meses
Puntos: 0
Mensaje

Bueno segun me parece, este script es una funcion o deberia ser una funcion, ya que die() finaliza el script que se esta ejecutando.

Por lo general,la funcion die() es muy poco usadada para enviar mensajes y tratar contenidos de $_POST,$_GET y $_COOKIE (Probablemente aqui este el error). Y se utiliza solo para enviar o regresar errores de consulta o de conexion a base de datos.

Existen muchas formas de regresar mensajes, ya sea simplemente con un echo() o imprimir un return() de una funcion.

Aqui defino los parentesis en forma correcta para el condicional terciario, y segun lo que veo la variable $_GET['lang'], pasa directo, si esta definida, cosa que me extraña, ya que primero deberias establecer que si existe, empezar a procesar la variable para dar un resultado. Si simplemente es una prueba, para ver que te regresa tu navegador, pues ni idea de lo que intentas.

Código PHP:
<?
$lang 
= (isset($_GET['lang'])) ? $_GET['lang'] :
(!empty(
$_COOKIE['sLANG'])) ? $_COOKIE['sLANG'] : 
(!empty(
$SETTINGS['SITELANG'])) ? $SETTINGS['SITELANG'] : 'sp')));

die(
$lang);Esta funcion procesa los contenidos de $_GET,$_COOKIE,$SETTINGSQue resultado regresa $SETTINGS...
?>
Existen funciones en php, que te dicen que lenguaje esta utilizando el usuario en su explorador.

$_SERVER['HTTP_ACCEPT_LANGUAGE']// por ejemplo esta...

Como no se si destruyes tus cookies o si finalisas o destruyes la variable $SETTINGS, es muy dificil saber por que te regresa ese resultado.

Podria ser que hasta el charset=iso de tu pagina no esta bien definido o falta, o tu navegador no esta bien configurado, etc.

Saludos
__________________
Tonto es aquel que tiene el conocimiento y no sabe como usarlo...
Solo destripando creo mostruos de soluciones.
  #3 (permalink)  
Antiguo 14/05/2006, 18:20
okram
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por ProgramadorMax
Bueno segun me parece, este script es una funcion o deberia ser una funcion, ya que die() finaliza el script que se esta ejecutando.
En realidad no es una funcion ni nada de eso. EL die simplemente lo coloque para ver que resultado me mandaba el trozo de codigo, obviamente no es parte del script.

Cita:
Iniciado por ProgramadorMax
Aqui defino los parentesis en forma correcta para el condicional terciario, y segun lo que veo la variable $_GET['lang'], pasa directo, si esta definida, cosa que me extraña, ya que primero deberias establecer que si existe, empezar a procesar la variable para dar un resultado. Si simplemente es una prueba, para ver que te regresa tu navegador, pues ni idea de lo que intentas.
EL hecho esta en que primero recogere el valor que me paso en la variable $_GET['lang'] (cualquiera que sea, obviamente, pare evitar algun codigo malicioso, primero verificare que sean solo letras y la longitud sea de 2 caracteres)... una vez que haya definido el contenido de la variable $lang, recien pasare a procesarlo, y si no coincide con ningun idioma preexistente, entonces este sera reemplazado por un default, que en este caso es sp. La validacion la hago luego, ya que sino tendria que validar primero los datos de la BD, luego los del GET, luego los de la cookie, y me parece que el script seria mas pesado.

Cita:
Iniciado por ProgramadorMax
Código PHP:
<?
$lang 
= (isset($_GET['lang'])) ? $_GET['lang'] :
(!empty(
$_COOKIE['sLANG'])) ? $_COOKIE['sLANG'] : 
(!empty(
$SETTINGS['SITELANG'])) ? $SETTINGS['SITELANG'] : 'sp')));

die(
$lang);Esta funcion procesa los contenidos de $_GET,$_COOKIE,$SETTINGSQue resultado regresa $SETTINGS...
?>
EL arreglo de los parentesis que aqui me planteas no esta del todo bien, ya que los ultimos 3 parentesis estan en el aire. EL codigo mas seria asi:
$lang = (isset($_GET['lang'])) ? $_GET['lang'] : ((!empty($_COOKIE['sLANG'])) ? $_COOKIE['sLANG'] : ((!empty($SETTINGS['SITELANG'])) ? $SETTINGS['SITELANG'] : 'sp'));
$SETTINGS, como ya te dije, me guarda los datos de configuracion que extraigo de la BD. Es un array del tipo $SETTINGS['item'] = valor. Por eso, en este array debe haber un elemento lang que tenga definido un idioma por defecto. En caso de que por alguna razon se encuentre vacio, simplemente lo ignoro y paso a definir el español como default

Pero gracias por tu ayuda
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:44.