Probleme avec empty

Probleme avec empty - PHP - Programmation

Marsh Posté le 07-01-2005 à 17:20:20    

voila j'ai créé une fonction, et j'ai un probleme avec empty()
 
voici le code
 

Code :
  1. if(empty($x))
  2. {
  3.  if($pos=="center" || "centre" )
  4.  {
  5.  $x_img['pos_x']=($pagewidth-$x_img['width'])/2;
  6.  }
  7.  if($pos=="droite" )
  8.  {
  9.  $x_img['pos_x']=($pagewidth-$x_img['width'])-$marginright;
  10.  }
  11.  if($pos=="gauche" )
  12.  {
  13.  $x_img['pos_x']=$marginleft;
  14.  }
  15. }
  16. elseif($x==0 || !empty($x))
  17. {
  18. $x_img['pos_x']=$x;
  19. }


 
... le probleme c que quand ma variable $x n'est pas vide... il execute quand même la premiere instruction
 
.. quoi faire ???  :??:


Message édité par freed102 le 07-01-2005 à 17:20:53
Reply

Marsh Posté le 07-01-2005 à 17:20:20   

Reply

Marsh Posté le 07-01-2005 à 17:23:47    

en fait quand je mets "0" ou vide.. pour lui c pareil ! hors moi je veux que "0" ça me retourne un "0" et que si c vide qu'il calcule la position indiquée

Reply

Marsh Posté le 07-01-2005 à 18:10:04    

Reply

Marsh Posté le 07-01-2005 à 18:11:52    


merci j'ai deja lu tout ça !
j'essai par tous les moyens que quand je tape un "0" dans mon champ il ne soit pas interpreté comme null... j'ai tenté avec un  
 
if($_POST['X_logo']==chr(48))
{
...
}
 
ça marche pas non plus ! :(

Reply

Marsh Posté le 07-01-2005 à 18:23:41    

Déjà qu'est-ce que $x ?
 
Une valeur qui vient d'un formulaire ? Dans ce cas il n'y a aucune raison que le "0" que tu tapes dans le champ correspondant ne soit pas transmis en tant que tel.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2005 à 18:26:04    

Sielfried a écrit :

Déjà qu'est-ce que $x ?
 
Une valeur qui vient d'un formulaire ? Dans ce cas il n'y a aucune raison que le "0" que tu tapes dans le champ correspondant ne soit pas transmis en tant que tel.


 
voici la facon avec laquelle je recupere ma variable :

Code :
  1. if(!$_POST['X_logo']){$X_logo="";}elseif($_POST['X_logo']==chr(48)){$X_logo="0";}else{$X_logo=$_POST['X_logo'];}


 
et voici ma fonction entiere :
 

Code :
  1. function AlignImg($img,$pagewidth,$x,$y,$maxwidth,$maxheight,$marginright,$marginleft,$pos)
  2. {
  3. $size=getimagesize($img);
  4. global $x_img;
  5. $x_img=array();
  6. if ($size[1]>$maxheight && $size[0]>=$maxwidth)
  7. {
  8. $x_img['height']=$maxheight;
  9. $x_img['rapport']=$x_img['height']*100/$size[1];
  10. $x_img['width']=$size[0]*$x_img['rapport']/100;
  11. }
  12. if ($size[1]>$maxheight && $size[0]<=$maxwidth)
  13. {
  14. $x_img['height']=$maxheight;
  15. $x_img['rapport']=$x_img['height']*100/$size[1];
  16. $x_img['width']=$size[0]*$x_img['rapport']/100;
  17. }
  18. elseif($size[0]>=$maxwidth)
  19. {
  20. $x_img['width']=$maxwidth;
  21. $x_img['rapport']=$x_img['width']*100/$size[0];
  22. $x_img['height']=$size[1]*$x_img['rapport']/100;
  23. }
  24. elseif($size[0]<=$maxwidth && $size[1]<=$maxheight)
  25. {
  26. $x_img['width']=$size[0];
  27. $x_img['height']=$size[1];
  28. $x_img['rapport']=100;
  29. }
  30. elseif($x==chr(48) || !empty($x))
  31. {
  32. $x_img['pos_x']=$x;
  33. }
  34. else
  35. {
  36.  if($pos=="center" || "centre" )
  37.  {
  38.  $x_img['pos_x']=($pagewidth-$x_img['width'])/2;
  39.  }
  40.  if($pos=="droite" )
  41.  {
  42.  $x_img['pos_x']=($pagewidth-$x_img['width'])-$marginright;
  43.  }
  44.  if($pos=="gauche" )
  45.  {
  46.  $x_img['pos_x']=$marginleft;
  47.  }
  48. }
  49. if(!empty($y) || $y==0)
  50. {
  51. $x_img['pos_y']=$y;
  52. }
  53. else
  54. {
  55. $x_img['pos_y']=35;
  56. }
  57. return $x_img;
  58. }


 
voila comme ça tu vois tout

Reply

Marsh Posté le 07-01-2005 à 18:31:32    

et j'appelle ma fonction comme cela : (sachant que la variable passe en get vers une autre page :

Code :
  1. AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);

