Cumuler des variables depuis une boucle
Bonjour,
Je n'arrive pas à trouver la solution à un problème, c'est pourquoi je viens ici.
Je développe une petite appli php/mysql .
Disons pour simplifier que dans cette base j'ai trois infos :
1 produit
2 prix unitaire
3 quantité
Je me connecte à la base, j'affiche les éléments avec une boucle while et pour le prix total de chaque produit j'utilise ce code :
$tune= (($data["prix_unitaire"]) *($data["quantité"]));
Ainsi à l'affichage ça donne par exemple ceci :
Produit : Cocaïne prix unitaire : 250 € quantité : 10
Prix Total : 2500 €
Produit : klenex prix unitaire : 50 € quantité : 5
Prix Total : 250 €
etc...
Mais ce que je ne sais pas faire, c'est à la fin indiquer la totalité des prix totaux, soit faire le cumul de la variable $tune à chaque tour de boucle dans une autre variable finale (totalité des prix totaux).
Dans l'exemple plus haut ça donnerait 2500 + 250 soit 2750.
Voici la partie du code simplifié (sans le css etc...) de ma boucle à supposer que c'est à ce niveau ou plus bas qu'il faille agir :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| while ($data = mysql_fetch_array($show))
{
// affiche toutes les infos
$tune= (($data["prix_unitaire"]) *($data["quantité"]));
echo '
<b>produit :</b> '.$data['designation'].'
<b>quantité :</b> '.$data['quantité'].'
<b>Prix unitaire:</b> '.$data['prix_unitaire'].'
<b>coût :</b>'.$tune.' HT
</div>
';
} |
Cordialement
Philippe
Réponses bého32 Seb33300 boo64
Ok merci à vous trois.
bého32,
Ce qui pourrait justifier cette erreur, c pe tout simplement que je fais référence à cette colonne vituelle sans qu'il y est de correspondance avec une table, puisqu'elle n'appartient à aucune des deux que je croise :
Code:
if (empty ($mov) ) { $requete = "SELECT * FROM globale,historique where globale.id=historique.produit "; }
seb33300,
Merci pour ton code je testerai cela lundi.
boo64,
Je crois mieux comprendre ta stratégie qui se situe en amont pour le calcul du prix total dans un but d'allégement de code.
Par contre je ne sais pas encore pourquoi ça ne marche pas, mais avec le code de seb33300 je vais pouvoir avoir plus de détail sur l'erreur.
Quoiqu'il en soit merci à vous tous de m'avoir aidé.
J'ai appris tout seul à programmer en m'aidant des tutoriaux sur internet, mais parfois je bloque.
Pb résolu, réponse à Boo64 et Seb3300
Bonjour,
Je viens de faire différents test, qui m'ont permis de comprendre mon erreur qui m'empêchait d'utiliser la stratégie de Boo64.
Le code de Seb3300 m'a permis de mieux cerner le pb via un retour de message d'erreur plus précis, grâce au code (mysql_error()), qui m'a indiqué qu'il y avait une ambiguïté ds les noms de champ, effectivement je croisais deux tables avec deux noms de champs identiques.
De plus il y avait un autre pb de syntaxe.
Non seulement travailler sur l'application de Boo64 m'a permis de mieux comprendre une autre façon de faire, mais aussi de me rendre compte de ce pb de doublon qui renvoyait une valeur erronée dans mon ancien code.
Voici la syntaxe ( en rouge l'ajout du nouveau code) :
$requete = "SELECT * , prix_unitaire*quantité2 as prix_tot FROM globale,historique where globale.id=historique.produit ";
Donc pas besoin de parenthèses, mais il ne fallait pas oublier la virgule derrière l'étoile de sélection globale.
Intéressant tout cela.
Merci à tous ceux qui m'ont aidé.
Cordialement
Philippe.