Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 30/01/2010, 12h30   #1 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut Somme des colonnes d'un tableau

Bonjour,

Cela faitun bout de temps que j'ai un problème pour calculer la somme des colonne d'un tableau.
Il s'agit d'un tableau de répartition en fontion des années.

Ci-dessous mon script

Code :
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
<head>
<?php
if (!empty($titre)) //Si le titre est indiqué, on l'affiche entre les balises <title>
{
    echo '<title> '.$titre.' </title>';
}
else //Sinon, on écrit forum par défaut
{
    echo '<title> dus region </title>';
}
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="#" />
</head>
 
<body>
<h2><center><b><u> Ventilation des montants par année d'origine</u></b></center></h2><br><br>
 
<a href="../index.php"> Retour à l'index</a><br>
 
<?php
 
include('../includes/inc_conexion.php');
 
$result = mysql_query("SELECT nom_region FROM region ORDER BY id ASC")or die(mysql_error());
 
echo '<form action="synthese_region.php" method="post">';
echo '<select name="frm_select_region">';
 
while ($row = mysql_fetch_array($result))
	{
	//si c'est le nom de la région qui est commun aux deux tables c'est le champ nom_region que tu dois mettre en value de ton select//
	echo '<option value="'.$row['nom_region'].'">'.$row['nom_region'].'</option>';
	}
 
echo '</select>';
echo '<input type="submit" value="Go" />';
echo '</form>';	
 
 
$var = "";
 
$ligne = "<table BORDER=1 BORDERCOLOR=#CCCCCC BGCOLOR=#fffccc CELLSPACING=0 CELLPADDING=1 WIDTH=100% ALIGN=left font-family='Verdana' size=2px>
			<td bgcolor='#669999'><b><u>Numero</u></b></td>
			<td bgcolor='#669999'><b><u>Societe</u></b></td>
			<td bgcolor='#669999'><b><u>Adhérent</u></b></td>		
			<td bgcolor='#669999'><b><u>Montant</u></b></td>
			<td bgcolor='#669999'><b><u>Anterieur à 2008</u></b></td>
			<td bgcolor='#669999'><b><u>2008</u></b></td>
			<td bgcolor='#669999'><b><u>2009</u></b></td>
			<td bgcolor='#669999'><b><u>2010</u></b></td>
			<td bgcolor='#669999'><b><u>-1 mois</u></b></td>
			<td bgcolor='#669999'><b><u>Vérif</u></b></td>";
 
$total = 0;	
		
if(isset($_POST["frm_select_region"]) AND $_POST["frm_select_region"] != NULL)
	{
	$var = $_POST["frm_select_region"];
	$rqt2 = mysql_query("SELECT * FROM societe WHERE nom_region = '$var' ORDER BY societe")or die(mysql_error());
	}
else
	{
	$rqt2 = mysql_query("SELECT * FROM societe ORDER BY societe")or die(mysql_error());
	}
	
	echo("Région selectionnée : $var </br></br>");
	
if(mysql_num_rows($rqt2) > 0)
	{
	while($tableau2 = mysql_fetch_array($rqt2))
		{
		$id = $tableau2['id_numero'];
		
		$societe = $tableau2['societe'];
		$adherent = $tableau2['adherent'];
		$ville = $tableau2['ville'];
		$region = $tableau2['nom_region'];
		$enseigne = $tableau2['enseigne'];
		$telephone = $tableau2['telephone'];
		$fax = $tableau2['fax'];
		$siret = $tableau2['siret'];
		
		$rqt = mysql_query("SELECT * FROM facture WHERE id_numero = '$id' ORDER BY `id_numero`")or die(mysql_error());
		
		$ant08 = 0; //ici l'initialisation des variables par année//
		$a08 = 0;
		$a09 = 0;
		$a10 = 0;
		$a_1 = 0;
		$annee= "";
		
		//ici initialisation des variables total pour chaque année//
		$Tant08 = 0;
		$Ta08 = 0;
		$Ta09 = 0;
		$Ta10 = 0;
		$Ta_1 = 0; //c'est pour les facture datant d'un - d'un mois ($Ta_1)//
		$Tmont_2 = 0; // sert a la totalisation des lignes
		$Tmont_3 = 0; // sert à la totalisation de la colonne des totaux
		
		
		$mont = 0;
					
		while($tableau = mysql_fetch_array($rqt))
			{
			//calcul par année//
			if($tableau['annee'] < 2008)
				{
				$ant08 += addslashes($tableau['montant']);
				}
			if($tableau['annee'] == 2008)
				{
				$a08 += addslashes($tableau['montant']);
				}
			if($tableau['annee'] == 2009)
				{
				$a09 += addslashes($tableau['montant']);
				}
			if($tableau['annee'] == 2010)
				{
				$a10 += addslashes($tableau['montant']);
				}
			if($tableau['annee'] == 20101)
				{
				$a_1 += addslashes($tableau['montant']);
				}
			//fin du calcul par année//
			
			
			
			$mont += addslashes($tableau['montant']);
			$Tmont_2 = ($ant08 + $a08 + $a09 + $a10 + $a_1); // totalisation de la ligne //
			
			}
		
		$total += $mont; //calcul du total par année//
 
		$Tant08 += $ant08;			
		$Ta08 += $a08;
		$Ta09 += $a09;
		$Ta10 += $a10;
		$Ta_1 += $a_1;		
		$Tmont_3 += $Tmont_2; // Totalisation de la colonne //
 	
		if($mont > 0)
			{
			$ligne .= "<tr>
						<td><a href='../includes/relance_02.php?numero=$id' target='_self'>".$id."</a></td>
						<td>".$societe."</td>
						<td>".$adherent."</td>
						<td align='right' bgcolor='#669999'>".$mont."</td>
						<td align='right'>".$ant08."</td>
						<td align='right'>".$a08."</td>
						<td align='right'>".$a09."</td>
						<td align='right'>".$a10."</td>
						<td align='right'>".$a_1."</td>
						<td align='right' bgcolor='#669999'>".$Tmont_2."</td></tr>"; // total de la ligne //
			}
		}	
	
$ligne .= "<tr><td colspan='3' bgcolor='#669999'>Total Final</td><td align='right' bgcolor='#669999'>".$total."</td>";
$ligne .= "<td colspan='1' align='right' bgcolor='#669999'>".$Tant08."</td>";
$ligne .= "<td colspan='1' align='right' bgcolor='#669999'>".$Ta08."</td>";
$ligne .= "<td colspan='1' align='right' bgcolor='#669999'>".$Ta09."</td>";
$ligne .= "<td colspan='1' align='right' bgcolor='#669999'>".$Ta10."</td>";
$ligne .= "<td colspan='1' align='right' bgcolor='#669999'>".$Ta_1."</td>"; // concerne les factures de moins d'un mois //
$ligne .= "<td colspan='9' align='right' bgcolor='#669999'>".$Tmont_3."</td></tr>"; // total des differents totaux //
 
$ligne .= "</table>";	
 }
