web-dev-qa-db-fra.com

Vérification des paramètres de chaîne de requête nuls et manquants dans PHP

Je veux pouvoir faire la distinction entre les paramètres de chaîne de requête existants définis sur null et les paramètres manquants. Les parties de la question sont donc:

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

Merci

20
Yarin

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
   }
}
33
Byron Whitlock

Ou utiliser array_key_exists :

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

}

Je n'ai jamais aimé les `` conventions '' pour passer des valeurs vides au serveur - j'ai l'habitude de tester la présence de variables, puis de les couper et de tester la vacuité, par exemple.

12
karim79

Valeurs stockées dans $_GET et $_POST ne peut être que des chaînes ou des tableaux, sauf s'il est explicitement défini 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 tu envoies: query=, la valeur sera "" ou la chaîne vide. Prenez note des différences entre isset et empty. isset sera vrai si la valeur n'est pas nulle, tandis que empty sera vrai lorsque la valeur sera évaluée à false. À cet effet "" sera vrai pour à la fois isset et empty.

Si vous souhaitez simplement vérifier si un paramètre de chaîne de requête a été défini sur la valeur de chaîne de "null", vous pouvez simplement vérifier $_GET['query']=='null' (vous voudrez peut-être ajuster la casse des caractères avant la vérification)

4
zzzzBov

Avec une instruction if au lieu de deux:

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