Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1941 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  variable NULL = zéro?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

variable NULL = zéro?

n°2241657
mazzella
Posté le 29-10-2014 à 14:53:28  profilanswer
 

Bonjour à tous!
 
Je débute dans la programmation en PHP et je suis actuellement un petit tutoriel pour l'apprendre.
 
Je suis actuellement au chapitre "If...Elseif...Else" et je me retrouve bloqué en essayant de mettre en application ce que j'ai appris.
 
Je veux utiliser trois variables qui sont $age et $sexe et $Aut_entrer, en fonction de ces variables, adapter le message d'accueil et autoriser ou non l'accès au site (enfin, théoriquement puisque ça aura un impact sur du texte uniquement).
 
Voici mon code :
 

Code :
  1. <?php
  2. $age = NULL ;
  3. $sexe = "";
  4. echo 'Tu as '.$age.' ans et tu est une '.$sexe.'<br />';
  5. If($age<=12 && $sexe=="M" )
  6. {
  7. echo "Salut mon petit!";
  8. $Aut_entrer = "Oui";
  9. }
  10. Elseif($age<=12 && $sexe=="F" )
  11. {
  12. echo "Salut ma petite!";
  13. $Aut_entrer = "Oui";
  14. }
  15. Elseif($age<=12 && $sexe== NULL)
  16. {
  17. echo "Salut!";
  18. $Aut_entrer = "Oui";
  19. }
  20. Elseif($age>=12 && $sexe=="M" )
  21. {
  22. echo "Salut mon grand!";
  23. $Aut_entrer = "Non";
  24. }
  25. Elseif($age>=12 && $sexe=="F" )
  26. {
  27. echo "Salut ma grande!";
  28. $Aut_entrer = "Non";
  29. }
  30. Elseif($age>=12 && $sexe==NULL)
  31. {
  32. echo "Salut!";
  33. $Aut_entrer = "Non";
  34. }
  35. Elseif($age==NULL && $sexe==NULL)
  36. {
  37. echo "Salut extra-terrestre!";
  38. $Aut_entrer = "Non";
  39. }
  40. echo '<br />Pouvez-vous entrer sur ce site? <br /> '.$Aut_entrer.'';
  41. ?>


 
 
Je devrais théoriquement voir apparaître sur mon site :
 

Citation :

Tu as ans et tu est une  
Salut extra-terrestre!
Pouvez-vous entrer sur ce site?  
Non


 
Alors que ceci s'affiche :

Citation :

Tu as ans et tu est une  
Salut!
Pouvez-vous entrer sur ce site?  
Oui


 
Le code comprend donc que la variable $age est inférieur à 12 avec $sexe NULL alors que je veux qu'elle comprenne que la variable $age est NULL.
Une variable NULL est-elle donc forcement considérée comme un 0 (et donc comme étant <=12?) ou y a-t-il une erreur quelque part dans mon code?
 
Merci par avance! =)

mood
Publicité
Posté le 29-10-2014 à 14:53:28  profilanswer
 

n°2241661
flo850
moi je
Posté le 29-10-2014 à 15:12:40  profilanswer
 

Bienvenue dans le monde merveilleux du php.
Le plus simple est de commencer par gérer les cas a nul et ensuite tu gère els cas ou tu as des valeur exploitables


---------------

n°2241662
ddr555
Posté le 29-10-2014 à 15:17:28  profilanswer
 

NULL en général n'est pas une valeur mais une propriété. il ne faut jamais tester variable == NULL car tu peux avoir une variable à NULL avec une valeur quelquonque.

n°2241663
flo850
moi je
Posté le 29-10-2014 à 15:24:44  profilanswer
 

wat ?


---------------

n°2241664
rufo
Pas me confondre avec Lycos!
Posté le 29-10-2014 à 15:26:57  profilanswer
 

En php, t'as is_null(), isset() et empty(). is_null() vérifie si la variable en paramètre vaut NULL. isset() vérifie si la variable a été définie. empty() vérifie si la variable passée en paramètre vaut 0, NULL, chaîne vide ou tableau vide.
 
Par ailleurs, y'a une différence entre le test == et ===.
$var = 1;
if ($var == true) et if ($var == 1) renverront VRAI
if ($var === true) et if ($var === 1) renverront FAUX et VRAI.
 
=== vérifie le typage ET la valeur. == vérifie que la valeur.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2241666
flo850
moi je
Posté le 29-10-2014 à 15:29:43  profilanswer
 

