Comment calculer le total general des prix_totals

cs_hakiman Messages postés 23 Date d'inscription lundi 14 mai 2007 Statut Membre Dernière intervention 26 mai 2008 - 9 nov. 2007 à 10:28
rethenor Messages postés 48 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 9 mai 2011 - 20 nov. 2007 à 15:57
j'ai un table nommé bon_de_travaux il est comme ça:



<?php
 $hote = "localhost";
 $base = "adpub";
 $user = "root";
 $pass = "car";
 
 $cnx = mysql_connect($hote, $user, $pass)
  or die(mysql_error());
  
 $ret = mysql_select_db($base)
  or die(mysql_error());
  
  if(isset($_POST['insert']))
{
$a=$_POST['date'];
$b=$_POST['client'];
$c=$_POST['ign'];
$d=$_POST['qant'];
$e=$_POST['prix_vente'];
$f=$_POST['art'];
$g=$_POST['prix_total'];
$h=SUM('$e'*'$d');
$requet="INSERT INTO `bon_de_traveaux` ( `num_bon` , `date` , `client` , `article` , `designation` , `quantité` , `prix_vente` , `prix_total`,`total` )
VALUES ('', '$a', '$b', '$f' , '$c' , '$d' , '$e' ,'$d'*'$e',SUM(prix_total));
";
if($result=mysql_query($requet))
{
echo" Ajout réussi
";}
else echo"erreur";}
 ?> 
 
<tr>
    <td width="826" height="918" valign="top">      <!--DWLayoutTable-->
     
   <table>
   ----

         <form method=\"post\" action=\"bon_traveaux.php\" enctype=\"multipart/form-data\">
  <table width=\"700\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" bgcolor=\"#FFFFFF\">
    <!--DWLayoutTable-->
  
                ----

                  Bon
                 ,
                ,
               
                ----

                  &nbsp;,
                  ,
                  ,
                  ,
                  ,
                  ,
               
               Date de commannde
                    :,
                  ,
               
      ----

               Client
                    :,
                  ,
               
    ----

               Articles
                    :,
                  ,
               
      ----

                  Designation:,
                  <textarea name="ign" id="ign"></textarea>,
                  &nbsp;,
                 
               
    ----

               Quantité
                   :,
                  ,
               
    ----

               prix du vente
                   :,
                  ,
               
    ----

               prix total                   :,
                  ,
               
   
      ----

          &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp ,
     

    <center>Bon du travaux&nbsp&nbsp &nbsp&nbsp &nbsp &nbsp&nbsp&nbsp&nbsp;
accueil</center>
                
     
et voila son affichage



<form method="post" action="rech_bon.php" enctype="multipart/form-data">
<tr><td height="22">
                    entrer le nom du client souhaité :</td>
                  <td></td>
                  <td>&nbsp;</td>
      <td></td></tr>
      </form>
             
  ----

    <table width="100%" border="0" cellpadding="0" cellspacing="0">
      <!--DWLayoutTable-->
     
 
   ----

         <form method="post" action="rech_bon.php" enctype="multipart/form-data">
  <table width="700" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
    <!--DWLayoutTable-->
  
                ----

                 , Bon du travaux
                 </td>
             
<?php
 $hote = \"localhost\";
 $base = \"adpub\";
 $user = \"root\";
 $pass = \"car\";
 
 $cnx = mysql_connect($hote, $user, $pass)
  or die(mysql_error());
  
 $ret = mysql_select_db($base)
  or die(mysql_error());
  
  if(isset($_POST['rech'])){
  
  ?>
  
  <table border=3 bordercolor=\"black\">
         ----
numero de bon, |Date, |Nom client, |Articles, |Désignations, |Quantité, |prix de vente, |Prix total, |total, |
<?  
$for1 =$_POST['for1'];
$requet=mysql_query(\"select * from bon_de_traveaux where client='$for1'\");

while($result=mysql_fetch_array($requet))
{$total=0;
$a=$result['num_bon'];
$b=$result['date'];
$c=$result['client'];
$d=$result['article'];
$e=$result['designation'];
$f=$result['quantité'];
$g=$result['prix_vente'];
$h=$result['prix_total'];
 $i=SUM($result['prix_total'])
 ?> 
 
 

    ----
<?echo\"$a\";?>, |<?echo\"$b\";?>, |<?echo\"$c\";?>, |<?echo"$d";?>, </th><?echo\"$e\";?>, |</th><?echo"$f";?>, </th><?echo\"$g\";?>, |<?echo\"$h\";?>, |<?echo \"$i\";?>, |
    <td>  <?}?>
                  
     
<?}?>
    
     
     
      <tr><center>Bon du travaux&nbsp&nbsp &nbsp&nbsp &nbsp &nbsp&nbsp&nbsp&nbsp;
accueil</center>



 <!-- DEBUT DU SCRIPT IMPRIMER-->

</tr>
<!-- FIN DU SCRIPT IMPRIMER-->



je veux afficher le total general des prix totals j'ai essaie avec la Fonction SUM() mais rien à afficher
http://louveseule.l.o.pic.centerblog.net/27p1wplx.jpg

1 réponse

rethenor Messages postés 48 Date d'inscription mercredi 11 juillet 2007 Statut Membre Dernière intervention 9 mai 2011
20 nov. 2007 à 15:57
Bonjour Kakiman,


Je ne suis pas sûr d'avoir parfaitement saisi la problématique qui est la tienne mais il me semble, à première vue qu'il y a une sérieuse erreur de conception de ta base de données.


1) il semblerait qu'il y ait redondance dans les données (articles, désignations, prix_vente)
2) on ne stocke jamais dans une base un résultat qui peut être calculé. On le calcule "à la volée".


