Comptage d'un trableau [Résolu]

Messages postés
3
Date d'inscription
samedi 27 octobre 2018
Dernière intervention
28 octobre 2018
- 27 oct. 2018 à 08:38 - Dernière réponse :
Messages postés
3
Date d'inscription
samedi 27 octobre 2018
Dernière intervention
28 octobre 2018
- 28 oct. 2018 à 17:25
Bonjour,

Je suis nouveau sur le site, je commence à coder quelques petits truc perso.

J'ai un petit soucis. J'aimerai savoir comment additionner des éléments une boucle en faisait un tri.

$requete = mysql_query("SELECT * FROM commande_facture WHERE date = '$commande'");
   if(mysql_num_rows($requete)>=1){ 
   
while ($donnees = mysql_fetch_array($requete) )
{
$id_commande = $donnees['id_commande'];
$id_client = $donnees['id_client'];
$type = $donnees['type'];
$montant = $donnees['montant'];
$cash = $donnees['cash'];
$banque = $donnees['banque'];
$bon = $donnees['bon_achat'];
$date= $donnees['date'];
$information= $donnees['information'];
$modele= $donnees['modele'];
$an = substr($donnees['date'], -4);
$acompte_cash = $donnees['acompte_cash'];
$acompte_banque = $donnees['acompte_banque'];
$acompte_bon = $donnees['acompte_bon'];
$acompte_date =$donnees['acompte_date'];
$num_commande = $donnees['id_co_repa'];
$solde = $montant - $acompte_banque - $acompte_bon - $acompte_cash;
$id_co = $donnees['id_co_repa'];

$soldetotal += $solde;
$soldebanque += $banque;
$soldecash +=  $cash;
   
$panier = mysql_query("SELECT * FROM ligne WHERE id_commande ='$id_commande' && annee = '$an' ORDER BY id_article ASC");
  if(mysql_num_rows($panier)>=1){
  
  while ($donnees1 = mysql_fetch_array($panier) )
{
$code_tva = $donnees1['code_tva'];
if ($code_tva == 1){$tva = 1.21;$tva2 = 21;}
else {$tva = 1.06;$tva2=6;}
if($donnees1['prix_htva'] == ''){
$prix_unitaire = $donnees1['prix_unitaire'];}
else{
$prix_unitaire = $donnees1['prix_htva'] * $tva;
}
$total =($prix_unitaire * (1-($donnees1['remise']/100))) * $donnees1['quantite'];


if($tva2 == 6){$total6 += $total;} else {$total21 += $total;};


$test = $montant - $total6 -$acompte_cash-$acompte_banque;

foreach( $donnees1 as $value ) 
  echo $value . '<br />';



  
  }



if ($total6  == 0) {
         $t6 = $total6;
         }
        else { $t6 = ($total6);
 }
if ($total21 == 0) {
         $t21 = $total21;
        }
        else {
         $t21 = ($montant-$acompte_cash-$acompte_banque);
         $t21s = ($total21-$acompte_cash-$acompte_banque);
         $global21 += ($montant - $acompte_cash - $acompte_banque);
         
 }
        $this->Cell($w[0],6,"Vente Facture B4L$id_commande",0,0,"C");
       
        $this->Cell($w[1],6,''.number_format($total6,2,',','').'' ,0,0,"C");
        $this->Cell($w[2],6,''.number_format($test,2,',','').'' ,0,0,"C");
  $this->Cell($w[3],6,''.number_format(($total6)-($total6/1.06),2,',','').'€' ,0,0,"C");
        $this->Cell($w[4],6,''.number_format(($t21)-($t21/1.21),2,',','').'€',0,0,"C");
        $this->Cell($w[5],6,''.number_format($cash,2,',','').'Ä',0,0,"C");
        $this->Cell($w[6],6,''.number_format($banque,2,',','').'Ä',0,0,"C");   
        $this->Ln();
   
}
}


Dans la premiere boucle, je récupère les premières donnée pour la recherche de la deuxieme boucle .

Cette ligne pose probleme

if($tva2 == 6){$total6 += $total;} else {$total21 += $total;};


voici le tableau a trier

249 - 1
249 - 2
249 - 3
250 - 1
250 - 2
250 - 3

Premiere ligne de la boucle j'ai 249 - 6 mais en deuxième ligne j'ai 250 - 12 (je voudrais avoir juste l'addition deux 3 dernières lignes.

Merci pour votre aide.

EDIT : Correction des balises de code
Afficher la suite 

Votre réponse

4 réponses

Messages postés
23273
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 27 oct. 2018 à 10:06
0
Merci
Bonjour,

Déjà, lorsque tu postes ton code, merci d'y mettre la coloration syntaxique. Pour ça il suffit d'indiquer le langage.
Explications disponibles ici : https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Ensuite, vu que tu débutes, autant partir sur les bonnes pratiques.
Pour commencer, l'extension mysql est obsolète. Il faut désormais utiliser PDO ou mysqli
http://www.commentcamarche.net/faq/43261-php-l-extension-mysql-est-obsolete#top

Il serait bien également de faire de l'indentation dans ton code voir même d'écrire tes instructions en respectant un minimum la norme PSR (tu trouveras sur le net)
Je t'invite au passage à lire et appliquer ceci :
http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Concernant ton souci... il serait bien de nous dire un peu plus que "Cette ligne pose probleme ".
- Un message d'erreur ?
- Le comportement attendu (lequel ? ) n'est pas le bon ?

Sachant que je n'ai pas vu, dans ton code, l'endroit où tu initialises tes deux variables $total6 et $total21.

Personnellement, pour alléger un peu l'écriture du code, j'utiliserai, quand c'est possible, l'écriture ternaire au lieu des if/else habituelle.
Comme ceci:
$total6  = 0;
$total21 = 0;
 while ($donnees1 = mysql_fetch_array($panier) )
{
	$code_tva = $donnees1['code_tva'];
	$tva = $code_tva == 1 ? 1.21 : 1.06;
	$tva2 = $code_tva == 1 ? 21 : 6;
	$prix_unitaire = $donnees1['prix_htva'] == '' ?  (float) $donnees1['prix_unitaire'] : (float) $donnees1['prix_htva'] * $tva;
	
	$total = (float)( ($prix_unitaire * (1-($donnees1['remise']/100))) * $donnees1['quantite']);

	if($tva2 == 6){
		$total6 += $total;
	} else {
		$total21 += $total;
	}



Messages postés
3
Date d'inscription
samedi 27 octobre 2018
Dernière intervention
28 octobre 2018
- 27 oct. 2018 à 11:31
Merci pour les infos, je vais devoir revoir les cours alors ca évolue tellement ;) Le site en question date De 2014 et je modifie un truc ;)

J'ai mis un lien du résultat.

http://admin-test.bike4life-shop.com/admin_site/bilan.php?commande=17-10-2018

En gros le première ligne est bonne. $total6 correspond au montant 6% et $total21 au montant 21%.

Pour la 2e ligne, il additionne le résultat à celui de la première ligne.
Messages postés
23273
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 27 oct. 2018 à 12:56
Oui.
Faut que tu remettes tes variables a zero avant de passer à la seconde ligne
Commenter la réponse de jordane45
Messages postés
3
Date d'inscription
samedi 27 octobre 2018
Dernière intervention
28 octobre 2018
- 28 oct. 2018 à 17:25
0
Merci
Un grand merci ;)
Commenter la réponse de johnjohn88888

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.