Réaliser une boucle
t671
Messages postés
1636
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 40050 Statut Modérateur -
jordane45 Messages postés 40050 Statut Modérateur -
Bonjour,
Je souhaite réaliser un style d'arbre généalogique. Mais je ne sais pas où placer me boucle pour éviter de réécrire sans cesse la même chose.
1° génération : j'écris le 1° individu, puis je recherche et j'affiche ses conjoints/mariage.
2° génération/enfants : je recherche puis j'affiche les enfants de la génération précédente.
Ensuite je veux afficher la 3° génération, et ainsi de suite jusqu'à la fin de ma base.
Voici ce que j'écris :
Mais je n'arrive pas à faire la boucle pour lire toute la base ......
Là, j'affiche le 1° individu de la 2° génération et son 1° enfant !
Où dois-je placer ma boucle ?
Merci
Je souhaite réaliser un style d'arbre généalogique. Mais je ne sais pas où placer me boucle pour éviter de réécrire sans cesse la même chose.
1° génération : j'écris le 1° individu, puis je recherche et j'affiche ses conjoints/mariage.
2° génération/enfants : je recherche puis j'affiche les enfants de la génération précédente.
Ensuite je veux afficher la 3° génération, et ainsi de suite jusqu'à la fin de ma base.
Voici ce que j'écris :
/******1° génération***********
$select1 = 'SELECT * FROM individus WHERE nom = "'.$nom.'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") AND (SUBSTRING(date_naissance, -4) != "") ORDER BY RIGHT(date_naissance,4)';
$result1 = mysql_query($select1,$link) or die ('Erreur : '.mysql_error() );
$row1 = mysql_fetch_array($result1);
echo '<table>';
echo '<tr height="70"><td style="border:1px solid white; text-align: center; font-size: 10px"><img src="images/garcon.gif">';
echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row1['id'].'" target="_blank"><i>'.$row1['nom'].' '.$row1['prenom'].'</i></a><br>';
if (($row1['sexe'] == M) && (!empty($row1['date_naissance'])))
{ echo 'né : '.$row1['date_naissance'].''; }
else
if (($row1['sexe'] == F) && (!empty($row1['date_naissance'])))
{ echo 'née : '.$row1['date_naissance'].''; }
if (!empty($row1['date_dc']))
{ echo '<br>dcd : '.$row1['date_dc'].''; }
echo '</td>';
//******** Affichage conjoints/mariage
$tonarray = array();
if (!empty($row1['date_mariage_1']))
{
$marg_1 = substr($row1['date_mariage_1'], -4);
$date_marg1 = explode (" ",$row1['date_mariage_1']);
if ($date_marg1[0] == "Avant")
{ $marg_1 = $marg_1 - 1 ; }
if ($date_marg1[0] == "Après" || $date_marg1[0] == "Entre" || $date_marg1[0] == "Vers")
{ $marg_1 = $marg_1 + 1 ; }
}
if (!empty($row1['date_mariage_2']))
{
$marg_2 = substr($row1['date_mariage_2'], -4);
$date_marg2 = explode (" ",$row1['date_mariage_2']);
if ($date_marg2[0] == "Avant")
{ $marg_2 = $marg_2 - 1 ; }
if ($date_marg2[0] == "Après" || $date_marg2[0] == "Entre" || $date_marg2[0] == "Vers")
{ $marg_2 = $marg_2 + 1 ; }
}
if (!empty($row1['date_mariage_3']))
{
$marg_3 = substr($row1['date_mariage_3'], -4);
$date_marg3 = explode (" ",$row1['date_mariage_3']);
if ($date_marg3[0] == "Avant")
{ $marg_3 = $marg_3 - 1 ; }
if ($date_marg3[0] == "Après" || $date_marg3[0] == "Entre" || $date_marg3[0] == "Vers")
{ $marg_3 = $marg_3 + 1 ; }
}
if (!empty($row1['date_mariage_4']))
{
$marg_4 = substr($row1['date_mariage_4'], -4);
$date_marg4 = explode (" ",$row1['date_mariage_4']);
if ($date_marg4[0] == "Avant")
{ $marg_4 = $marg_4 - 1 ; }
if ($date_marg4[0] == "Après" || $date_marg4[0] == "Entre" || $date_marg4[0] == "Vers")
{ $marg_4 = $marg_4 + 1 ; }
}
$tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row1['date_mariage_1'] , "conjoint" => $row1['num_cj_1'] , "acte_mariage" => $row1['acte_mariage_1']);
$tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row1['date_mariage_2'] , "conjoint" => $row1['num_cj_2'] , "acte_mariage" => $row1['acte_mariage_2']);
$tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row1['date_mariage_3'] , "conjoint" => $row1['num_cj_3'] , "acte_mariage" => $row1['acte_mariage_3']);
$tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row1['date_mariage_4'] , "conjoint" => $row1['num_cj_4'] , "acte_mariage" => $row1['acte_mariage_4']);
sort($tonarray);
for($i=0; $i<=3; $i++)
{
if ($tonarray[$i]['conjoint'] != "")
{
$query4 = 'SELECT id,num_indiv,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' '; //ORDER BY (SUBSTRING($tonarray[$i]['date_mariage'], -4)) ASC
$result4 = mysql_query($query4) or die(mysql_error());
$row4 = mysql_fetch_array($result4);
if (!empty($tonarray[$i]['date_mariage']))
{ echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : '.$tonarray[$i]['date_mariage'].'<br>'; }
else
{ echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : ?<br>'; }
if ($row4['sexe'] == M)
{ echo '<img src="images/garcon.gif">'; }
else
{ echo '<img src="images/fille.gif">'; }
echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row4['id'].'" target="_blank"><i>'.$row4['nom'].' '.$row4['prenom'].'</i></a><br>';
if (($row4['sexe'] == M) && (!empty($row4['date_naissance'])))
{ echo ' né : '.$row4['date_naissance'].''; }
else
if (($row4['sexe'] == F) && (!empty($row4['date_naissance'])))
{ echo ' née : '.$row4['date_naissance'].''; }
if (!empty($row4['date_dc']))
{ echo '<br> dcd : '.$row4['date_dc'].''; }
echo '</td>';
}
}
echo '</tr><tr><td height="10"></td></tr>';
//******2° génération/enfants***********
if ($row1['sexe'] == M)
{
$select3 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';
$result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() );
}
elseif ($row1['sexe'] == F)
{
$select3 = 'SELECT * FROM individus WHERE num_mere = "'.$row1['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';
$result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() );
}
while ($row3 = mysql_fetch_array($result3))
{
echo '<tr>';
echo '<td></td>
<td style="font-size: 10px"><img src="images/desc_1.jpg" width="120">3</td>
<td align="center" style="border:1px solid white; font-size: 10px" >';
if ($row3['sexe'] == M)
{ echo '<img src="images/garcon.gif">'; }
else
{ echo '<img src="images/fille.gif">'; }
echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row3['id'].'" target="_blank"><i>'.$row3['nom'].' '.$row3['prenom'].'</i></a><br>';
if (($row3['sexe'] == M) && (!empty($row3['date_naissance'])))
{ echo ' né : '.$row3['date_naissance'].''; }
else
if (($row3['sexe'] == F) && (!empty($row3['date_naissance'])))
{ echo ' née : '.$row3['date_naissance'].''; }
if (!empty($row3['date_dc']))
{ echo '<br> dcd : '.$row3['date_dc'].''; }
echo '</td>';
//******** Affichage conjoints/mariage
$tonarray = array();
if (!empty($row3['date_mariage_1']))
{
$marg_1 = substr($row3['date_mariage_1'], -4);
$date_marg1 = explode (" ",$row3['date_mariage_1']);
if ($date_marg1[0] == "Avant")
{ $marg_1 = $marg_1 - 1 ; }
if ($date_marg1[0] == "Après" || $date_marg1[0] == "Entre" || $date_marg1[0] == "Vers")
{ $marg_1 = $marg_1 + 1 ; }
}
if (!empty($row3['date_mariage_2']))
{
$marg_2 = substr($row3['date_mariage_2'], -4);
$date_marg2 = explode (" ",$row3['date_mariage_2']);
if ($date_marg2[0] == "Avant")
{ $marg_2 = $marg_2 - 1 ; }
if ($date_marg2[0] == "Après" || $date_marg2[0] == "Entre" || $date_marg2[0] == "Vers")
{ $marg_2 = $marg_2 + 1 ; }
}
if (!empty($row3['date_mariage_3']))
{
$marg_3 = substr($row3['date_mariage_3'], -4);
$date_marg3 = explode (" ",$row3['date_mariage_3']);
if ($date_marg3[0] == "Avant")
{ $marg_3 = $marg_3 - 1 ; }
if ($date_marg3[0] == "Après" || $date_marg3[0] == "Entre" || $date_marg3[0] == "Vers")
{ $marg_3 = $marg_3 + 1 ; }
}
if (!empty($row3['date_mariage_4']))
{
$marg_4 = substr($row3['date_mariage_4'], -4);
$date_marg4 = explode (" ",$row3['date_mariage_4']);
if ($date_marg4[0] == "Avant")
{ $marg_4 = $marg_4 - 1 ; }
if ($date_marg4[0] == "Après" || $date_marg4[0] == "Entre" || $date_marg4[0] == "Vers")
{ $marg_4 = $marg_4 + 1 ; }
}
$tonarray[0]=array("mariage" => $marg_1 ,"date_mariage" => $row3['date_mariage_1'] , "conjoint" => $row3['num_cj_1'] , "acte_mariage" => $row3['acte_mariage_1']);
$tonarray[1]=array("mariage" => $marg_2 ,"date_mariage" => $row3['date_mariage_2'] , "conjoint" => $row3['num_cj_2'] , "acte_mariage" => $row3['acte_mariage_2']);
$tonarray[2]=array("mariage" => $marg_3 ,"date_mariage" => $row3['date_mariage_3'] , "conjoint" => $row3['num_cj_3'] , "acte_mariage" => $row3['acte_mariage_3']);
$tonarray[3]=array("mariage" => $marg_4 ,"date_mariage" => $row3['date_mariage_4'] , "conjoint" => $row3['num_cj_4'] , "acte_mariage" => $row3['acte_mariage_4']);
sort($tonarray);
for($i=0; $i<=3; $i++)
{
if ($tonarray[$i]['conjoint'] != "")
{
$query4 = 'SELECT id,num_indiv,famille,nom,prenom,sexe,date_naissance,date_dc FROM individus WHERE num_indiv LIKE '.$tonarray[$i]['conjoint'].' '; //ORDER BY (SUBSTRING($tonarray[$i]['date_mariage'], -4)) ASC
$result4 = mysql_query($query4) or die(mysql_error());
$row4 = mysql_fetch_array($result4);
if (!empty($tonarray[$i]['date_mariage']))
{ echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : '.$tonarray[$i]['date_mariage'].'<br>'; }
else
{ echo '<td align="center" style="border:1px solid white; font-size: 10px" >X : ?<br>'; }
if ($row4['sexe'] == M)
{ echo '<img src="images/garcon.gif">'; }
else
{ echo '<img src="images/fille.gif">'; }
echo '<a href="index.php?page=fiche_indiv&famille='.$famille.'&id='.$row4['id'].'" target="_blank"><i>'.$row4['nom'].' '.$row4['prenom'].'</i></a><br>';
if (($row4['sexe'] == M) && (!empty($row4['date_naissance'])))
{ echo ' né : '.$row4['date_naissance'].''; }
else
if (($row4['sexe'] == F) && (!empty($row4['date_naissance'])))
{ echo ' née : '.$row4['date_naissance'].''; }
if (!empty($row4['date_dc']))
{ echo '<br> dcd : '.$row4['date_dc'].''; }
echo '</td>';
}
}
if ($row3['sexe'] == M)
{
$select3 = 'SELECT * FROM individus WHERE num_pere = "'.$row3['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';
$result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() );
}
elseif ($row3['sexe'] == F)
{
$select3 = 'SELECT * FROM individus WHERE num_mere = "'.$row3['num_indiv'].'" AND (SUBSTRING(date_naissance, -4) < "'.$date2.'") ORDER BY RIGHT(date_naissance,4)';
$result3 = mysql_query($select3,$link) or die ('Erreur : '.mysql_error() );
}
echo '</tr><tr><td height="10"></td></tr>';
}
.............etc...............10° génération ..............
Mais je n'arrive pas à faire la boucle pour lire toute la base ......
Là, j'affiche le 1° individu de la 2° génération et son 1° enfant !
Où dois-je placer ma boucle ?
Merci
A voir également:
- Réaliser une boucle
- Réaliser un organigramme - Guide
- Réaliser un camembert graphique - Guide
- Comment réaliser une table des matières sur word - Guide
- Comment réaliser un graphique sur excel - Guide
- Télé samsung s'éteint et se rallume en boucle - Forum Téléviseurs
2 réponses
Bonjour,
Pour ce genre de chose... il est préférable d'utiliser la représentation intervallaire. (ou arbre intervallaire)
Regarde ces tutos :
https://stephanelegrand.wordpress.com/2009/01/03/gestion-dune-structure-darbre-sous-mysql/
https://zestedesavoir.com/tutoriels/250/la-representation-intervallaire/#3-4799_manipulation-de-noeuds
Grâce à cette méthode il est facile d'obtenir tout ou parti d'un arbre (arbre / noeud / branche... appelle ça comme tu veux ^^ )
Pour ce genre de chose... il est préférable d'utiliser la représentation intervallaire. (ou arbre intervallaire)
Regarde ces tutos :
https://stephanelegrand.wordpress.com/2009/01/03/gestion-dune-structure-darbre-sous-mysql/
https://zestedesavoir.com/tutoriels/250/la-representation-intervallaire/#3-4799_manipulation-de-noeuds
Grâce à cette méthode il est facile d'obtenir tout ou parti d'un arbre (arbre / noeud / branche... appelle ça comme tu veux ^^ )
Merci jordane45 ! C'est quand même complexe ............ !!!
En plus, ma base existe déjà et je ne vois pas comment rajouter les colonnes gauche et droite pour les remplir correctement.
Par contre, dans ma base, chaque individu contient un champ avec l'id du père et l'id de la mère. Mais je ne peux pas faire une formule mathématique avec çà !?
En plus, ma base existe déjà et je ne vois pas comment rajouter les colonnes gauche et droite pour les remplir correctement.
Par contre, dans ma base, chaque individu contient un champ avec l'id du père et l'id de la mère. Mais je ne peux pas faire une formule mathématique avec çà !?