Reply

Marsh Posté le 07-01-2005 à 18:31:47    

Code :
  1. if(!$_POST['X_logo']){$X_logo="";}elseif($_POST['X_logo']==chr(48)){$X_logo="0";}else{$X_logo=$_POST['X_logo'];}


 
 
essaie ça :
 

Code :
  1. if ( ! isset($_POST['X_logo']) ) $X_logo = '';
  2. else $X_logo = $_POST['X_logo'];


Message édité par SomeBugsInMe le 07-01-2005 à 18:32:51
Reply

Marsh Posté le 07-01-2005 à 18:36:03    

bah j'en reviens à peu pres au même.... il fait pas la difference dans ma fonction entre  
 

Code :
  1. if(empty($x))
  2. {
  3. ...
  4. }
  5. ou
  6. if(!empty($x) || $x==0)
  7. {
  8. ...
  9. }


Message édité par freed102 le 07-01-2005 à 18:36:21
Reply

Marsh Posté le 07-01-2005 à 18:42:51    

je viens d'essayer avec ça :  
 

Code :
  1. elseif(isset($x))
  2. {
  3. $x_img['pos_x']=$x;
  4. }
  5. else
  6. {
  7.  if($pos=="center" || "centre" )
  8.  {
  9.  $x_img['pos_x']=($pagewidth-$x_img['width'])/2;
  10.  }
  11.  if($pos=="droite" )
  12.  {
  13.  $x_img['pos_x']=($pagewidth-$x_img['width'])-$marginright;
  14.  }
  15.  if($pos=="gauche" )
  16.  {
  17.  $x_img['pos_x']=$marginleft;
  18.  }
  19. }


 
toujours pareil !

Reply

Marsh Posté le 07-01-2005 à 18:42:51   

Reply

Marsh Posté le 07-01-2005 à 18:47:56    

et ça :
 

Code :
  1. switch ($x)
  2. {
  3. case "0" : $x_img['pos_x']=$x; break;
  4. case "":
  5.    if($pos=="center" || "centre" )
  6.    {
  7.    $x_img['pos_x']=($pagewidth-$x_img['width'])/2;
  8.    }
  9.    if($pos=="droite" )
  10.    {
  11.    $x_img['pos_x']=($pagewidth-$x_img['width'])-$marginright;
  12.    }
  13.    if($pos=="gauche" )
  14.    {
  15.    $x_img['pos_x']=$marginleft;
  16.    }
  17.    break;
  18. default: $x_img['pos_x']=$x; break;
  19. }


 
... toujours pareil...

Reply

Marsh Posté le 07-01-2005 à 19:50:08    

