[RESOLU] SWITCH : Avant de devenir fou... ?!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] SWITCH : Avant de devenir fou... ?!

Re: SWITCH : Avant de devenir fou... ?!

par FlorentB » 09 juin 2016, 23:03

MERCI ! J'ai juste remplacé la première condition (0) par un "if" et tout fonctionne parfaitement ;) Et merci aussi pour l'explication !

Bonne soirée

Re: SWITCH : Avant de devenir fou... ?!

par Spols » 09 juin 2016, 14:47

le switch n'est pas le mieux pour ça.

mais tu peux faire un switch(true) ... pour que ca marche (voir doc php)

La raison :
le switch va comparer ta valeur $poidstotal avec le résultat de tes conditions.
comme le résultat d'une condition est un booléen, php transforme ton poidtotal en booléen. 0 = false tous les autres = true
donc arrivé au premier cas, 0(FALSE) == TRUE => false
second cas : 0(FALSE) == FALSE (car 0 n'est pas strictement supérieure à 0) => TRUE

pour les autres poids, disons 351
premier cas : 351(TRUE) == FALSE (351 diférent de 0) => FALSE
second cas: 351(TRUE) == FALSE (351 est supérieur à 350) => FALSE
dernier cas: 351(TRUE) == TRUE(351 est dans ton dernier interval) => TRUE

En fait c'est un abus du language php le fait que ca marche pour autre chose que 0
donc soit tu compare true à des conditions soir tu fais une suite de if elseif

SWITCH : Avant de devenir fou... ?!

par FlorentB » 09 juin 2016, 14:29

Salut à tous,

Je viens vers vous pour une question ultra basique et pourtant qui va bientôt me rendre fou...

Voici mon code, un switch très simple :

Code : Tout sélectionner

echo 'Poids total : '.$poidtotal; echo '<br/>Livraison : '; switch ($poidtotal) { case ($poidtotal == 0) : echo 'Option 1'; break; case ($poidtotal > 0 && $poidtotal <= 350) : echo 'Option 2'; break; case ($poidtotal > 350 && $poidtotal <= 700) : echo 'Option 3'; break; }
La page me renvoi :

Poids total : 0
Livraison : Option 2

Au lieu de Option 1, puisque le poids est de 0.... Le script marche très bien pour les autre cas (entre 1 et 350 kg, puis 351 et 700kg), mais pas pour 0... Ca fait deux heures que je tourne en rond, alors que le code est super simple... J'ai essayé une conversion en int, j'ai essayé un <1 à la place du ==0... Mais rien ne change !

Une idée ?
Merci ;)