Boucle Php / compteur

Fermé
DAG - 15 sept. 2008 à 17:11
 DAG - 16 sept. 2008 à 09:23
Bonjour,
j'ai écris le petit bout de code suivant :
function nbParts()
{
	include '../bdd/connexion_bdd.php';
	$statementnbAyantDroitOne = "	SELECT ouvrant_droit.ID AS ID_OD, ouvrant_droit.nom_OD AS NAME, ouvrant_droit.prenom_OD AS FIRSTNAME, ayant_droit.lien_parente_AD AS LIEN
													FROM ouvrant_droit INNER JOIN ayant_droit 
													ON (ouvrant_droit.ID = ayant_droit.ID_OD) ";
	$reqnbAyantDroitOne = mysql_query($statementnbAyantDroitOne) or die('<br>Erreur base de donnée !<br>' . $statementnbAyantDroitOne . '<br>'.mysql_error());	
	echo $statementnbAyantDroitOne . "<br><br>";

	while($data = mysql_fetch_array($reqnbAyantDroitOne))
	{
		$part = 2;
		if ($data[LIEN] == "conjoint")
		{
			$part = $part + 1;
			echo "L'ID " . $data[ID_OD] . " concernant l'ouvrant droit " . $data[NAME] . " " . $data[FIRSTNAME] . " a un conjoint<br>";
			echo "Sa part est de : " . $part . "<br>";
		}
		if($data[LIEN] == "enfant")
		{
			$part = $part + 1;
			echo "L'ID " . $data[ID_OD] . " concernant l'ouvrant droit " . $data[NAME] . " " . $data[FIRSTNAME] . " a un enfant<br>";
			echo "Sa part est de : " . $part . "<br>";
		}
		echo "TOTAL PARTS : " . $part . "<br><br>";
	}
}


Le morceau de code suivant sert a calculer la part en fiscalité.
Il y a deux tables SQL : les parents, et les "enfants".
Chaque parent vaut 2 parts. Chaque enfants de type "enfant" vaut 1 part et chaque enfant de type "conjoint" vaut 1 part aussi. (il y aura d'autre types d'enfants comme retraités a charge, et andicapés...).
Dans le while j'initialise une variable à $part à 2 et je l'incrémente de 1 selon les valeurs des types d'enfants.
Le probleme est que je n'arrive pas à la remettre à 0 ou a 2... lorsque je change de parent dans la requête !

Est-ce que quelqu'un aurai une idée ?

ça donnée ça lorsque j'exécute le code ci-dessus :
SELECT ouvrant_droit.ID AS ID_OD, ouvrant_droit.nom_OD AS NAME, ouvrant_droit.prenom_OD AS FIRSTNAME, ayant_droit.lien_parente_AD AS LIEN FROM ouvrant_droit INNER JOIN ayant_droit ON (ouvrant_droit.ID = ayant_droit.ID_OD)

L'ID 274 concernant l'ouvrant droit xxxxxxxxxxxxxxxxx a un conjoint
Sa part est de : 3
TOTAL PARTS : 3

L'ID 274 concernant l'ouvrant droit xxxxxxxxxxxxxxxxx a un enfant
Sa part est de : 3
TOTAL PARTS : 3

L'ID 274 concernant l'ouvrant droit xxxxxxxxxxxxxxxxx a un enfant
Sa part est de : 3
TOTAL PARTS : 3


J'ai essayer de le triturer dans tous les sens mais rien n'y fait !!
A voir également:

2 réponses

Christounet Messages postés 1264 Date d'inscription mercredi 26 septembre 2007 Statut Membre Dernière intervention 29 juillet 2010 1 387
15 sept. 2008 à 17:49
Bonjour,

Tu peux garder dans une variable la valeur de ID_OD et remettre la variable $part égale à 2 a chaque changement
        $ancien_id_od = ' ';
	while($data = mysql_fetch_array($reqnbAyantDroitOne))
	{
		if ($ancien_id_od != $data[ID_OD])
                {
                     $part = 2;
                     $ancien_id_od = $data[ID_OD]
                }
		if ($data[LIEN] == "conjoint")
		{
			$part = $part + 1;
			echo "L'ID " . $data[ID_OD] . " concernant l'ouvrant droit " . $data[NAME] . " " . $data[FIRSTNAME] . " a un conjoint<br>";
			echo "Sa part est de : " . $part . "<br>";
		}
		if($data[LIEN] == "enfant")
		{
			$part = $part + 1;
			echo "L'ID " . $data[ID_OD] . " concernant l'ouvrant droit " . $data[NAME] . " " . $data[FIRSTNAME] . " a un enfant<br>";
			echo "Sa part est de : " . $part . "<br>";
		}
		echo "TOTAL PARTS : " . $part . "<br><br>";
	}

Tu dois aussi rajouter un order by dans ton select
$statementnbAyantDroitOne = "	SELECT ouvrant_droit.ID AS ID_OD, ouvrant_droit.nom_OD AS NAME,
                 ouvrant_droit.prenom_OD AS FIRSTNAME, ayant_droit.lien_parente_AD AS LIEN
                 FROM ouvrant_droit INNER JOIN ayant_droit
		ON (ouvrant_droit.ID = ayant_droit.ID_OD) ORDER BY ID_OD ";

A plus
1
Merci beaucoup Christounet, encore une fois, c'est toi qui me "sauve" !
Cela dit, sur ce coup là j'aurai quand même du/pu réfléchir un peu avant de poster... La solution n'était pas trop dure à trouver !

Enfin merci quand même !

A+
0