Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/11/2011, 13h01   #1
Invité régulier
 
Inscription : août 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 18
Points : 5
Points : 5
Par défaut isset renvoie vrai sur valeur null

Bonjour!

Je reviens sur ce vieux post : http://www.developpez.net/forums/d11...rs-vrai-_post/ , mais je n'ai toujours pas compris...
Imaginons mon champ de formulaire 'password' qui n'est pas rempli. Alors isset($_POST['password'])=TRUE...
Or, j'ai vu dans les fonctions php que 'isset' renvoie false si la valeur est null.
Donc j'en ai conclu que le champ vide du formulaire renvoyait une chaine vide.

Pour en être sûre, j'ai essayé ceci:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if($_POST['password']==null) {
echo 'null <br/>';
}
else {
echo 'non null<br/>';
}
 
if (!isset($_POST['password'])) {
echo 'false';
}
else{
echo 'true';
}
?>
Et la réponse est "null true"!
Donc pourquoi dans le cas de $_POST, une valeur null ne renvoie-t-elle pas un isset=false?
(ou est-ce que j'ai fait une erreur de raisonnement quelque part??)

Merci!
Moonliz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 14h02   #2
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Dans le cas que tu montres, c'est juste que le paramètre password a été envoyé mais sans valeur associé. Il donc bien "isset()" mais sa valeur est null.
Pour t'en persuader, crée une page isset.php par exemple mais en GET :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
if($_GET['password']==null) {
echo 'null <br/>';
}
else {
echo 'non null<br/>';
}
 
if (!isset($_GET['password'])) {
echo 'false';
}
else{
echo 'true';
}
?>
Et appelle là avec les URL :
  • isset.php
  • isset.php?password=
  • isset.php?password=toto
et tu comprendra mieux.
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 15h33   #3
Invité régulier
 
Inscription : août 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 18
Points : 5
Points : 5
J'ai essayé le code que tu m'as donné, et c'est vrai qu'avec l'URL, c'est bien plus parlant
Je pensais avoir compris, mais il y a cette phrase de php.net:
Citation:
isset() renvera FALSE lors du test d'une variable de valeur NULL
Dans le cas n°2: isset.php?password=, la variable est de valeur NULL, le test le confirme. Alors pourquoi isset() renvoie-t-il TRUE?
...Est-ce que je m'embrouille dans les termes?
Moonliz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 15h37   #4
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Histoire de compléter, pour être sûr d'avoir une valeur : tu fais deux vérifications en cascade :
- la 1ère, comme te le fait tester Bovino, isset() pour être sûr que la clé attendue existe et qu'elle a sa valeur différente de null
- la 2ème pour savoir si des caractères ont été bien saisis avec strlen() (même '0', qui ne passe pas avec empty())

Donc cela revient à faire :
Code :
1
2
3
4
5
6
7
 
if ( ! (isset($_POST['login']) || strlen($_POST['login']))) {
   exit("Erreur : login invalide");
}
if ( ! (isset($_POST['motPasse']) || strlen($_POST['motPasse']))) {
   exit("Erreur : mot de passe invalide");
}
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 14h49   #5
Invité régulier
 
Inscription : août 2009
Messages : 18
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 18
Points : 5
Points : 5
D'accord rawsrc, merci, c'est bon à savoir!
... Et par rapport à mon précédent post?
Citation:
Je pensais avoir compris cette histoire d'isset, mais il y a cette phrase de php.net:
Citation:
isset() renvera FALSE lors du test d'une variable de valeur NULL
Dans le cas n°2 du test conseillé par Bovino: isset.php?password=, la variable est de valeur NULL, le test le confirme. Alors pourquoi isset() renvoie-t-il TRUE?
Argh!
Moonliz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h04   #6
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 807
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 807
Points : 35 789
Points : 35 789
Citation:
Envoyé par Moonliz
Dans le cas n°2: isset.php?password=, la variable est de valeur NULL, le test le confirme. Alors pourquoi isset() renvoie-t-il TRUE?


Il ne faut pas confondre == et ===
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
if(@$_GET['password']===null) {
    echo 'null <br/>';
}
else {
    echo 'non null<br/>';
}
if (!isset($_GET['password'])) {
    echo 'false';
}
else{
    echo 'true';
}
echo '<br />';
$toto = null;
echo isset($toto) ? 'oui' : 'non';
?>
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2011, 15h12   #7
Expert Confirmé
 
Avatar de rawsrc
 
Homme Martin
Dev indep
Inscription : mars 2004
Messages : 1 461
Détails du profil
Informations personnelles :
Nom : Homme Martin
Âge : 35
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Dev indep

Informations forums :
Inscription : mars 2004
Messages : 1 461
Points : 2 551
Points : 2 551
Envoyer un message via Skype™ à rawsrc
Citation:
Envoyé par Moonliz Voir le message
Dans le cas n°2: isset.php?password=, la variable est de valeur NULL, le test le confirme.
Non, la variable n'est pas null et a pour valeur une chaine vide ""
D'où le test strlen() après isset() pour intercepter ce cas de figure
__________________
# Dans la Création, tout est permis mais tout n'est pas utile...
rawsrc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h38.


 
 
 
 
Partenaires

Hébergement Web