par contre, il ne me semble pas qu'il y ait un opérateur exact pour dire entier ET inférieur ( un genre de <== )


---------------

n°2241675
rufo
Pas me confondre avec Lycos!
Posté le 29-10-2014 à 15:58:32  profilanswer
 

Non, je confirme. Par contre, t'as is_integer() / is_int().
 
Edit : opérateurs en php : http://be2.php.net/manual/fr/langu [...] arison.php


Message édité par rufo le 29-10-2014 à 16:01:10

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2241676
mazzella
Posté le 29-10-2014 à 15:58:41  profilanswer
 

flo850 a écrit :

Bienvenue dans le monde merveilleux du php.
Le plus simple est de commencer par gérer les cas a nul et ensuite tu gère els cas ou tu as des valeur exploitables


 
Effectivement, j'ai fais passer les conditions avec NULL avant le reste et tout semble fonctionner!
Par contre, du coup, je ne comprend pas trop pourquoi cela ne fonctionnais pas dans ma précédente version?...
 

Citation :

NULL en général n'est pas une valeur mais une propriété. il ne faut jamais tester variable == NULL car tu peux avoir une variable à NULL avec une valeur quelquonque.


 
J'ai du mal a comprendre... Comment un varible NULL peut avoir une valeur puisqu'elle est nulle?
Je n'ai pas encore acquis une quelconque notion de paramètre à mon niveau actuel d'apprentissage. Je comprendrais peut-être plus tard... =)
 

Citation :

En php, t'as is_null(), isset() et empty(). is_null() vérifie si la variable en paramètre vaut NULL. isset() vérifie si la variable a été définie. empty() vérifie si la variable passée en paramètre vaut 0, NULL, chaîne vide ou tableau vide.  
 
Par ailleurs, y'a une différence entre le test == et ===.  
$var = 1;  
if ($var == true) et if ($var == 1) renverront VRAI  
if ($var === true) et if ($var === 1) renverront FAUX et VRAI.  
 
=== vérifie le typage ET la valeur. == vérifie que la valeur.


 
La je suis complètement perdu! ^^'
Vous me parlez de pas mal de choses que je n'ai pas apprise pour le moment donc je n'ai pas trop compris votre message. J'apprécie cependant votre aide et j'y regarderais de plus près dès que ces notions seront assimilées!
Pour le moment, je n'en suis qu'à la partie If...Elseif...Else =)
 
 
Merci à tous pour vos réponses en tout cas!

n°2241682
ddr555
Posté le 29-10-2014 à 17:14:40  profilanswer
 


une variable nulle n'a pas de valeur. mais comme le vide n'existe pas en  mémoire, il ne faut pas comparer une variable qui est nulle, sinon on peut avoir des résultats bizarres

n°2241685
rufo
Pas me confondre avec Lycos!
Posté le 29-10-2014 à 17:28:58  profilanswer
 

non pas de résultat bizarre avec is_null() fait pour les variables ayant la valeur NULL ou isset() avec les variables non définies...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 29-10-2014 à 17:28:58  profilanswer
 

n°2241739
ddr555
Posté le 30-10-2014 à 11:40:43  profilanswer
 

c'est ce que je dis. NULL n'est pas une valeur de la variable, mais une propriété. mais comme une zone mémoire n'est jamais vide, il y a une valeur mais qui ne veut rien dire. si on compare une variable qui est à NULL on a des résultats incohérents forcément !

n°2241762
billgatesa​nonym
Posté le 30-10-2014 à 14:18:46  profilanswer
 

La différence entre la valeur d'une donnée et son état nul/non null est un piège classique pour les débutants.
Pour comprendre, on peut faire l'analogie avec un être humain, en disant que sa valeur serait sa taille, et qu'il serait "nul" s'il est mort et non nul s'il est vivant. On voit qu'on peut avoir une taille différente de zéro, même si on est mort.
Par ailleurs, le PHP fait des conversions implicites, comme le Basic et d'autres langages. Donc, quand il voit le mot "NULL" il le convertit en la valeur zéro. Il faut donc utiliser 3 signes égal à la suite (comme c'est dit fort justement précédemment) pour faire un test sur l'état NULL ou pas (et c'est pareil pour TRUE et FALSE), parce que si on fait un test avec seulement 2 signes égal, alors il s'agit d'une comparaison qui porte sur la valeur zéro ou non (à cause de la conversion implicite), et pas sur l'état (je préfère le mot "état" plutôt que "propriété" (parce qu'on pourrait dire qu'une valeur est aussi une propriété, alors que ce n'est pas un état), mais c'est la même idée).

