Lire et afficher la base complète php

Résolu
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -  
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je veux reprendre un ancien code, mais ça fait longtemps que je n'ai plus programmé ..............

1. Dans un premier temps, le code affiche un individu
2. Puis, il affiche ses épouses (utilisation d'un tableau et de la boucle for).
3. Puis j'affiche les enfants qui sont associés au premier individu (et aux épouses bien sûr)

Arrivé là, je voudrais afficher les épouses du point 3, puis leurs enfants, puis les épouse de ces derniers ...........
Je pense que je devrais faire une boucle avant le point 2 pour balayer toute la base, mais je ne sais comment faire !?

$nom = $_GET['nom']; 

//******1° génération***********	

if ($nom == 'H')
$select1 = 'SELECT * FROM individus WHERE nom = "'.$nom.'" ; 
$result1 = mysql_query($select1) or die ('Erreur : '.mysql_error() );
$row1 = mysql_fetch_array($result1);

if ($row1['sexe'] == 'M')
{	echo '<img src="../images/garcon.gif">';	}
else
{	echo '<img src="../images/fille.gif">';	}
		
echo '<a href="index.php?page=fiche_indiv&famille='.$row1['famille'].'&id='.$row1['id'].'" target="_blank">1.  <i>'.$row1['nom'].' '.$row1['prenom'].'</i></a>';
if ($row1['surnom'] != '')
{	echo ' (dit '.$row1['surnom'].')'; }
echo ' (';
echo SUBSTR($row1['date_naissance'], -4);	
echo '-';
echo SUBSTR($row1['date_dc'], -4);	
echo ') ';

	//******** Recherche et affichage conjoints

$tonarray = array($link);

$marg_1 = substr($row1['date_mariage_1'], -4);
$marg_2 = substr($row1['date_mariage_2'], -4);
$marg_3 = substr($row1['date_mariage_3'], -4);
$marg_4 = substr($row1['date_mariage_4'], -4);
	
$tonarray[0]=array("mariage" => "$marg_1" ,"date_mariage" => $row1['date_mariage_1'] , "conjoint" => $row1['num_cj_1']);
$tonarray[1]=array("mariage" => "$marg_2" ,"date_mariage" => $row1['date_mariage_2'] , "conjoint" => $row1['num_cj_2']);	
$tonarray[2]=array("mariage" => "$marg_3" ,"date_mariage" => $row1['date_mariage_3'] , "conjoint" => $row1['num_cj_3']);	
$tonarray[3]=array("mariage" => "$marg_4" ,"date_mariage" => $row1['date_mariage_4'] , "conjoint" => $row1['num_cj_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'].' ';
		$result4 = mysql_query($query4) or die(mysql_error());
		$row4 = mysql_fetch_array($result4);

		echo '<b>X</b>  '.$tonarray[$i]['mariage'].'';
	  		
		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='.$row4['famille'].'&id='.$row4['id'].'" target="_blank"><i>'.$row4['nom'].' '.$row4['prenom'].'</i></a>';
		echo ' (';
		echo SUBSTR($row4['date_naissance'], -4);	
		echo '-';
		echo SUBSTR($row4['date_dc'], -4);	
		echo ') ';
	}
}	
	
//******2° génération***********	

if ($row1['sexe'] == 'M')
{	$select2 = 'SELECT * FROM individus WHERE num_pere = "'.$row1['num_indiv'].'" ORDER BY RIGHT(date_naissance,4)';	}
elseif ($row1['sexe'] == 'F')
{	$select2 = 'SELECT * FROM individus WHERE num_mere = "'.$row1['num_indiv'].'" ORDER BY RIGHT(date_naissance,4)';	}
$result2 = mysql_query($select2) or die ('Erreur : '.mysql_error() );

while ($row2 = mysql_fetch_array($result2)) 
{	
	echo '<div style="margin-left:60px">';
	if ($row2['sexe'] == 'M')
	{	echo '<img src="../images/garcon.gif">';	}
	else
	{	echo '<img src="../images/fille.gif">';	}
		
	echo '<a href="index.php?page=fiche_indiv&famille='.$row2['famille'].'&id='.$row2['id'].'" target="_blank">2.  <i>'.$row2['nom'].' '.$row2['prenom'].'</i></a>';

	echo ' (';
	echo SUBSTR($row2['date_naissance'], -4);	
	echo '-';
	echo SUBSTR($row2['date_dc'], -4);	
	echo ') ';	

}
A voir également:

4 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour, si tu veux faire cela dans l'ordre des générations, je pense que le plus simple, c'est, quand tu travailles sur une génération, de préparer une liste avec les individus de la génération suivante.
tu pourrais par exemple faire une fonction qui a une liste d'individus en paramètre, fait tout le travail 1., 2., 3. pour chacun de ses individus, et retourne la liste des individus de la génération suivante.
le programme principal appellera cette fonction pour une liste incluant l'individu de départ, puis, tant que la fonction retourne une liste non vide, rappelle la fonction en lui passant la liste retournée.
0
T671
 
Heuuuu, je suis désolé mais je n'ai rien compris. Quelle fonction php utiliser ?
0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 
une fonction que tu vas créer.
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
Bonjour,

Il ne faut pas code chaque génération une par une .... et éviter au maximum de lancer des requêtes dans des boucles.
Ce qu'il te faut.. c'est extraire toutes les données de ta bdd
Boucler dessus afin de générer un array correctement organisé
Utiliser cet array pour générer l'affichage voulu (via du récursif )
Mais bon.. le mieux lorsque l'on veut gérer un arbre généalogique (ou toute structure en forme d'arbre...) c'est déjà de concevoir la bdd correctement et utiliser la gestion d'arbre intervallaire.
https://stephanelegrand.wordpress.com/2009/01/03/gestion-dune-structure-darbre-sous-mysql/
https://sqlpro.developpez.com/cours/arborescence/





0
t671 Messages postés 1476 Date d'inscription   Statut Membre Dernière intervention   11
 
Merci à tous !
L'exemple que donne Jordane est très intéressant ! Mais qui implique une refonte de la base Mysql pour coller au script. A voir ...............
Moi qui pensais imbriquer des boucles dans des boucles .................
0