echo ("$ligne </br>");
 
mysql_close();
?>
 
 
 
Merci de votre aide car la je galère

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 14h05   #2 (permalink)
Modérateur
 
Avatar de nosferapti
 
Date d'inscription: avril 2009
Messages: 796
Par défaut

ton problème est à quel endroit dans le code ?
__________________
GNAP !
nosferapti est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 14h12   #3 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par nosferapti Voir le message
ton problème est à quel endroit dans le code ?
Bonjour,

Le problème se situe pluto a ce niveau :

Code :
 
//ici initialisation des variables total pour chaque année//
		$Tant08 = 0;
		$Ta08 = 0;
		$Ta09 = 0;
		$Ta10 = 0;
		$Ta_1 = 0; //c'est pour les facture datant d'un - d'un mois ($Ta_1)//
		
		$Tmont_3 = 0; // sert à la totalisation de la colonne des totaux
 
 
$Tant08 += $ant08;			
		$Ta08 += $a08;
		$Ta09 += $a09;
		$Ta10 += $a10;
		$Ta_1 += $a_1;		
		$Tmont_3 += $Tmont_2; // Totalisation de la colonne //
 
 
c'est avec ces variable que je fasi les totaux

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 14h22   #4 (permalink)
Modérateur
 
Avatar de nosferapti
 
Date d'inscription: avril 2009
Messages: 796
Par défaut

et qu'est ce qui ne fonctionne pas avec ce code ? montre nous un exemple
__________________
GNAP !
nosferapti est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 15h04   #5 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par nosferapti Voir le message
et qu'est ce qui ne fonctionne pas avec ce code ? montre nous un exemple
Re,
excuse lors de la création de ce post j'ai oublié de joindre une capture écran

Donc ce qui ne fontionne pas, il ne fait pas le total des colonnes , comme résultat j'a 0 à chaque fois que j'initialise ou pas la variable.

Cf capture écran

Merci de votre aide

Runcafre91

Dernière modification par runcafre91 ; 07/02/2010 à 18h31.
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 30/01/2010, 15h12   #6 (permalink)
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 407
Par défaut

Que te donnent les valeurs $a08, $a09 etc lors d'un echo ?

Au passage, tu as une erreur là :

Code php :
 
if($tableau['annee'] == 20101)
 
Madfrix est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 00h40   #7 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par Madfrix Voir le message
Que te donnent les valeurs $a08, $a09 etc lors d'un echo ?

Au passage, tu as une erreur là :

Code php :
 
if($tableau['annee'] == 20101)
 
bonjour,

J'ai fai un écho de mes différents variable et à chaque fois ils m'affiche 0

Concenant l'erreur signalée ou supposé pourras tu etre plus précis stp

Merci de votre aide

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 12h55   #8 (permalink)
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 407
Par défaut

je pense que c'est 2011 et pas 20101 non ?

Sinon, si tu as toujours 0 pour tes $a08, $a09... alors il semblerait que soit tu n'entres jamais dans tes if (ie: $tableau['annee'] vaut jamais 2008, 2009 etc) soit $tableau['montant'] vaut toujours 0. As tu vérifié ces 2 variables si tu as toujours ton problème ?
Madfrix est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 14h20   #9 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par Madfrix Voir le message
je pense que c'est 2011 et pas 20101 non ?