Message cité 1 fois
Message édité par billgatesanonym le 30-10-2014 à 14:27:33
n°2241798
Ms 45
I've seen enough
Posté le 30-10-2014 à 18:13:00  profilanswer
 

Il sert à quoi ce code, s'il n'y a pas de GET de variables entrées par un utilisateur lambda ?  [:transparency]

 

Je passe sur le NULL et les tests de variables, mais je ne comprends pas l'idée de ce code qui tourne dans le vide vu que les variables sont déclarées nulles ou vides et que les tests (if, elseif, etc) ne se font sur rien de ... variable !


Message édité par Ms 45 le 30-10-2014 à 18:13:13
n°2241935
mazzella
Posté le 01-11-2014 à 12:55:07  profilanswer
 

billgatesanonym a écrit :

La différence entre la valeur d'une donnée et son état nul/non null est un piège classique pour les débutants.
Pour comprendre, on peut faire l'analogie avec un être humain, en disant que sa valeur serait sa taille, et qu'il serait "nul" s'il est mort et non nul s'il est vivant. On voit qu'on peut avoir une taille différente de zéro, même si on est mort.
Par ailleurs, le PHP fait des conversions implicites, comme le Basic et d'autres langages. Donc, quand il voit le mot "NULL" il le convertit en la valeur zéro. Il faut donc utiliser 3 signes égal à la suite (comme c'est dit fort justement précédemment) pour faire un test sur l'état NULL ou pas (et c'est pareil pour TRUE et FALSE), parce que si on fait un test avec seulement 2 signes égal, alors il s'agit d'une comparaison qui porte sur la valeur zéro ou non (à cause de la conversion implicite), et pas sur l'état (je préfère le mot "état" plutôt que "propriété" (parce qu'on pourrait dire qu'une valeur est aussi une propriété, alors que ce n'est pas un état), mais c'est la même idée).


 
La métaphore m'a bien aidé a cerner le problème. Du coup, dans mon code, le fait d'avoir utiliser le test avec "==", NULL revient bel et bien à "0". Je voulais définir par NULL, l'absence de valeur, ce qui, du coup, n'est pas correct.
 
En remplaçant $Age=NULL par $Age="", il faut donc bien mettre en premier les tests sur les valeurs vides sinon, j’obtiens une erreur. Ce qui me semble logique vu que je demande de comparer des valeurs de variable qui n'ont pas de valeur (ma tête chauffe un peu mais je tien le coup! ^^)
 
Edit : Ah bah non, en apposant une valeur vide ($Age="" ), j'obtient encore une valeur de 0 sur mes tests... Je comprend pas! T_T
 

Citation :

Il sert à quoi ce code, s'il n'y a pas de GET de variables entrées par un utilisateur lambda ?  [:transparency]
 
Je passe sur le NULL et les tests de variables, mais je ne comprends pas l'idée de ce code qui tourne dans le vide vu que les variables sont déclarées nulles ou vides et que les tests (if, elseif, etc) ne se font sur rien de ... variable !


 
Tu as raison, il ne sert strictement à rien... sauf pour moi! Comme je l'ai expliqué, c'est un code d'exercice qui me permet de mettre en pratique les conditions en PHP.
 
Je choisi 2 variables, je met les test et après je changes moi-même les valeurs des variables pour comprendre le mécanisme des condions.
 
Ça m'a d'ailleurs beaucoup appris grâce à toutes les réponses que j'ai eu sur ce post. Encore merci à vous! =)


Message édité par mazzella le 01-11-2014 à 13:17:33
n°2242051
mechkurt
Posté le 03-11-2014 à 09:11:38  profilanswer
 

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  variable NULL = zéro?

 

Sujets relatifs
Affecter à une variable la valeur d'un includeFaire d'une variable une constante
VBScript : Crée une image PNG issu d'une variable texte[VBA] Recherche d'une valeur variable dans une autre feuille
Récupérer une variable PHP dans une shadowbox JS[RESOLU] Variable php dans lien html.
Capturer un texte variable dans une... variableGénérer un texte à partir de variable
Comment changer la valeur de la variable bmaxdata pour un systèm32-bittab cannot be resolved to a variable
Plus de sujets relatifs à : variable NULL = zéro?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR