Test variable vide

Test variable vide - PHP - Programmation

Marsh Posté le 23-10-2006 à 08:10:12    

Bonjour,
 
J'ai un petit problème sur une page php lorsque je test si une variable est vide.
Elle est déclarée dans phpmyadmin comme étant une année.
voila le test que je fais meme lordque la variable est vide, ca m'affiche 0000 au lieu de . . .

Code :
  1. if (empty($data['anneeprix'])) {
  2.     echo '  <td height="34"><strong><font size="2" face="Geneva, Arial, Helvetica, sans-serif">Ann&eacute;e
  3.         du prix: </font></strong><font size="2" face="Geneva, Arial, Helvetica, sans-serif">. . .</font></td>';
  4. }
  5. else {
  6.  echo '  <td height="34"><strong><font size="2" face="Geneva, Arial, Helvetica, sans-serif">Ann&eacute;e
  7.         du prix: </font></strong><font size="2" face="Geneva, Arial, Helvetica, sans-serif">'.$data['anneeprix'].'</font></td>';
  8. }


Si vous voyez d'où viens le problème,
 
Merci d'avance de vos réponses


---------------
Mon vieux feedback :)
Reply

Marsh Posté le 23-10-2006 à 08:10:12   

Reply

Marsh Posté le 23-10-2006 à 08:15:49    

ben si c'est 0000 c'est que ta variable n'est pas vide :o
donc autant comparer avec 0000

Reply

Marsh Posté le 23-10-2006 à 09:11:24    

ton champs serait-il pas en not null dans ta bdd?

Reply

Marsh Posté le 23-10-2006 à 09:14:56    

Merci,  ca marche en faisant comme ca.
 
Par contre je comprends pas pourquoi ca n'a pas marché avec empty:
" Empty() retourne FALSE si la variable a une valeur non-vide et différente de zéro. "
La valeur étant égale à 0000 je pensais que c'était aussi égal à zéro... :pt1cable:  


---------------
Mon vieux feedback :)
Reply

Marsh Posté le 23-10-2006 à 09:16:23    

oui il est en not null
et default : 0000


---------------
Mon vieux feedback :)
Reply

Marsh Posté le 23-10-2006 à 09:56:50    

ddsjm a écrit :

Merci,  ca marche en faisant comme ca.
 
Par contre je comprends pas pourquoi ca n'a pas marché avec empty:
" Empty() retourne FALSE si la variable a une valeur non-vide et différente de zéro. "
La valeur étant égale à 0000 je pensais que c'était aussi égal à zéro... :pt1cable:


Elle était égale à 0000 mais en tant que chaine de caractères :o (enfin je crois)

Reply

Marsh Posté le 23-10-2006 à 09:58:27    

gatsu35 a écrit :

ben si c'est 0000 c'est que ta variable n'est pas vide :o
donc autant comparer avec 0000


Si... Bienvenue dans PHP

Reply

Marsh Posté le 23-10-2006 à 10:23:38    

Ah en fait non

Reply

Marsh Posté le 23-10-2006 à 10:27:39    

FlorentG a écrit :

Ah en fait non


[:haha]


Message édité par gatsu35 le 23-10-2006 à 10:27:47
Reply

Marsh Posté le 23-10-2006 à 10:36:19    

Par contre '0' est bien empty. J'me suis fait un jour une fonction :

Code :
  1. function is_empty($var)
  2. {
  3.   return (empty($var) && $var !== FALSE && $var !== 0 && $var !== '0');
  4. }


Comme ça t'es sûr que c'est vraiment empty

Reply

Marsh Posté le 23-10-2006 à 10:36:19   

Reply

Marsh Posté le 23-10-2006 à 11:11:56    

ça revient pas à faire un test sur !$var ? (pure curiosité)


Message édité par Sh@rdar le 23-10-2006 à 11:12:04

---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 23-10-2006 à 11:19:40    

Presque

Reply

Marsh Posté le 23-10-2006 à 11:22:12    

ouais, en fait je me souvenais plus qu'empty teste aussi si la variable est définie (ça enlève juste une alerte notice) ;)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 23-10-2006 à 23:57:31    

pourquoi ne pas tester if ($var != '') ce qui résout le pb du empty ...

Reply

Marsh Posté le 23-10-2006 à 23:58:08    

Attention, là tu testes pas le type, alors bonjour le bordel

Reply

Marsh Posté le 24-10-2006 à 00:03:54    

FlorentG a écrit :

Par contre '0' est bien empty. J'me suis fait un jour une fonction :

Code :
  1. function is_empty($var)
  2. {
  3.   return (empty($var) && $var !== FALSE && $var !== 0 && $var !== '0');
  4. }


Comme ça t'es sûr que c'est vraiment empty


 
$var = '0b' => empty

Reply

Marsh Posté le 24-10-2006 à 09:33:01    

supermofo a écrit :

$var = '0b' => empty


Euh non, chez moi ça renvoi bien false

Reply

Marsh Posté le 24-10-2006 à 09:57:55    

Code :
  1. $var = '0';
  2. if ($var == 0) echo 'nul <br />';
  3. if ($var == '0') echo 'nul <br />';
  4. $var = '0a';
  5. echo '========== <br />';
  6. if ($var == 0) echo 'nul <br />';
  7. if ($var == '0') echo 'nul <br />';
  8. $var = '0aaaaaaaaaaz';
  9. echo '========== <br />';
  10. if ($var == 0) echo 'nul <br />';
  11. if ($var == '0') echo 'nul <br />';
  12. $var = 0;
  13. echo '========== <br />';
  14. if ($var == 0) echo 'nul <br />';
  15. if ($var == '0') echo 'nul <br />';
  16. $var = '0;DELETE FROM USER';
  17. echo '========== <br />';
  18. if ($var == 0) echo 'nul <br />';
  19. if ($var == '0') echo 'nul <br />';
  20. /* resultat
  21. '0'
  22. nul
  23. nul
  24. ==========
  25. '0a'
  26. nul
  27. ==========
  28. '0aaaaaaaaaaz'
  29. nul
  30. ==========
  31. 0
  32. nul
  33. nul
  34. ==========
  35. '0;DELETE FROM USER';
  36. nul  
  37. */


 
 
Et le dernier pour confirmer :
 

Code :
  1. $var = '8;DELETE FROM USER';
  2. echo '========== <br />';
  3. if ($var == 0) echo 'nul <br />';
  4. if ($var == '0') echo 'nul <br />';
  5. /* resultat = RIEN */


 
Un autre:
 

Code :
  1. $var = '0;DELETE FROM USER';
  2. $var=(int)$var;
  3. echo '========== <br />';
  4. if ($var == 0) echo 'nul <br />';
  5. if ($var == '0') echo 'nul <br />';
  6. /* resultat
  7. nul
  8. nul */
  9. $var contient l'entier 0 ici donc ca sécurise bien.


 
 
 
 
Donc dans la fonction :
 

Code :
  1. 1.
  2.       function is_empty($var)
  3.    2.
  4.       {
  5.    3.
  6.        return (empty($var) && $var !== FALSE && $var !== 0 && $var !== '0');
  7.    4.
  8.       }


 
Si tu avais oublie " $var !== '0' " tes résultats serait faussés.  
 
Facile à oublier non ?
 
Solution: faire des comparaisons binaires
 
Edit: Tester avec un tableau ne rendra pas les memes résultats ...
 
Edit final: Ca va certainement remuer les miches de certains :D.

Message cité 2 fois
Message édité par supermofo le 24-10-2006 à 10:56:51
Reply

Marsh Posté le 24-10-2006 à 10:10:20    


Faut vérifier la variable avec la fonction :  
isJoomlaFuckThisEmptyVar()

Reply

Marsh Posté le 24-10-2006 à 10:12:19    

:lol:


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 24-10-2006 à 10:33:08    

gatsu35 a écrit :

Faut vérifier la variable avec la fonction :  
isJoomlaFuckThisEmptyVar()


 
Ignored  :heink:  

Reply

Marsh Posté le 24-10-2006 à 11:26:04    

supermofo a écrit :

Si tu avais oublie " $var !== '0' " tes résultats serait faussés.


Ben c'est pour ça que je l'ai pas oublié [:dawak] J'ai fait ce qu'il fallait en test unitaires pour tout tester [:dawak]

Reply

Marsh Posté le 24-10-2006 à 11:35:51    

on va se retaper 3 pages de branlette comme pour les simples/doubles quotes ? [:dawa]


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed