2010-12-07 52 views
13

Je souhaite être capable de faire la distinction entre les paramètres de chaîne de requête existants définis sur null et les paramètres manquants. Ainsi, les parties de la question sont:Vérification des paramètres de chaîne de requête NULL et manquants dans PHP

  • Comment puis-je vérifier si un paramètre existe dans la chaîne de requête
  • Quelle est la méthode établie pour faire passer une valeur nulle dans une chaîne de requête? (Par exemple param = null ou param = (rien))

Merci

Répondre

29

Utilisez isset() et 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! Bonne réponse, mais vous n'avez pas besoin de 'isset()' lorsque vous utilisez 'empty()', puisque 'empty()' implique 'isset()'. Ceci est particulièrement important lorsque vous utilisez '! Empty()'. Et vous devriez probablement ajouter une réponse explicite à la deuxième partie de la question. – jwueller

+0

@elusive, Si vous appelez vide sur une variable qui n'est pas définie, vous obtiendrez un E_WARNING. –

+2

@Bronon Whitlock: Je pense que ce n'est pas correct. L'état docs _ "empty() est l'opposé de (boolean) var, sauf qu'aucun avertissement n'est généré lorsque la variable n'est pas définie." _. – jwueller

11

Ou utilisez array_key_exists:

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

} 

Je ne l'ai jamais été désireux de 'conventions' pour passer des valeurs vides au serveur - Je suis habitué à tester la présence de variables, et puis les tailler et tester la vacuité, par exemple.

4

Les valeurs stockées dans $_GET et $_POST ne peuvent être que des chaînes ou des tableaux, sauf s'ils sont explicitement définis au moment de l'exécution. Si vous avez une chaîne de requête de query=string la valeur est "string" si vous utilisez à la place: query=null la valeur sera "null". Notez qu'il s'agit donc d'une chaîne. Si vous envoyez: query=, la valeur sera "" ou la chaîne vide. Prenez note du differences entre isset et empty. isset sera vrai si la valeur n'est pas nulle, tandis que empty sera vrai lorsque la valeur est false. Par conséquent "" sera vrai pour à la foisisset et empty.

Si vous voulez simplement vérifier si un paramètre de chaîne de requête a été réglée sur la valeur de chaîne de "null", vous pouvez simplement vérifier $_GET['query']=='null' (vous pouvez régler le cas des caractères avant la vérification)

2

Avec un si déclaration au lieu de deux:

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