Foros del Web » Programando para Internet » PHP »

"Notice: Undefined index:" al dar el valor $_GET a variable

Estas en el tema de "Notice: Undefined index:" al dar el valor $_GET a variable en el foro de PHP en Foros del Web. A ver, lo primero presentarme, pues este es mi primer tema en el foro. Estoy desarrollando una web que se traducirá a 3 idiomas. Cada ...
  #1 (permalink)  
Antiguo 06/12/2011, 10:44
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 13 años
Puntos: 2
"Notice: Undefined index:" al dar el valor $_GET a variable

A ver, lo primero presentarme, pues este es mi primer tema en el foro.

Estoy desarrollando una web que se traducirá a 3 idiomas. Cada traducción en un fichero php dentro una subcarpeta de la carpeta lang. (Así, castellano estará en /lang/es/es.php)

La traducción en sí, funciona perfectamente (gracias a lo que he aprendido sobre todo en este foro).

El problema está cuando se entra por primera vez en la web.
Entonces, la variable $lang (que uso para definir el lenguaje) todavía no ha adquirido ningún valor, y esto me genera el siguiente error:

Cita:
Notice: Undefined index: lang in D:\xampp\htdocs\webphp\index.php on line 10

Warning: require(lang//.php) [function.require]: failed to open stream: No such file or directory in D:\xampp\htdocs\webphp\index.php on line 15

Fatal error: require() [function.require]: Failed opening required 'lang//.php' (include_path='.;D:\xampp\php\PEAR') in D:\xampp\htdocs\webphp\index.php on line 15
En cuanto se pasa un valor por GET a la variable todo funciona. Por ejemplo si entro por index.php?lang=en

(Por la ruta ya veis que estoy probando en servidor local utilizando Xampp)

El caso es que le he dado mil vueltas. Y la linea 10 en cuestión

Código PHP:
$lang=$_GET['lang']; 
creo que debe de estar ahí. De lo contrario, cuando se escoja algún idioma y se cargue la página volverá a darle el valor "es" y se mostrará siempre en ese idioma.

El código con el que comienza el index es el siguiente:

Código PHP:
<?php  
    session_start
();  

    
    if(!isset(
$_SESSION['idioma']) || !empty($_GET['lang']))
    {  
        if(empty(
$lang))
        {  
            
$lang="es";
            
$lang=$_GET['lang'];  
        }  
        
$_SESSION['idioma']=$lang;  
    }  
    switch (
$_SESSION['idioma']) {  
    case 
$_SESSION['idioma']: require("lang/".$_SESSION['idioma']."/".$_SESSION['idioma'].".php"); break; }  
?>
Le he dado mil vueltas, he buscado en el foro (y he leído montones de mensajes parecidísimos), he mirado otros foros. Pero sigo sin encontrar 'el cambio' que tengo que hacer.

Obviamente pasa por que $_GET['lang'] tenga un valor cuando aún no se ha recibido ninguno por url. Pero... ¿como?

En fin, que soy consciente de que he llegado a ese punto en el que me he liado de tal forma que seguramente los árboles no me están dejando ver el bosque.
  #2 (permalink)  
Antiguo 06/12/2011, 10:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 8 meses
Puntos: 2534
Respuesta: "Notice: Undefined index:" al dar el valor $_GET a variable

Lee el siguiente tema, ahí se explican las causas del error que mencionas así como posibles soluciones:
http://www.forosdelweb.com/f18/undef...riable-923992/
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 06/12/2011, 11:37
Avatar de jpa
jpa
 
Fecha de Ingreso: diciembre-2011
Ubicación: A Coruña
Mensajes: 10
Antigüedad: 13 años
Puntos: 2
De acuerdo Respuesta: "Notice: Undefined index:" al dar el valor $_GET a variable

Pues muchísimas gracias pateketrueke.

Me ha quedado claro... no... clarísimo.

Te cito en el [URL="http://www.forosdelweb.com/f18/undefined-index-undefined-variable-923992/"]otro hilo[/URL]:

Cita:
...Si en dicha URL no colocamos ningun parametro despues del ? entonces no se definen variables $_GET...
Cita:
La solucion todo el tiempo es predefinir algun valor -en caso de variables definidas manualmente- o bien, asignar un valor por defecto en cualquier otra circunstancia.
Así que siguiendo tus indicaciones he sustituido:

Código PHP:
$lang=$_GET['lang']; 
por:

Código PHP:
$lang = isset($_GET['lang']) ? $_GET['lang'] : "es"
para así asignarle un valor a $_GET['lang'] cuando este todavía no lo tiene definido.

¡Solucionado!

Etiquetas: undefined, variablesphp, variables
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 05:54.