2011-01-30 25 views
40

Esto va a sonar realmente estúpido, pero no puedo entender por qué estoy recibiendo este error.PHP Indefinido Índice

He creado un cuadro de selección, denominado "query_age" en mi formulario HTML:

<form method="get" action="user_list.php"> 
<select name="query_age"> 
    <option value="">Doesn't matter</option> 
    <option value="between 18 and 30">18 - 30</option> 
    <option value="between 31 and 40">31 - 40</option> 
    <option value="between 41 and 50">41 - 50</option> 
    <option value="between 51 and 60">51 - 60</option> 
    <option value="between 61 and 70">61 - 70</option> 
    <option value="between 71 and 80">71 - 80</option> 
    <option value="between 81 and 90">81 - 90</option> 
    <option value="> 90">Older than 90</option> 
</select> 

En la forma php correspondiente, que tienen:

$query_age = $_GET['query_age']; 

Cuando ejecuto la página, me obtener este error:

Notice: Undefined index: query_age in index.php on line 19

no entiendo por qué ocurre esto, y me gustaría saber cómo hacer que se vaya aw sí.

+2

¿Qué muestra 'print_r ($ _ GET)'? ¿Hay otros valores de forma allí? ¿Por qué no usas POST? –

+0

¿De qué manera la _forma correspondiente de php_ corresponde al formulario HTML? ¿Genera el formulario HTML? ¿Procesa los valores que se envían a través del formulario HTML? ¿Tiene el mismo nombre base con una extensión diferente? Por favor, ilumínanos. – Oswald

+2

¿Sabe que debe procesar el formulario en 'user_list.php' como lo ha especificado en la acción del formulario? Ayudaría si pudieras publicar el código relevante de 'index.php' y explicar el" flujo "general de tu aplicación. –

Respuesta

90

no veo archivo PHP, pero que podría ser que -
reemplazar en su archivo PHP:

$query_age = $_GET['query_age']; 

con:

$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null); 

Lo más probable es, a primera vez que se ejecuta su secuencia de comandos sin ?query_age=[something] y $_GET no tiene una clave como query_age.

+1

Esto simplemente suprimirá el aviso, no reparará la causa. – mario

+8

@mario Expliqué la causa debajo del código.El autor escribió: "Cuando ejecuto la página, obtengo este error: Aviso: índice indefinido: query_age en .../index.php en la línea 19", así que creo que mi respuesta está bien para solucionarlo. – singles

+1

¡Reparar el aviso! = Solucionar el motivo. Pero no estoy cuestionando que responda a la parte de pregunta de OPs "make it go away". Sin embargo, el problema real está en otra parte. – mario

3

La primera vez que ejecuta la página, el índice query_age no existe porque no se ha enviado desde el formulario.

Cuando envíe el formulario, existirá y no se quejará de él.

#so change 
$_GET['query_age']; 
#to: 
(!empty($_GET['query_age']) ? $_GET['query_age'] : null); 
+0

Siempre que la presencia del parámetro GET nunca sea importante para su aplicación (rara vez lo es). – alex

9

La comprobación de la presencia del miembro antes de asignarlo es, en mi opinión, bastante desagradable.

Kohana tiene un useful function para hacer que la selección de parámetros sea simple.

Usted puede hacer su propia así ...

function arrayGet($array, $key, $default = NULL) 
{ 
    return isset($array[$key]) ? $array[$key] : $default; 
} 

Y luego hacer algo como ...

$page = arrayGet($_GET, 'p', 1); 
+0

Bueno, solo sugiero usar funciones anónimas para controlar el alcance y evitar errores como

+0

¿Dónde encajaría una función anónima en este ejemplo? – alex

+0

así $ arrayGet = function ... –

1

si utiliza isset como la respuesta ya publicado por solteros, acaba de hacer Asegúrese de que haya un soporte al final así:
$query_age = (isset($_GET['query_age']) ? $_GET['query_age'] : null);