IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

switch(true) récalcitrant sans erreur


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut switch(true) récalcitrant sans erreur
    je me suis inspiré de ce post pour appliquer ce qui suit :

    http://www.developpez.net/forums/sho...ndition+switch
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    // application du tarif correspondant a la tranche de poids
    switch(true)
                            {
    //....//
    case ($sum_Poids <= ($row_2->p19p)) : ($tarif =$row_2->t9); break;
    case ($sum_Poids <= ($row_2->p19))  : ($tarif = $row_2->t9p); break;
    case (($row_2->p20p <  $row_2->p21p) AND  ($sum_Poids <= ($row_2->p20p))) : ($tarif= $row_2->t10); break;
    case (($row_2->p20p <  $row_2->p21p) AND  ($sum_Poids <= ($row_2->p20)))  : ($tarif= $row_2->t10p); break;
    case (($row_2->p20p == $row_2->p21p) AND  ($sum_Poids <= ($row_2->p20)))  : ($tarif= $row_2->t10); break;
    case ($sum_Poids <= ($row_2->p21p)) : ($tarif = $row_2->t11); break;
    case ($sum_Poids <= ($row_2->p21))  : ($tarif = $row_2->t11p); break;
    case ($sum_Poids <= ($row_2->p22p)) : ($tarif = $row_2->t12); break;
    case ($sum_Poids <= ($row_2->p22))  : ($tarif = $row_2->t12p); break;
                          }
    /* Mode de calcul des prix */
    if($sum_Poids  <= $forfait)  {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t6p)  {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t7p)  {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t8p)  {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t9p)  {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t10p) {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t11p) {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t12p) {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t13p) {$cout_jour=$tarif;}
    elseif($tarif==$row_2->t14p) {$cout_jour=$tarif;}
    else($cout_jour = (($sum_Poids / 100)  *  $tarif));
    Je n'ai laissé que les lignes utiles dans la mesures ou la rupture des cases 'p' est à ce niveau.
    Les lignes concernant p19 fonctionnent parfaitement, le soucis est que ce code,
    même s'il ne génére pas d'erreur, n'applique pas l'else du dernier niveau utile au p20 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    else($cout_jour = (($sum_Poids / 100)  *  $tarif));
    alors même que toutes les conditions, à tous les niveaux sont justes.
    (vérifiés en requete directe sur la base pour tous les éléments)

    Je dois 'rater' quelque chose mais je ne vois pas quoi est ce donc ?

    Tout reprendre avec des if/else ? dommage j'aime bien les switch

    merci de vos avis

  2. #2
    Membre éclairé Avatar de mdr_cedrick
    Profil pro
    Développeur multimédia
    Inscrit en
    Janvier 2008
    Messages
    374
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Développeur multimédia

    Informations forums :
    Inscription : Janvier 2008
    Messages : 374
    Par défaut
    est-ce que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    else{$cout_jour = (($sum_Poids / 100)  *  $tarif)};
    fonctionne mieux ?

  3. #3
    Membre confirmé Avatar de nimbus_77
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 69
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 109
    Par défaut je m'en suis tiré ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    // application du tarif correspondant a la tranche de poids
        if($sum_Poids <= $row_2->p11)  {$tarif = $row_2->t1;}
    elseif($sum_Poids <= $row_2->p12)  {$tarif = $row_2->t2;}
    elseif($sum_Poids <= $row_2->p13)  {$tarif = $row_2->t3;}
    elseif($sum_Poids <= $row_2->p14)  {$tarif = $row_2->t4;}
    elseif($sum_Poids <= $row_2->p15)  {$tarif = $row_2->t5;}
    elseif(($row_2->p16p == $poids_MAXI) && ($sum_Poids <= $row_2->p16p)) {$tarif= $row_2->t6  ;}
    elseif(($row_2->p16p < $poids_MAXI) && ($sum_Poids <= $row_2->p16 )) {$tarif= $row_2->t6p ;}
    elseif(($row_2->p16p == $poids_MAXI) && ($sum_Poids <= $row_2->p16 )) {$tarif= $row_2->t6  ;}
    /......./
    elseif(($row_2->p24p < $poids_MAXI) && ($sum_Poids <= $row_2->p24p)) {$tarif= $row_2->t14  ;}
    elseif(($row_2->p24p < $poids_MAXI) && ($sum_Poids <= $row_2->p24 )) {$tarif= $row_2->t14p ;}
    elseif(($row_2->p24p == $poids_MAXI) && ($sum_Poids <= $row_2->p24 )) {$tarif= $row_2->t14  ;}
    /* Mode application des arrondis a 10 ATTENTION $arrondi_10 doit etre 20000 par defaut */
    if($sum_Poids > $arrondi_10 AND $sum_Poids < $arrondi_100 ) {$sum_Poids  =(ceil($sum_Poids/10))*10;} else {}
    /* Mode application des arrondis a 100 ATTENTION $arrondi_100 doit etre 20000 par defaut */
    if($sum_Poids > $arrondi_100 ) {$sum_Poids  =(ceil($sum_Poids/100))*100;} else {}
    /* Mode application du forfait */
    if($sum_Poids < $forfait) {$mode=A;}
    else
            {
                if($tarif==$row_2->t6p) {$mode=A;}
            elseif($tarif==$row_2->t7p) {$mode=A;}
            elseif($tarif==$row_2->t8p) {$mode=A;}
            elseif($tarif==$row_2->t9p) {$mode=A;}
            elseif($tarif==$row_2->t10p){$mode=A;}
            elseif($tarif==$row_2->t11p){$mode=A;}
            elseif($tarif==$row_2->t12p){$mode=A;}
            elseif($tarif==$row_2->t13p){$mode=A;}
            elseif($tarif==$row_2->t14p){$mode=A;}
            else($mode=B);
            }
    switch($mode)
            {
            case($mode==A) : ($cout_jour = $tarif);break;
            case($mode==B) : ($cout_jour=($sum_Poids/100)*$tarif);break;
            }
    J'ai les résultats escomptés dans un temps raisonnable.

    nimbus

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lien <a href> sans erreur
    Par loady dans le forum Langage
    Réponses: 3
    Dernier message: 12/07/2006, 00h14
  2. [Upload] pb upload fichier sans erreur
    Par guns17 dans le forum Langage
    Réponses: 2
    Dernier message: 06/06/2006, 14h30
  3. comment faire un group by sans erreur
    Par phpaide dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/04/2006, 09h11
  4. Restaurer ma Base sans Erreur???
    Par touhami dans le forum Connexion aux bases de données
    Réponses: 9
    Dernier message: 08/03/2006, 17h04
  5. REquete sans erreur sql qui n'agit pas ........
    Par Skam dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/02/2005, 13h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo