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

PHP & Base de données Discussion :

Calcul d'une somme [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut Calcul d'une somme
    Bonjour à tous,

    J'ai besoin d'un peu d'aide pour faire une somme en php.

    Voici une partie de mon code :

    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
      $prix_unit_HT= round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
        echo "<tr></tr>";
        echo "<tr>";
    	echo "<td><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td>";
        echo "<td><font face='arial' size='2' color='#000066'>".$data['NomProduit']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td>";
        echo "<td align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td>";
        echo "<td align='right'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']." € / ".$data['UniteVente']."</font></td>";
    	echo "<td align='right'><font face='arial' size='2' color='#000066'>$prix_unit_HT €</font></td>";
        echo "<td align='center'><a href=".htmlspecialchars("panier.php?action=suppression&r=".rawurlencode($_SESSION['panier']['Reference'][$i]))."><img src='/img/croix.jpg' border='0' /></a></td>";
        echo "</tr>";
       }
      }
     
     
     
     
      echo "<tr><td colspan=\"3\"> </td>";
      echo "<td colspan=\"1\" align='right'><font face='arial' size='3' color='#0066CC'><b>";
     
     Print_r ($_SESSION);
      echo "Total : ".number_format(MontantGlobal(),2)." €";
      echo "</b></font></td></tr>";
     
      echo "<tr><td colspan=\"2\">";
      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
      echo "</td></tr>";
    Et la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    function MontantGlobal(){
    $total=0;
    for($i = 0; $i < count($_SESSION['panier']['Reference']); $i++)
    {
    $total += $data['QteColis'][$i] * $data['QteMoyen'][$i] * $data['PrixUnitaire'][$i] * $_SESSION['panier']['QteCommandee'][$i];
    }
    return $total;
    }
    Cela ne fonctionne pas.

    J'ai pensé autrement faire la somme de ma variable $prix_unit_HT mais je n'y arrive pas. J'ai tout le temps 0.00 €

    Merci pour votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    $data n'existe pas dans ta fonction.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Citation Envoyé par sabotage Voir le message
    $data n'existe pas dans ta fonction.
    Re,

    Tu veux dire que je n'ai pas mis mes paramètres dans les paranthèses ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function MontantGlobal(ICI){

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu peux effectivement transmettre en paramètre.

    Au passage, par parcourir un tableau, utiliser foreach().
    Si tu dois vraiment utiliser une boucle for{}, fait le count() avant la boucle, sinon PHP recompte le tableau a chaque tour.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut Toujours le même problème !!!
    Après un peu d'arrêt, je reprend mon sujet toujours d'actualité.

    Toujours ce problème de somme que je n'arrive pas à résoudre :

    Code de ma page panier.php :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    if (creationPanier())
    {
    $nbArticles=count($_SESSION['panier']['Reference']);
      if ($nbArticles <= 0)
       echo "<tr><td><font face='arial' size='2' color='#000066'>Votre panier est vide </font></ td></tr>";
      else
      {
       for ($i=0 ;$i < $nbArticles ; $i++)
       {
     
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
     
    $res_prod=mysql_query($prod)
         or die (mysql_error());
     
     while ($data = mysql_fetch_assoc($res_prod))
     { extract($data);
     
      $prix_unit_HT= round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
        echo "<tr></tr>";
        echo "<tr>";
    	echo "<td><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td>";
        echo "<td><font face='arial' size='2' color='#000066'>".$data['NomProduit']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td>";
        echo "<td align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td>";
        echo "<td align='right'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']." € / ".$data['UniteVente']."</font></td>";
    	echo "<td align='right'><font face='arial' size='2' color='#000066'>$prix_unit_HT €</font></td>";
        echo "<td align='center'><a href=".htmlspecialchars("panier.php?action=suppression&r=".rawurlencode($_SESSION['panier']['Reference'][$i]))."><img src='/img/croix.jpg' border='0' /></a></td>";
        echo "</tr>";
       }
      }
     
      echo "<tr><td colspan=\"3\"> </td>";
      echo "<td colspan=\"1\" align='right'><font face='arial' size='3' color='#0066CC'><b>";
     
      echo "Total : ".number_format(MontantGlobal($data),2)." €";
      echo "</b></font></td></tr>";
     
      echo "<tr><td colspan=\"2\">";
      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
      echo "</td></tr>";
     
    }
    }
    ?>
    Code de ma fonction MontantGlobal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function MontantGlobal($data){
     
    $total=0;
     
    for($i = 0; $i < count($_SESSION['panier']['Reference']); $i++)
    {
    $total += ($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i]));
    }
    return $total;
    }
    Merci pour votre aide...

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    L'addition des montants doit evidemment être faite dans la boucle, pas en dehors.
    Tu peux d'ailleurs simplement reconditionner $prix_unit_HT que tu n'utilises pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $prix_unit_HT += round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    Merci sabotage pour ton aide !

    Mon $prix_unit_HT, me sert à calculer le total de chaque ligne du panier.

    Effectivement la fonction de calcul n'était pas dans la boucle, J'ai donc déplacé mes 2 accolades, 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    <?
     
    if (creationPanier())
    {
    $nbArticles=count($_SESSION['panier']['Reference']);
      if ($nbArticles <= 0)
       echo "<tr><td><font face='arial' size='2' color='#000066'>Votre panier est vide </font></ td></tr>";
      else
      {
       for ($i=0 ;$i < $nbArticles ; $i++)
       {
     
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
     
    $res_prod=mysql_query($prod)
         or die (mysql_error());
     
     while ($data = mysql_fetch_assoc($res_prod))
     { extract($data);
     
      $prix_unit_HT= round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
     
        echo "<tr></tr>";
        echo "<tr>";
    	echo "<td><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td>";
        echo "<td><font face='arial' size='2' color='#000066'>".$data['NomProduit']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td>";
        echo "<td align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td>";
        echo "<td align='right'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']." € / ".$data['UniteVente']."</font></td>";
    	echo "<td align='right'><font face='arial' size='2' color='#000066'>$prix_unit_HT €</font></td>";
        echo "<td align='center'><a href=".htmlspecialchars("panier.php?action=suppression&r=".rawurlencode($_SESSION['panier']['Reference'][$i]))."><img src='/img/croix.jpg' border='0' /></a></td>";
        echo "</tr>";
     
     
      echo "<tr><td colspan=\"3\"> </td>";
      echo "<td colspan=\"1\" align='right'><font face='arial' size='3' color='#0066CC'><b>";
     
      echo "Total : ".number_format(MontantGlobal($data),2)." €";
      echo "</b></font></td></tr>";
         }
      }        
      echo "<tr><td colspan=\"2\">";
      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
      echo "</td></tr>";
     
     }
    }
    ?>
    J'ai donc bien une somme qui apparait maintenant (différente de 0). Mais elle apparait à chaque ligne (par exemple si j'ai 3 produits dans mon panier, elle apparait après chaque produit), et elle correspond au produit multiplié par le nombre total de produit dans le panier... Aie, ça va faire cher !!!

    (voir PJ)

    Merci.
    Images attachées Images attachées  

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ta fonction n'est en fait pas utile puisque tu fais déjà le calcul pour $prix_unit_HT.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $prix_unit_HT = round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
    $MontantGlobal += $prix_unit_HT;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    407
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 407
    Par défaut
    ça fonctionne,

    Comme tu m'as dis, j'ai enlevé la fonction MontantGlobal que j'ai remplacé par ce que tu m'as donné.

    Et j'ai changé les accolades de place, c'est à cause de ça, que mon total se répétait à chaque ligne du panier.

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    <?
     
    if (creationPanier())
    {
    $nbArticles=count($_SESSION['panier']['Reference']);
      if ($nbArticles <= 0)
       echo "<tr><td><font face='arial' size='2' color='#000066'>Votre panier est vide </font></ td></tr>";
      else
      {
       for ($i=0 ;$i < $nbArticles ; $i++)
       {
     
    $prod="SELECT * FROM Produit WHERE Reference=".$_SESSION['panier']['Reference'][$i]."";
     
    $res_prod=mysql_query($prod)
         or die (mysql_error());
     
     while ($data = mysql_fetch_assoc($res_prod))
     { extract($data);
     
      $prix_unit_HT= round(($data['PrixUnitaire'] * ($data['QteMoyen']) * ($data['QteColis']) * ($_SESSION['panier']['QteCommandee'][$i])), 2);
      $MontantGlobal += $prix_unit_HT;
     
        echo "<tr></tr>";
        echo "<tr>";
    	echo "<td><font face='arial' size='2' color='#000066'>".htmlspecialchars($_SESSION['panier']['Reference'][$i])."</font></td>";
        echo "<td><font face='arial' size='2' color='#000066'>".$data['NomProduit']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>× ".$data['QteColis']."</font></td>";
    	echo "<td align='center'><font face='arial' size='2' color='#000066'>".$data['QteMoyen']."</font></td>";
        echo "<td align='center'><font face='arial' size='2' color='#000066'><input type=\"text\" size=\"2\" name=\"QteCommandee[]\" value=\"".htmlspecialchars($_SESSION['panier']['QteCommandee'][$i])."\"/></font></td>";
        echo "<td align='right'><font face='arial' size='2' color='#000066'>".$data['PrixUnitaire']." € / ".$data['UniteVente']."</font></td>";
    	echo "<td align='right'><font face='arial' size='2' color='#000066'>$prix_unit_HT €</font></td>";
        echo "<td align='center'><a href=".htmlspecialchars("panier.php?action=suppression&r=".rawurlencode($_SESSION['panier']['Reference'][$i]))."><img src='/img/croix.jpg' border='0' /></a></td>";
        echo "</tr>";
     
     
      echo "<tr><td colspan=\"3\"> </td>";
      echo "<td colspan=\"1\" align='right'><font face='arial' size='3' color='#0066CC'><b>";
    }
    }
     
      echo "Total : ".number_format($MontantGlobal,2)." €";
      echo "</b></font></td></tr>";
     
     
      echo "<tr><td colspan=\"2\">";
      echo "<input type=\"submit\" value=\"Rafraichir\"/>";
      echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";
      echo "</td></tr>";
     
     }
    }
    ?>
    Encore un grand merci à toi !

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

Discussions similaires

  1. [C#2.0] Calcul d'une somme MD5 en plusieurs fois
    Par mister3957 dans le forum C#
    Réponses: 2
    Dernier message: 06/01/2007, 09h16
  2. [Excel] Calcul d'une somme sous condition
    Par netsabes dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/08/2006, 16h09
  3. Calcul d'une somme dans Excel ??
    Par LaVaZza dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 13/06/2006, 22h55
  4. [TCP/IP][CRC] Calcul d'une somme XOR
    Par cyrdec dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 29/05/2006, 17h42
  5. access : calcul d'une somme de 0 sans valeur par défaut
    Par ericbelgium dans le forum Access
    Réponses: 6
    Dernier message: 06/10/2005, 09h05

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