2010-04-19 14 views
7

Si intenta leer el valor de una variable 'get', qué pasa si dicha variable no se ha establecido en la URL. Ejemplo: solicita la página test.php, en ese archivo intenta leer el valor de $_GET['message']. ¿Qué pasa en este caso? ¿Dosifica el valor que acaba de devolver como ''?PHP que lee la variable 'get' que puede o no haberse configurado

¿Quiere esto decir que si siempre estoy esperando un valor a introducir, y no estoy dispuesto a aceptar un valor de '' que sólo puede hacer algo como

$foo = $_GET['bar']; 
if($foo == ''){ 
    // Handle my 'error' 
} 
else 
{ 
    // $foo should now have a value that I can work with 
} 

Por favor, tenga en cuenta que sé que podría usar isset($_GET['bar']) Pero no solo quiero saber si está configurado, no me importa si lo es o no, me importa si tiene un valor que es más que una cadena vacía.

+0

oooh, lo que he hecho para mis etiquetas: PI intentó escribir '$ _GET' – thecoshman

Respuesta

7

Si no le importa si el valor se establece en realidad, puede utilizar esto:

if (empty($_GET['bar'])) 
    // value is null, false, 0, '0' or an empty string (including whitespace). 
+0

Creo que esta es la solución perfecta para mis necesidades. Esto NO generará un error si '$ _GET ['bar']' ni siquiera se configuró en primer lugar. – thecoshman

+0

Creo que es importante señalar que esto considerará que la cadena ''0'' está vacía. Si usa esto como ID para que las páginas se carguen, podría ocasionarle problemas. Sin embargo, creo que la mayoría de las bases de datos comienzan con números automáticos para una columna de ID al 1 – thecoshman

+0

sí, agregué eso a la respuesta. – elias

0

Si he entendido bien que es:

$foo = $_GET['bar']; 
if ((!isset($foo)) || $foo == '') { 
//GET veriable not set, error 
} 
else { 
// GET veriable set, code here. 
} 
+0

Pero en este código , Aún tendré que verificar si '$ foo == ''' quiero intentarlo y solo hacerlo de una vez. – thecoshman

6

Si intenta acceder a un elemento de matriz que no existe, el resultado será null.

$foo = $_GET['bar']; //$foo is now null 

Vale la pena señalar que si se utiliza el débil comparison operator== en lugar de la estricta comparsion ===, entonces '' serán tratados como nulo.

La desventaja del código anterior es que generará un aviso cuando acceda a la matriz con un índice que no existe, que es un poco complicado.

Por lo tanto, debe verificar si el valor se establece antes de asignar el valor contenido a una variable.

if (!isset($_GET['bar'])){ 
    //handle error or assign default value to $foo 
}else{ 
    $foo = $_GET['bar']; 
} 

Si usted quiere tener un valor por defecto, y sólo reemplazar el valor predeterminado si el valor de $ _GET existe puede utilizar el conditional operator (vaya a "ternario Operador")

$foo = isset($_GET['bar']) ? $_GET['bar'] : 'default value'; 
1

Aquí es cómo lo hago.

$foo = (isset($_GET['bar'])) ? $_GET['bar'] : false; 

if(false === $foo){ 
    die('no Foo for your Bar'); 
} 

Como un lado, es probable que nunca conseguir un cierto valor booleano de $ _GET

Cuestiones relacionadas