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 :

Pb sur un script tout simple !


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut Pb sur un script tout simple !
    Bonjour tout le monde,

    j'ai un problème sur un script tout bête de calcul , c'est sûrement pas grand chose mais je suis dessus depuis longtemps et je n'arrive pas du tout à voir ce qui peut clocher...

    Le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($to<=12){$frais=1.5;}
    if(($to>12)&&($to<14.85)){$frais=5.6;}
    if(($to>14.85)&&($to!=19.80)&&($to!=24.75)&&($to!=29.70)&&($to<70)){$frais=5.6;}
    if(($to==14.85)||($to==19.80)){$frais=2;}
    if(($to==24.75)||($to==29.70)){$frais=3;}
    if($to>=70){$frais=6.65;}
    $toto=$to+$frais;
    Pour vous expliquer un peu, ça calcul les frais selon le total ($to). Ca marche pour tout les cas de figure SAUF lorsque $to = 14.85, je comprend pas pourquoi

    En faisant un echo de $to, ça affiche bien 14.85 mais si je fais le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($to==14.85){echo '$to est égal à 14.85';}
    ça n'affiche rien !

    Help !

  2. #2
    Membre averti
    Homme Profil pro
    Coordinateur développement web
    Inscrit en
    Août 2004
    Messages
    475
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Coordinateur développement web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2004
    Messages : 475
    Points : 412
    Points
    412
    Par défaut
    Marche très bien chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $to=14.85;
    if($to<=12){$frais=1.5;}
    if(($to>12)&&($to<14.85)){$frais=5.6;}
    if(($to>14.85)&&($to!=19.80)&&($to!=24.75)&&($to!=29.70)&&($to<70)){$frais=5.6;}
    if(($to==14.85)||($to==19.80)){$frais=2;}
    if(($to==24.75)||($to==29.70)){$frais=3;}
    if($to>=70){$frais=6.65;}
    $toto=$to+$frais;
    echo $toto;
    $toto = 16.85

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 81
    Points : 52
    Points
    52
    Par défaut
    Bonjour

    Je sais pas si c'est ce que vous cherchez à obtenir.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($to==14.85){echo '$to est égal à 14.85';}
    ça n'affiche rien ! même pas $to ???[/CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
     
    $to = 14.85;
     
    if($to==14.85){echo $to.' doit etre égal à 14.85'}
     
    echo $toto;
     
    ?>
    Je suis d'accord avec votre point de vue la programmation quand ca fonctionne pas du premier coup =>

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Merci pour ta réponse

    c'est vrai que si je prends cette portion de script à part dans une page test.php par ex. ben ça marche... C'est à n'y rien comprendre.
    C'est peut-être dû au reste du code. Mais je comprends pas vu que $to est bien calculé et fait bien 14.85 (puisqu'il s'affiche dans l'echo) pourquoi ça bloque ?
    et pourquoi ça bloque juste pour 14.85 et pas les autres (19.80, 24.75, etc...)

    je vais péter les plombs !

  5. #5
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    ca fonctionne meme avec ton script. Perso je ne vois pas le problème

    seule chose bizzare dans ton script, c'est ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($to==14.85){echo '$to est égal à 14.85';}
    essaye plutot avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($to==14.85){echo "$to est égal à 14.85";}

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Du nouveau : si je force $to avec un ça fonctionne...
    Ce qui veut dire que ça vient peut-être du script de calcul de $to qui est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $i=0;
    $nb=1;
    $to=0;
     
    while ($i<=6) {
      if(${'prod'.$i}!=""){
      echo "Article ".$nb." : ".${'qte'.$i}." ".${'prod'.$i} ; //ex: Article 1 : 3 portes clés
      echo ." = ".${'prix'.$i}*${'qte'.$i}." €"; // prix unitaire x quantité
      $to+=${'prix'.$i}*${'qte'.$i}; // ajoute au total
      }
    $nb++;
    $i++;
    }
    mais c'est vraiment bizarre parce que quand je fais ça m'affiche bien
    $to=14.85
    donc la calcule a l'air bon et je vois toujours pas pourquoi ça bloque uniquement sur le total de 14.85 et pas les autres.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    SegmentationFault, merci de ta réponse, oui j'ai essayé, et ... c'est pareil

  8. #8
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    premierement il faut que t'errete de t'enerver car ca sert à rien!! le fait d'avoir des problèmes qu'on comprend pas fait partie integrante de la programmation....

    comment tu peux dire que ce script fonctionne ??
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while ($i<=6) {
      if(${'prod'.$i}!=""){
      echo "Article ".$nb." : ".${'qte'.$i}." ".${'prod'.$i} ; //ex: Article 1 : 3 portes clés
      echo ." = ".${'prix'.$i}*${'qte'.$i}." €"; // prix unitaire x quantité
      $to+=${'prix'.$i}*${'qte'.$i}; // ajoute au total
      }
    $nb++;
    $i++;
    }
    essaye d'enlever le point rouge, afficher la valeur de $to à la sortie de ce scrip, s'assurer que c'est bien ce que t'attendais, et apres tu postules

    quand j'ai essayé ton scrip moi, j'ai eu
    PHP Parse error: parse error, unexpected '.'
    ca sert à rien de crier si on ne fait pas le choses dans les regles

  9. #9
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Et avec un code plus propre comme ceci :
    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
    $to=14.85;
     
    if ($to<=12.0)
    {
    	$frais=1.5;
    }
    elseif ( ($to>12.0) && ($to<14.85) )
    {
    	$frais=5.6;
    }
    elseif ( ($to>=14.85) && ($to<70) )
    {
    	switch( $to )
    	{
    		case 14.85 :
    		case 19.80 :
    			$frais=2;
    			break;
    		case 24.75 :
    		case 29.70 :
    			$frais=3;
    			break;
    		default :
    			$frais=5.6;
    	}
    }
    else
    {
    	$frais=6.65;
    }
     
    $toto=($to+$frais);
     
    echo $toto;
    Cela ne fonctionne-t-il pas mieux ?

    Pour ma part, j'obtient bien 16.85

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut
    Korko Fain > Merci, effectivement c'est plus propre mais malheureusement ça donne le même résultat...

    SegmentationFault > en fait le point rouge, c'est moi qui a fait l'erreur en postant (j'ai enlever des trucs pour alléger).
    Comme je l'ai dit plus haut, quand j'affiche la valeur $to à la sortie du script, elle affiche bien 14.85, c'est pour ça que je ne comprends pas pourquoi ça bloque puisque $to=14.85.
    Mais si je laisse tomber le calcul de $to (prix muliplié par la quantité c'est à dire: 4.95 x 3), en remplaçant directement par là ça va marcher (alors que c'est sensé revenir au même).

    Je sais pas si je m'explique bien, dîtes le moi si c'est pas clair
    En tout cas c'est sympa à vous de m'aider

  11. #11
    Membre actif
    Homme Profil pro
    Responsable d'une MOE bancaire
    Inscrit en
    Juillet 2003
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Responsable d'une MOE bancaire

    Informations forums :
    Inscription : Juillet 2003
    Messages : 261
    Points : 226
    Points
    226
    Par défaut
    bon qu'est ce que tu veux qu'on te dise, c'est tu nous dis qu'à la sortie de ton premier script t'as bien et on a tous essayé ton deuxieme script et on a eu le meme resultatconclusion : t'as certianement un problème ailleur!! si le contenu de ta page n'est pas trop lent, tu peux l'afficher et on verra

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    hello,

    peut-etre que la (non) réponse à ton probleme pourrait se trouver là :

    http://www.php.net/manual/fr/language.types.float.php

    si le probleme est là, et que tu dois travailler avec BC, je te souhaite bon courage

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 24
    Points : 18
    Points
    18
    Par défaut j'ai trouvé !
    J'ai enfin trouvé !

    en arrondissant $to à 2 chiffres après la virgule, ça marche :
    ce qui est vraiment bizarre dans cette histoire c'est que $to affichait malgré tout 14.85 alors que c'était faux finalement ...

    pour ceux qui veulent tester :
    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
     
    // code sans round() ne marche pas
    echo '<b>code sans round() -> marche pas</b>';
    $to=4.95*3;
     
    if($to==14.85){echo '<br>$to est égal à 14.85<br>';}
    else{echo '<br>$to est différent de 14.85<br>';}
     
    if($to<=12){$frais=1.5;}
    if(($to>12)&&($to<14.85)){$frais=5.6;}
    if(($to>14.85)&&($to!=19.80)&&($to!=24.75)&&($to!=29.70)&&($to<70)){$frais=5.6;}
    if(($to==14.85)||($to==19.80)){$frais=2;}
    if(($to==24.75)||($to==29.70)){$frais=3;}
    if($to>=70){$frais=6.65;}
    $toto=$to+$frais;
    echo 'frais = '.$frais.'<br>total = '.$toto.'<br>';
     
    // code avec round()
    echo '<br><b>code avec round() -> marche !</b>';
    $to=4.95*3;
    $to=round($to,2);
     
    if($to==14.85){echo '<br>$to est égal à 14.85<br>';}
    else{echo '<br>$to est différent de 14.85<br>';}
     
    if($to<=12){$frais=1.5;}
    if(($to>12)&&($to<14.85)){$frais=5.6;}
    if(($to>14.85)&&($to!=19.80)&&($to!=24.75)&&($to!=29.70)&&($to<70)){$frais=5.6;}
    if(($to==14.85)||($to==19.80)){$frais=2;}
    if(($to==24.75)||($to==29.70)){$frais=3;}
    if($to>=70){$frais=6.65;}
    $toto=$to+$frais;
    echo 'frais = '.$frais.'<br>total = '.$toto.'<br>';
    Merci à tout ceux qui ont pris le temps de me répondre !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/11/2010, 14h25
  2. Commons validator sur un exemple tout simple?
    Par ®om dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 11/05/2009, 16h34
  3. java.lang.NoClassDefFoundError sur un exemple tout simple
    Par Invité dans le forum Services Web
    Réponses: 2
    Dernier message: 23/02/2009, 10h36
  4. Script tout simple avec GreaseMonkey
    Par jpascal dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 14/06/2007, 11h25
  5. Script tout simple qui ne marche pas sous IE
    Par Bleuarff dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2007, 18h48

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