J'ai lu quelque part que la isset()
fonction traite une chaîne vide comme TRUE
, par conséquent, ce isset()
n'est pas un moyen efficace de valider les entrées de texte et les zones de texte à partir d'un formulaire HTML.
Vous pouvez donc utiliser empty()
pour vérifier qu'un utilisateur a tapé quelque chose.
Est-il vrai que la
isset()
fonction traite une chaîne vide commeTRUE
?Alors 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']))...
Utiliser ceci
if(!empty($_GET['gender']))...
Réponses:
isset vs! vide
FTA:
la source
empty()
renvoie également true pour un tableau vide.empty()
retournez TRUE pour 0, ce n'est pas une bonne idée d'utiliser cet opérateur pour les mathématiques au cas où "0" serait accidentellement une chaîne. Cela peut être dangereux. Au lieu de cela, l' utilisation de base>
,<
et les==
opérateurs et les variables de convertir à l' aideintval()
oufloatval()
.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 nulle)empty
teste si une variable (...) contient des données non vides.Pour répondre à la question 1 :
donne
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, travailler sur sa valeur, quand on sait qu'il y a une telle valeur: c'est le travail de
empty
.la source
Aucun des deux n'est un bon moyen de vérifier les entrées valides.
isset()
n'est pas suffisant car - comme cela a déjà été noté - il considère qu'une chaîne vide est une valeur valide.! empty()
n'est pas suffisant non plus car il rejette «0», qui pourrait être une valeur valide.L'utilisation
isset()
combinée avec 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:Mais par "strict minimum", je veux dire exactement cela. Tout ce que le code ci-dessus fait est de déterminer s'il y a une valeur pour
$_GET['gender']
. Il ne détermine pas si la valeur de$_GET['gender']
est valide (par exemple, l'une de ).("Male", "Female",
"FileNotFound"
)
Pour cela, voir la réponse de Josh Davis .
la source
isset
est destiné à être utilisé uniquement pour les variables et pas uniquement pour les valeurs, ce quiisset("foobar")
entraînera une erreur. Depuis PHP 5.5,empty
prend en charge à la fois les variables et les expressions.Donc, votre première question devrait plutôt être si
isset
renvoie true pour une variable contenant une chaîne vide. Et la réponse est:Les tableaux de comparaison de types dans le manuel de PHP sont très pratiques pour de telles questions.
isset
vérifie essentiellement si une variable a une valeur autre que null puisque les variables non existantes ont toujours la valeur null .empty
est une sorte de compteurisset
mais traite également la valeur entière0
et la valeur de chaîne"0"
comme vides. (Encore une fois, jetez un œil aux tableaux de comparaison de types .)la source
empty()
"prend également en charge les expressions, plutôt que les seules variables" à partir de PHP 5.5.0.Si vous avez un $ _POST ['param'] et supposez qu'il est de type chaîne, alors
est identique à
la source
Vous pouvez réécrire cela comme "isset () n'est pas un moyen de valider l'entrée." Pour valider l'entrée, utilisez l' extension de filtre PHP .
filter_has_var()
vous dira si la variable existe alorsfilter_input()
qu'elle filtrera et / ou purifiera réellement l'entrée.Notez que vous n'avez pas à utiliser
filter_has_var()
avantfilter_input()
et si vous demandez une variable qui n'est pas définie,filter_input()
elle retournera simplementnull
.la source
Quand et comment utiliser:
Vrai pour 0, 1, chaîne vide, une chaîne contenant une valeur, vrai, faux
False pour null
par exemple
False pour 1, une chaîne contenant une valeur, true
Vrai pour null, chaîne vide, 0, faux par exemple
la source
isset est utilisé pour déterminer si une instance de quelque chose existe, c'est-à-dire si une variable a été instanciée ... il n'est pas concerné par 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 lors du test de l'existence d'une variable lorsque vous avez l'intention de la modifier ...
la source
Il
empty
suffit d' utiliser :De plus, si vous voulez une valeur entière, cela peut également valoir la peine de le vérifier
intval($variable) !== FALSE
.la source
empty
...isset
/filter_has_var
doit être utilisé pour vérifier si var existe.la source
Je suis venu ici à la recherche d'un moyen rapide de vérifier si une variable contient du contenu. Aucune des réponses ici n'a fourni une solution complète, alors la voici:
Il suffit de vérifier si l'entrée est
''
ounull
, car:La demande d'URL
.../test.php?var=
entraîne$_GET['var'] = ''
La demande d'URL
.../test.php
entraîne$_GET['var'] = null
isset()
renvoiefalse
uniquement lorsque la variable existe et n'est pas définie surnull
, donc si vous l'utilisez, vous obtiendreztrue
des chaînes vides (''
).empty()
considère à la foisnull
et''
vide, mais il considère également'0'
vide, ce qui pose un problème dans certains cas d'utilisation.Si vous voulez traiter
'0'
comme vide, utilisezempty()
. Sinon, utilisez la vérification suivante:$var .'' !== ''
évaluefalse
uniquement pour les entrées suivantes:''
null
false
J'utilise la vérification suivante pour filtrer également les chaînes avec uniquement des espaces et des sauts de ligne:
la source
J'utilise ce qui suit pour éviter les avis, cela vérifie si le var est déclaré sur GET ou POST et avec le préfixe @, vous pouvez vérifier en toute sécurité s'il n'est pas vide et éviter l'avis si le var n'est pas défini:
la source
@
) ne doit pas être encouragé et il n'est pas nécessaire pour votre extrait de code. Ce n'est pas une bonne réponse. Vous faites une comparaison vague. Vous pouvez aussi bien utiliser!empty()
.@
vous causera des problèmes de débogage, l'impact de la page est plus lent et vous pouvez toujours avoirerror_log
plus de 1 Go en un instant. Soyez juste intelligent et utilisez!empty()
,!is_null()
ou quelque chose comme ça.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 nulle alors que Empty () retourne true si la variable est une chaîne vide.
la source
Source: Php.net
la source
isset () teste si une variable est définie et non nulle:
http://us.php.net/manual/en/function.isset.php
empty () peut retourner true lorsque la variable est définie sur certaines valeurs:
http://us.php.net/manual/en/function.empty.php
la source
isset () vs vide () vs is_null ()
la source
! vide fera l'affaire. si vous avez seulement besoin de vérifier que les données existent ou non, utilisez isset autre vide peut gérer d'autres validations
?>
la source