web-dev-qa-db-fra.com

Où puis-je utiliser isset () et! Empty ()

J'ai lu quelque part que la fonction isset() traite une chaîne vide en tant que 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 tapé quelque chose.

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

  2. Dans quelles situations devrais-je utiliser isset()? Devrais-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']))...
74
shin

isset vs.! empty

ALE:

"isset () vérifie si une variable a une valeur comprenant (False, 0 ou une chaîne vide ), mais pas NULL. Renvoie TRUE si var existe; FALSE sinon.

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

93
dassouki

De manière 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 null)
  • 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 existe.


Et question 2

Vous devez utiliser isset pour déterminer si une variable existe; Par exemple, si vous obtenez des données sous forme de tableau, vous devrez peut-être vérifier si une clé est définie dans ce tableau .
Pensez à $_GET/$_POST, par exemple.

Maintenant, pour travailler sur sa valeur, quand vous savez qu'il existe une telle valeur: c'est le travail de empty.

26
Pascal MARTIN

isset est destiné à être utilisé uniquement pour des variables et pas seulement des valeurs, donc isset("foobar") générera une erreur. À partir de PHP 5.5, empty prend en charge les variables et les expressions.

Donc, votre première question devrait plutôt être si isset renvoie true pour une variable qui contient une chaîne vide. Et la réponse est:

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

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

isset vérifie fondamentalement si une variable a une valeur autre que null puisque les variables non existantes ont toujours la valeur null. empty est une sorte de partie compteur à isset mais traite également la valeur entière 0 et la valeur de chaîne "0" comme vide. (Encore une fois, jetez un coup d'œil au types de tableaux de comparaison .)

11
Gumbo

Ce n'est pas non plus un bon moyen de vérifier une entrée valide.

  • isset() n'est pas suffisant car, comme cela a déjà été noté, il considère une chaîne vide comme une valeur valide.
  • ! empty() n'est pas suffisant non plus, car il rejette '0', ce qui pourrait être une valeur valide.

L'utilisation de isset() associée à une vérification d'égalité par rapport à une chaîne vide est le minimum nécessaire 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", je veux dire exactement cela. Tout le code ci-dessus détermine s'il existe une valeur pour $_GET['gender']. Not ne détermine pas si la valeur de $_GET['gender'] est valide _ (par exemple, un des ("Male", "Female","FileNotFound")).

Pour cela, voir La réponse de Josh Davis .

8
user212218

Si vous avez un $ _POST ['param'] et supposez que c'est un type de chaîne, alors

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

est identique à 

!empty($_POST['param'])
3
macio.Jun

isset () n'est pas un moyen efficace de valider des entrées de texte et des zones de texte à partir d'un formulaire HTML

Vous pouvez réécrire cela car "isset () n'est pas un moyen de valider une entrée". Pour valider les entrées, utilisez l'extension de filtre de PHP . filter_has_var() vous dira si la variable existe alors que filter_input() filtrera et/ou désinfectera l’entrée.

Notez que vous n'avez pas besoin d'utiliser filter_has_var() avant filter_input() et si vous demandez une variable qui n'est pas définie, filter_input() renverra simplement null.

2
Josh Davis

Quand et comment utiliser:

  1. isset ()

True pour 0, 1, chaîne vide, une chaîne contenant une valeur, true, false

False pour null

par exemple 

$status = 0
if (isset($status)) // True
$status = null 
if (isset($status)) // False
  1. Vide

False for 1, une chaîne contenant une valeur, true

True pour null, chaîne vide, 0, false E.g

$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
1
Fokwa Best

isset est utilisé pour déterminer si une instance de quelque chose existe c'est-à-dire, si une variable a été instanciée ... elle ne concerne pas la valeur du paramètre ...

Pascal MARTIN ... +1 ...

empty () ne génère pas d'avertissement si la variable n'existe pas ... Par conséquent, isset () est préférable pour tester l'existence d'une variable lorsque vous souhaitez la modifier ...

1
Mike

Utiliser empty est suffisant:

if(!empty($variable)){
    // Do stuff
}

De plus, si vous voulez une valeur entière, vérifiez également que intval($variable) !== FALSE.

1
You
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
1
moo

J'utilise ce qui suit pour éviter les avis, ceci vérifie si la var est déclarée sur GET ou POST et avec le préfixe @, vous pouvez vérifier en toute sécurité si elle n'est pas vide et éviter l'avis si la var n'est pas définie:

if( isset($_GET['var']) && @$_GET['var']!='' ){
    //Is not empty, do something
}
0
Aztrozero
    $var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
 echo '$var is set even though it is empty';
    }

Source: Php.net

0
csandreas1

isset () vérifie si une variable est définie et non nulle:

http://us.php.net/manual/en/function.isset.php

empty () peut renvoyer true lorsque la variable est définie sur certaines valeurs:

http://us.php.net/manual/en/function.empty.php

<?php

$the_var = 0;

if (isset($the_var)) {
  echo "set";
} else {
  echo "not set";
}

echo "\n";

if (empty($the_var)) {
  echo "empty";
} else {
  echo "not empty";
}
?>
0
Kowsigan Atsayam

isset () est utilisé pour vérifier si la variable est définie avec la valeur ou non et Empty () est utilisé pour vérifier si une variable donnée est vide ou non.

isset () renvoie true lorsque la variable n'est pas null alors qu'Empty () renvoie true si la variable est une chaîne vide.

0
Shreya thakuri