2010-12-07 9 views
13

Quiero ser capaz de distinguir entre los parámetros de cadena de consulta existentes establecidos en nulo, y los parámetros que faltan. Por lo que las partes de la pregunta son:Comprobación de null y falta de parámetros de cadena de consulta en PHP

  • ¿Cómo verifico si un parámetro existe en la cadena de consulta
  • ¿Cuál es el método establecido para pasar un valor nulo en una cadena de consulta? (Por ejemplo PARAM = null o parámetro = (nada))

Gracias

Respuesta

29

Uso isset() y empty()

if (isset($_REQUEST['param'])) 
{ 
    // param was set in the query string 
    if(empty($_REQUEST['param'])) 
    { 
    // query string had param set to nothing ie ?param=&param2=something 
    } 
} 
+2

+1! Responda correctamente, pero no necesita 'isset()' cuando usa 'empty()', ya que 'empty()' implica 'isset()'. Esto es especialmente relevante cuando se usa '! Empty()'. Y probablemente debas agregar una respuesta explícita a la segunda parte de la pregunta. – jwueller

+0

@elusive, si llama a empty en una variable que no está configurada, obtendrá un E_WARNING. –

+2

@Byron Whitlock: Creo que eso no es correcto. El estado de los documentos _ "empty() es el opuesto de var (booleano), excepto que no se genera ninguna advertencia cuando la variable no está configurada." _. – jwueller

11

O utilice array_key_exists:

if(array_key_exists("myParam", $_GET)) { 

} 

nunca he estado interesado en 'convenciones' para pasar valores vacíos al servidor - Estoy acostumbrado a probar la presencia de variables, y luego los recorta y prueba el vacío, por ejemplo.

4

Los valores almacenados en $_GET y $_POST solo pueden ser cadenas o matrices, a menos que se establezca explícitamente en tiempo de ejecución. Si tiene una cadena de consulta de query=string, el valor es "string" si utiliza: query=null el valor será "null". Tenga en cuenta que es por lo tanto una cadena.

Si envía: query=, el valor será "" o la cadena vacía. Tome nota de differences entre isset y empty. isset será verdadero si el valor no es nulo, mientras que empty será verdadero cuando el valor se evalúe a false. Por lo tanto, "" será verdadero para ambosisset y empty.

Si lo que desea es comprobar si un parámetro de cadena de consulta se establece en el valor de cadena de "null", sólo tiene que comprobar $_GET['query']=='null' (es posible que desee ajustar el caso de los caracteres antes de que el cheque)

2

Con una if statement en lugar de dos:

if ((isset($_REQUEST['name'])) && (!empty($_REQUEST['name']))) 
{ 
    $name= $_REQUEST['name']; 
} 
Cuestiones relacionadas