128 votes

Où dois-je utiliser isset() et !empty() ?

J'ai lu quelque part que la isset() La fonction traite une chaîne vide comme TRUE Par conséquent isset() n'est pas un moyen efficace de valider les entrées de texte et les zones de texte d'un formulaire HTML.

Vous pouvez donc utiliser empty() pour vérifier qu'un utilisateur a bien tapé quelque chose.

  1. Est-il vrai que la isset() La fonction traite une chaîne vide comme TRUE ?

  2. Dans quelles situations dois-je utiliser isset() ? Dois-je toujours utiliser !empty() pour vérifier s'il y a quelque chose ?

Par exemple, au lieu de

if(isset($_GET['gender']))...

En utilisant cette

if(!empty($_GET['gender']))...

156voto

dassouki Points 2305

isset vs !empty

ALE :

"isset() vérifie si une variable a une valeur valeur incluant (False, 0 ou chaîne vide), mais pas ), mais pas NULL. Retourne VRAI si var existe et n'est pas NULL ; FALSE sinon.

D'autre part, la fonction empty() vérifie si la variable a une valeur vide chaîne vide, 0, NULL ou fausse. Retourne FAUX si var a une valeur valeur non vide et non nulle".

40voto

Pascal MARTIN Points 195780

De la manière la plus générale :

  • isset teste si une variable (ou un élément d'un tableau, ou une propriété d'un objet) existe (et n'est pas nul)
  • empty teste si une variable (...) contient des données non vides.

Pour répondre question 1 :

$str = '';
var_dump(isset($str));

donne

boolean true

Parce que la variable $str existent.

Et question 2 :

Vous devez utiliser isset pour déterminer si une variable existe ; par exemple, si vous obtenez des données sous la forme d'un tableau, vous pouvez avoir besoin de vérifier si une clé est définie dans ce tableau.
Réfléchissez $_GET / $_POST par exemple.

Maintenant, travailler sur sa valeur, quand on sait qu'il y a une telle valeur : c'est le travail de la empty .

13voto

todofixthis Points 4206

Ni l'un ni l'autre n'est un bon moyen de vérifier la validité des données saisies.

  • isset() n'est pas suffisante car - comme nous l'avons déjà noté - elle considère une chaîne vide comme une valeur valide.
  • ! empty() n'est pas non plus suffisant car il rejette "0", qui pourrait être une valeur valide.

L'utilisation isset() combinée à une vérification d'égalité par rapport à une chaîne vide est le strict minimum dont vous avez besoin pour vérifier qu'un paramètre entrant a une valeur sans créer de faux négatifs :

if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
  ...
}

Mais par "strict minimum", j'entends exactement cela. Tout ce que fait le code ci-dessus est de déterminer s'il existe une valeur pour $_GET['gender'] . Il s'agit de pas déterminer si la valeur de $_GET['gender'] est valide (par exemple, l'un des ("Male", "Female","FileNotFound") ).

Pour cela, voir Réponse de Josh Davis .

12voto

Gumbo Points 279147

isset est destiné à être utilisé uniquement pour les variables et pas seulement pour les valeurs. isset("foobar") soulèvera une erreur. À partir de PHP 5.5, empty prend en charge à la fois les variables et les expressions.

Votre première question devrait donc être de savoir si isset retours vrai pour une variable contenant une chaîne vide. Et la réponse est :

$var = "";
var_dump(isset($var));

Le tableaux de comparaison des types dans le manuel de PHP est très pratique pour ce genre de questions.

isset vérifie essentiellement si une variable a une valeur autre que nul puisque les variables non existantes ont toujours la valeur nul . empty est en quelque sorte le pendant de isset mais traite également la valeur entière 0 et la valeur de la chaîne "0" comme étant vide (jetez à nouveau un coup d'œil à la page d'accueil de la tableaux de comparaison des types .)

8voto

macio.Jun Points 1857

Si vous avez un $_POST['param'] et que vous supposez qu'il s'agit d'une chaîne de caractères, alors

isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'

est identique à

!empty($_POST['param'])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X