A première vue, avec les infos que j'ai, je modéliserai ainsi :


Produits  ([num_article], designation, prix_vente)
Clients   ([num_client], nom, prenom, etc...)
Commander ([num_bon, num_client, num_article, date], quantité)


NB: Les champs entre crochets sont clefs-primaire.


Exemples:


PRODUITS:
153 | Chaussettes | 2.00
315 | Pantalon    | 15.50
287 | Chemises    | 14.80


CLIENTS:
1 | DUPONT | Jean ...
2 | DUVAL  | Paul ...
3 | MOREAU | Isabelle ...


COMMANDER:
12 | 2 | 153 | 2007-11-20 15:43:12 | 4
13 | 2 | 287 | 2007-11-20 15:43:12 | 2
14 | 2 | 315 | 2007-11-20 15:43:12 | 1
15 | 3 | 315 | 2007-11-20 16:34:27 | 1


avec:
$requete = "INSERT INTO Commander (num_client,num_article,`date`,quantite) VALUES ("
         . "'" . $_POST["num_client"]  . "','"
         . "'" . $_POST["num_article"] . "','"
         . "'" . date("Y-m-d H:i:s")   . "','"
         . "'" . $_POST["quantite"]    . "');";




Au moment d'afficher ou d'imprimer le bon de commande numéro 52 (par exemple):


=================================================
// ici, connexion à la base de données
$hote = "localhost";
$base = "adpub;
$user = "root";
$pass = "car";
$cnx = mysql_pconnect($hote, $user, $pass) or die(mysql_error());
$ret = mysql_select_db($base) or die(mysql_error());


// ici, requête et exécution
$total_commande = 0;
$requete = "SELECT Produits.*, Clients.*, Commander.*"
         . "  FROM Produits, Clients, Commander"
         . " WHERE Produits.num_article = Commander.num_article"
         . "   AND Clients.num_client = Commander.num_client"
         . "   AND Commander.num_non = 52;";
$resultat = mysql_query($requete,$cnx);


// Traitement 1ère ligne du résultat
$r = mysql_fetch_object($resultat);
echo "$r->nom $r->prenom (commande numéro $r->num_bon) :
";
$total_article = $r->quantite * $r->prix_vente;
echo "$r->designation x $r->quantite = $total_article
";
$total_commande += $total_article;


// traitement des autres lignes, s'il y en a
while($r = mysql_fetch_object($resultat)) {
 $total_article = $r->quantite * $r->prix_vente;
 echo "$r->designation x $r->quantite = $total_article
";
 $total_commande += $total_article;
}


// affichage total commande
echo "TOTAL COMMANDE: $total_commande
";
=================================================


T'auras toujours des problèmes en cas d'évolutoin des données (par ex changement de tarifs) si tu stockes dans ta base des calculs qu'on peut faire en consultant la base.


Je ne sais pas si ça réponds à ton besoin mais moi, je ferais comme ça...


Bon courage.
0
Rejoignez-nous