Concrètement et en termes français (edit : pas parce que tu t'exprimes mal ; je veux dire en termes "non code" ), quelles sont les conditions que tu souhaites sur $_POST['X_logo'] ?  
 
(en admettant que tu n'ais pas utilisé la ligne
 

Code :
  1. if(!$_POST['X_logo']){$X_logo="";}elseif($_POST['X_logo']==chr(48)){$X_logo="0";}else{$X_logo=$_POST['X_logo'];}


 
)


Message édité par sielfried le 07-01-2005 à 19:59:23

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2005 à 21:49:08    

Sielfried a écrit :

Concrètement et en termes français (edit : pas parce que tu t'exprimes mal ; je veux dire en termes "non code" ), quelles sont les conditions que tu souhaites sur $_POST['X_logo'] ?  
 
(en admettant que tu n'ais pas utilisé la ligne
 

Code :
  1. if(!$_POST['X_logo']){$X_logo="";}elseif($_POST['X_logo']==chr(48)){$X_logo="0";}else{$X_logo=$_POST['X_logo'];}


 
)


 
en Francais je veux que "si le POST de 'X_logo' n'existe pas, mettre une valeur vide à la variable $X_logo, si par ailleur le POST de 'X_logo' a le caractere "48" (autrement dit le zero) => donne la valeur "0" au la variable $X_logo, ou si autrechose la valeur de $X_logo prend la valeur de POST['X_logo']"
 
En résumé... si le formulaire n'est pas envoyé : par defaut tu mets une valeur vide (pour donner la main une autre variable "center, left ou right" car on peut pas vraiment spécifier un alignement avec une position en ordonnées "x" )
 
et si le formulaire est envoyé et que c un zero : la valeur prends "0"
ou alors si c un autre chiffre : la valeur prends le chiffre indiqué
 
au depart j'ai pas fait de test sur le zéro, mais j'avais remarqué que dans ma fonction si je met un zero ou un champs vide le resultat est "false" (enfin à priori !)
 
j'en ai déduit ça parceque si je spécifie une valeur dans mon champ "x" supérieure à 1, il m'aligne mon logo à la position indiquée... si je mets "0", il aligne à la position "centre, left ou right" de mon autre variable... alors que je voudrais que "0" soit la position "0" !! (dans mon cas le zero n'est pas une valeur nulle !)
 
voila
bcp de blabla... ceux qui auront eu le courage de lire jusqu'au bout auront peut etre compris quelquechose... ou rien du tout! lol

Reply

Marsh Posté le 07-01-2005 à 22:00:32    

J'avoue avoir lu très en diagonale (en fait plutôt carrément en verticale) à partir du troisième paragraphe, mais a priori une fonction comme empty() n'est pas utile ici (je ne la conseille pas en général), ni chr() d'ailleurs.  
 
Il y a deux cas simples :
- soit il n'y a pas eu de formulaire posté, dans ce cas $_POST['X_logo'] n'est pas défini, ce qu'il faut vérifier par un if (!isset($_POST['X_logo'])) {...}
- soit le formulaire a été posté, dans ce cas $_POST['X_logo'] est défini et il peut valoir 0 ou n'importe quelle autre valeur.
 
Donc :
- si le formulaire n'est pas posté, isset($_POST['X_logo']) retourne false ;
- si le formulaire est posté et que l'utilisateur a inscrit une valeur, alors le isset() retourne true et $_POST['X_logo'] vaut la valeur qu'il a inscrite, même si c'était 0 ;
- si le formulaire est posté et que l'utilisteur n'a saisi aucune valeur, alors le isset() retourne aussi true mais $_POST['X_logo'] vaut la chaîne vide, soit "".
 
Ces trois infos devraient te suffire amplement pour traiter les différents cas possibles.


Message édité par sielfried le 07-01-2005 à 22:01:22

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2005 à 22:23:48    

non mais le probleme n'est pas au niveau du POST, c dans la fonction! car il ne fait pas la difference entre une valeur vide ou un zero !
 
quand je teste avec  
 
if(!empty($x) || $x==0)
{
instruction 1
}
else
{
instruction 2
}
 
que $x="" ou $x=0 il reste sur la premiere instruction ! (enfin ça depend de l'ordre dans laquelle je mets mes instructions ! car si je fais l'inverse :
 
if(empty($x))
{
instruction 2
}
elseif(!empty($x) || $x==0)
{
instruction 1
}
... là il execute l'instruction 2... en somme il prend le premier resultat qui lui parait "true" ! c'est à dire $x=0 ou $x="";

Reply

Marsh Posté le 07-01-2005 à 22:35:18    

Forcément, 0 n'est pas "0".
 
Lorsque $x = 0, ($x == 0) renvoie true, et lorsque $x = "", ($x == 0) renvoie true aussi, car PHP considère qu'une chaîne vaut la valeur numérique 0.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 07-01-2005 à 23:43:06    

Sielfried a écrit :

Forcément, 0 n'est pas "0".
 
Lorsque $x = 0, ($x == 0) renvoie true, et lorsque $x = "", ($x == 0) renvoie true aussi, car PHP considère qu'une chaîne vaut la valeur numérique 0.


 
bon je crois avoir resolu le probleme...
plutot que de faire des if.... elseif... else ... j'ai fait des if... if.. if... et ça marche mieux..
maintenant j'ai un nouveau probleme... completement hallucinant !
 

Code :
  1. $img=AlignImg("temp/$logo.jpg",85,$_GET['X_logo'],$_GET['Y_logo'],$_GET['L_logo'],15,5,5,$_GET['pos_logo']);
  2. $pos_x=Convert2points($img['pos_x']);
  3. echo $pos_x; // il me retourne une valeur tout a fait coherente
  4. $pdf->addJpegFromFile("temp/$logo.jpg",$pos_x,Convert2points(InserseOrdonneesImg(55,$img['pos_y'],$img['height'])),Convert2points($img['width']),Convert2points($img['height']),100); // là il me place mon objet au milieu... quoi qu'il en soit !


La valeur de mon $pos_x est coherente... il me retourne un decimal tout a fait normal... mais dans ma fonction il me place l'objet au milieu alors que j'ai pas demandé ! lol!
par contre si je mets une valeur numerique à la place de $pos_x dans ma fonction... il place mon objet au bon endroit... là je ne comprends pas... c pas tres logique !

Reply

Marsh Posté le 10-01-2005 à 12:36:15    

tjrs pas une idée pour resoudre mon prob de variable ?

Reply

Marsh Posté le 10-01-2005 à 14:45:40    

en fait j'avais le meme problème que toi(avec ta première solution) il me reconnaissait le 0 comme du vide. La seule solution que j'ai trouvé pour palier à sa c'est en mettant 2 zéros. Quand ta variable x=0 tu la met à 00 et hop c'est plus reconnu comme du vide magique non ? :)
Après il te reste justa a prendre juste le 1er zéro quand tu relis ta chaine tu prend que le premier zéro

Reply

Marsh Posté le 10-01-2005 à 14:51:32    

oui mais pour le zero c bon j'ai trouvé la solution...
mais ce que je comprends pas c mon prob pour la variable $pos_x qui est incohérente... je vais reposter mon message sur un autre topic... car c plus le même probleme.. :)

Reply

Marsh Posté le 10-01-2005 à 15:11:50    

justement je me disais que en faisait l'ancienne méthose avec les if elseif else + ma solution peut etre etre que tu n'aira plus ce pb de x a la mauvaise valeur. Enfin je sais pas trop tu peux toujours essayer.

Reply

Marsh Posté le 10-01-2005 à 15:13:11    

bah je peux essayer !mais je suis certain pourtant que la valeur de mon "x" est correcte ! mais elle n'est pas interpretée dans ma fonction "addjepgfromfile"

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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