Tester si variable est NULL ? [résolu]

Tester si variable est NULL ? [résolu] - PHP - Programmation

Marsh Posté le 04-03-2006 à 19:29:54    

Bonsoir à tous,
 
Est-il possible de tester une variable si elle est NULL? J'ai essayé que si ma variable est NULL, alors elle devient égal à 0.
 

Code :
  1. if(!isset($var) && $var=="" ) {
  2.   $var=0;
  3.  }


 
Mais celà ne marche pas, j'ai égallement essayé en mettant une valeur par defaut de 0 dans ma base de données, mais celà ne va pas non plus.
 
Bonne soirée a+


Message édité par TheBosy le 05-03-2006 à 00:30:51
Reply

Marsh Posté le 04-03-2006 à 19:29:54   

Reply

Marsh Posté le 04-03-2006 à 19:42:44    

il me semble que c'est :  

Code :
  1. if(empty($var)) {
  2. echo 'la variables est vide!';
  3. } else{
  4. echo 'la variable n\'est pas vide';}


A vérifier

Message cité 1 fois
Message édité par hugoOo le 04-03-2006 à 19:43:06
Reply

Marsh Posté le 04-03-2006 à 19:53:43    

if ($var === 0) il me semble (en tout cas la triple egalite permet de distinguer un false d'un 0)
 
et son equivalent negatif : if ($var !== 0)


Message édité par Djebel1 le 04-03-2006 à 19:54:33
Reply

Marsh Posté le 04-03-2006 à 20:10:56    

hugoOo a écrit :

il me semble que c'est :  

Code :
  1. if(empty($var)) {
  2. echo 'la variables est vide!';
  3. } else{
  4. echo 'la variable n\'est pas vide';}


A vérifier


 
Avec celà j'arrive bien a detecter si la variable est null ou pas, mais ensuite comment faire pour qu'elle passe de NULL à une valeur 0 ?
 

Code :
  1. if(empty($var)) {
  2.       $var=0;
  3.       }

Reply

Marsh Posté le 04-03-2006 à 20:17:35    

empty c'est si c'est vide, alors que null c'est égal à 0
 
if (is_null($var)) c'est exactement ce que tu veux
 
http://fr2.php.net/manual/fr/function.is-null.php


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 04-03-2006 à 20:35:16    

J'aimerais que ça fasse la différence entre NULL et 0, mais comment faire, je but la dessus depuis 2 bonnes heures...
 
Que ca me met dans la base de donné: 0 et non NULL.
 
Car quand j'essai d'insérer mon variable=0, ca me dit que ca ne peut pas être NULL, car je suis en NOT NULL, alors je met NULL dans la base de donné et il prend mon 0 pour un NULL.
 
A+


Message édité par TheBosy le 04-03-2006 à 20:36:28
Reply

Marsh Posté le 04-03-2006 à 20:58:02    

Plus clairement que dans ma base de données, le 0 soit pas considéré comme NULL.
 
Vous avez une idée comment faire? Car dans EasyPhp celà marchait, et sur mon hebergeur ca ne marche pas.

Reply

Marsh Posté le 04-03-2006 à 21:18:24    

normalement si une variable contient 0, ça insere 0 dans la bdd et pas NULL. Tu peux d'ailleurs essayer en faisant une requete SQL sans passer par PHP.
 
Donc à mon avis c'est uniquement un probleme de condition dans ton script PHP, et toutes les réponses ont été données. Apres, sans plus de code, c'est dur à dire
 
Sous easyPHP tu avais quelle version de PHP ? et chez ton hébergeur ?


Message édité par Djebel1 le 04-03-2006 à 21:19:05
Reply

Marsh Posté le 04-03-2006 à 21:28:24    

J'ai Easyphp 1.8 = PHP Version 4.3.10 et sur mon hebergeur PHP 5.x ou PHP 4.x
 
Celà pourrait-être la cause de cette différence?
 
Mais sinon sur Easyphp c'est phpMyAdmin 2.6.1 et sur mon hebergeur phpMyAdmin 2.6.2 donc la il y a une différence.

Reply

Marsh Posté le 04-03-2006 à 21:35:57    

la seule différence ne peut se trouver qu'un niveau de mysql

Reply

Marsh Posté le 04-03-2006 à 21:35:57   

Reply

Marsh Posté le 04-03-2006 à 21:48:03    

KangOl a écrit :

la seule différence ne peut se trouver qu'un niveau de mysql


 
Comment ça? Tu dis donc que la différence est dans ce niveau d'écart?

Reply

Marsh Posté le 04-03-2006 à 22:25:36    

et sur ton hébergeur, c'est pas PHP5 par défaut, avec un truc à faire pour etre sous PHP4 ?

Reply

Marsh Posté le 04-03-2006 à 22:30:47    

Je sais pas, je vais allé voir, mais mon problème c'est lors de l'insertion dans la base de données.
 
Je veux pouvoir insérer des " 0 " car c'est un classement de foot, et donc une defaite fait 0 point, mais lors de l'insertion ca me note toujours la même erreur: cannot be null.

Reply

Marsh Posté le 04-03-2006 à 22:45:32    

ben sur easyphp moi j'ai des champs MYSQl défini en INTEGER et je peux mettre  0 dedans


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 04-03-2006 à 23:21:25    

Bon voilà j'ai trouvé le problème, entre le php4 de easyphp qui prend:
 
$var=0; // comme le nombre 0
 
Le php5 de mon hebergeur prend:
 
$var=0, // comme étant null, donc il suffisait de mettre $var='0';
 
Ca me fait mal de perdre du temps comme ça !!!

Reply

Marsh Posté le 05-03-2006 à 01:16:09    

t'es sur que le champ dans ta base est un nombre (int, tinyint, double, etc ) ?


Message édité par Djebel1 le 05-03-2006 à 01:16:26
Reply

Marsh Posté le 05-03-2006 à 02:29:51    

quand tu fais $var='0'; là tu le définis comme une chaine et non un nombre


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 07-03-2006 à 16:53:03    

Désolé de faire remonter ce "topic" soit disant résolu mais visiblement résolu n'importe comment.
 
TheBosy > Que ce soit avec php 4 jusqu'au versions les plus récentes, les php5 ou 5.1 jusqu'aux versions du milieu du mois dernier, je n'ai jamais eu de variable qui se retrouvent à "null" dans la base quand je lui donne 0.
 
Si t'as eu "null", c'est que t'as envoyé "null" dans ta requette. T'as donc un test foireux dans un de tes fichiers php et ton test foireux utilise certainement la fonction "empty()". Contrairement à ce que tu t'étais imaginé, "empty()" ne fait pas la différence entre un nombre égal à zéro, une chaine de longueur 0 caractére et une variable sans valeur.
 
En mettant $var='0'; c'est vrai que t'as contourné le probléme en faisant croire à "empty()" qu'il avait à faire à une chaine de longueur 1 caractére mais c'est une abération que de devoir transformer un nombre en une chaine pour pouvoir mettre un nombre dans une base de donnée.
 
Au lieu de continuer à tester la valeur de ta variable avec "empty()" t'aurais mieux fait d'utiliser "is_null()" comme indiqué par newneo2001. C'est la fonction qui fait exactement ce dont t'avais besoin (pourquoi donc s'en passer?) et ca t'aurait évité de faire une bidouille sans aucun intéret si ce n'est passer outre un test mal écrit.
Le bug que t'avais créé est toujours là et tu véras qu'un jour tu remettras un nombre dans cette variable en te demandant pourquoi t'avais bien pu mettre une chaine et t'auras les boules que ca ne marche plus. Si tu veux faire des corrections alors fait des corrections logique et pas des bidouilles que tu seras incapable de comprendre dans 2-3 mois.
 
KangOl > Son probléme n'a rien à voir avec une différence de version de Mysql ou de php et tout à voir avec une modification non maitrisé d'un script. Si tu savais le nombre de fois qu'une personne a sorti sur ce forum que son code marchait chez lui et pas chez son hébergeur (où l'inverse) sans avoir envoyé la derniére version de son fichier dans le bon répertoire ou en oubliant que le fameux script avait été modifié entre temps, tu serais éffaré.

Reply

Marsh Posté le 14-03-2006 à 22:26:41    

Code :
  1. if(!$variable) { echo"nulle"; } else { echo"pas nulle"; }


Reply

Marsh Posté le 15-03-2006 à 02:13:41    

Misterol, le mec qui débarque mdr.
(!$variable) ne fera pas la différence entre 0 et null, faut lire les topics un peu ;)

Reply

Marsh Posté le 15-03-2006 à 14:24:38    

Salut petite question , j'ai pas tout compris :/
 
Si je veut tester qu'une variable a bien été est déclaré (isset) et qu'elle n'est ni nulle, ni égale à 0, le plus simple c'est quoi?
 
merci beaucoup

Reply

Marsh Posté le 15-03-2006 à 19:46:33    

if ( (isset($var)) && (!is_null($var)) && ($var != 0) )
 
mais normalement $var != 0 et !is_null te renverra pareil


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 15-03-2006 à 21:28:22    

oué ca c'est ce que j'ai mi, mais justement est-ce optimisable ?
 
merci en tout cas

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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