Sinon, si tu as toujours 0 pour tes $a08, $a09... alors il semblerait que soit tu n'entres jamais dans tes if (ie: $tableau['annee'] vaut jamais 2008, 2009 etc) soit $tableau['montant'] vaut toujours 0. As tu vérifié ces 2 variables si tu as toujours ton problème ?
Re,

j'ai essayé de voir d'ou viens le problème sans succes.

Pour la ventillation par les année cela fonctionne mais c'est seulement que je faire le total de la colonne que la j'ai que des 0

Pour l'erreur que vous avez signalé cela n'en ai pas un, en fait cela siginfie 20101 ---> année 2010 mois 1

pour la ventillation par année voir la capture écran précedent.

Merci pour votre aide.
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 14h31   #10 (permalink)
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 407
Par défaut

Citation:
addslashes — Ajoute des antislashs dans une chaîne
je comprends pas tes instructions

Code php :
 
addslashes($tableau['montant'])
 

Logiquement, tu récupères des montants de ta table non ? dans tout les cas cette fonction t'ajoutera des \ le cas échéant et je vois pas comment tu vas pouvoir ajouter une chaine de caractère avec éventuellement des \ à un montant. Que te donnent les valeurs de tes montants à chaque enregistrement récupéré ?

Code php :
 
while($tableau = mysql_fetch_array($rqt))
      echo $tableau['montant'];
 
Madfrix est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 14h51   #11 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par Madfrix Voir le message
je comprends pas tes instructions

Code php :
 
addslashes($tableau['montant'])
 

Logiquement, tu récupères des montants de ta table non ? dans tout les cas cette fonction t'ajoutera des \ le cas échéant et je vois pas comment tu vas pouvoir ajouter une chaine de caractère avec éventuellement des \ à un montant. Que te donnent les valeurs de tes montants à chaque enregistrement récupéré ?

Code php :
 
while($tableau = mysql_fetch_array($rqt))
      echo $tableau['montant'];
 
Re,

J'ai apporté des modifications en enlevant les addslashes qui n'avaient pas lieu d'être. En faisisant un echo de $tableau['montant']; j'ai bien les montants qui s'affiche.
Au niveau du total de la colonne cela n'a rien changer

Ci-joint une caputre écran

Runcafre91

Dernière modification par runcafre91 ; 07/02/2010 à 18h31.
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 14h57   #12 (permalink)
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 407
Par défaut

ta colonne annee dans ta table est elle en varchar ? Si oui essaie ca :

Code php :
 
...
if($tableau['annee'] < '2008')
        {
		$ant08 += $tableau['montant'];
	}
...
 
Madfrix est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 15h15   #13 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par Madfrix Voir le message
ta colonne annee dans ta table est elle en varchar ? Si oui essaie ca :

Code php :
 
...
if($tableau['annee'] < '2008')
        {
		$ant08 += $tableau['montant'];
	}
...
 
Re,

Le code ci-dessus sert pour le calcule par année, a ce niveau j'arrive a avoir les montant pour chaque année.

Mais ce qui ne fonctionne pas c'est lorsque je veux additionné toute la colonne qu'a chaque fois j'ai 0 en total.

Faut-il créé une nouvelle variable afin de stocké le resultat au fur et a mesure

j'ai créé une variable : $val pour fair eun test sur une colonne
donc j'ai le code suivant :
Code :
$val=$a09;
		
		echo $val;
		
		$Ta09 += $val;
 
 
Lors du écho sur $val j'ai le résultat suivant : 000000023.92000000000001166.10000000001635.53000000439.53000000000002926.02000000000000000000000000000000520.26

Est ce que cela ne serait pas du a un problème de format car avant chaque montant il n'affiche plusieur 0



Merci de votre aide

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 15h23   #14 (permalink)
Membre éprouvé
 
Avatar de Madfrix
 
Date d'inscription: juin 2007
Localisation: Bordeaux
Messages: 407
Par défaut

Pourquoi ne pas changer de requete SQL directement pour qu'elle te fasse le travail ?


Code php :
 
$rqt = mysql_query("SELECT montant, SUM(montant) FROM facture WHERE id_numero = '$id' GROUP BY annee ")or die(mysql_error());
 
Madfrix est actuellement connecté   Envoyer un message privé Réponse avec citation
Vieux 31/01/2010, 15h33   #15 (permalink)
Membre actif
 
Date d'inscription: décembre 2008
Messages: 199
Par défaut

Citation:
Envoyé par Madfrix Voir le message
Pourquoi ne pas changer de requete SQL directement pour qu'elle te fasse le travail ?


Code php :
 
$rqt = mysql_query("SELECT montant, SUM(montant) FROM facture WHERE id_numero = '$id' GROUP BY annee ")or die(mysql_error());
 
Re,

j'avais déja pensé a cette éventualité mais cela ne convenais pas a ce que je voulais faire.

Merci toute de même por l'idée.

Runcafre91
runcafre91 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 23h29.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.