Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 28/12/2007, 12h51   #1
Membre habitué
 
Inscription : mai 2007
Messages : 262
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 262
Points : 137
Points : 137
Par défaut [Conception] Sommaire à plusieurs niveaux dynamique

Bonjour,

Tout d'abord, Bonnes fêtes à toutes et à tous !!!

Voila dans ma BDD, j'ai une table contact qui a cette structure :

id | nom | prenom | superieur |

(je simplifie...)

mon champ superieur est spécifique car il contient soit 0 (la personne est au niveau le plus haut) soit l'id du contact qui est supérieur hiérarchiquement...

Cette table me permettrait de faire des tris hiérarchiques, vous me suivez ?

Je ne sais pas actuellement combien de niveau hiérarchique je vais devoir gérer et donc j'aurai besoin d'avoir lors de l'affichage quelque chose dans ce genre :

Code :
1
2
3
4
contact1 (superieur = 0 et id =1)
 contact2 (superieur = 1 et id =2)
   contact3 (superieur = 2 et id =3)
.....
Voila si vous pouviez m'aiguiller poru que ca soit dynamique et non que j'ai à gérer autant de while que de niveau (si c'est possible) !!!

Merci d'avance !
__________________
The Alliance !
Little_flower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 14h09   #2
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
de la programmation récursive en php?

un truc du genre
(c'est de l'algorithmique à toi de coder ça en php :p)

Code :
1
2
3
4
5
6
7
8
9
fonction Afficher_fils(contact) 
{
si nombre_fils=0 
  alors afficher le label de contact
si nombre_fils>0 
  alors afficher le label de contact
            pour chaque fils de contact fils_contact
                faire Afficher_fils(fils_contact)
}
et tu lances la fonction en faisant
Afficher_fils(premier contact);

(si tu as plusieurs premier contact au meme niveau tu adaptes la fonction ou tu fais une boucles sur le premier niveau et tu lances la fonction...)

avec ça juste une petite fonction et pas besoin de while imbriqués... mais ça demander de faire une fonction récursive (oui je sais ça surprend toujours au début le récursif) en php
__________________
Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait.
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.


Spidercochon, spidercochon, il peut marcher au plafond
...MM ......Voici Spidercochon. Aidez le à conquérir le monde
E(....)~....en le reproduisant.
...w
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 14h57   #3
Membre habitué
 
Inscription : mai 2007
Messages : 262
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 262
Points : 137
Points : 137
oula....

Merci pour ta réponse mais je me sens un peu perdue...

Je débute le php (je connais les requetes mysql mais php en lui même...).

Tu as bien compris ce que je voulais mais pourrai tu m'aiguiller pour la construction de ce code récursif ?

Merci d'avance...
__________________
The Alliance !
Little_flower est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 15h20   #4
Membre actif
 
Inscription : août 2002
Messages : 194
Détails du profil
Informations forums :
Inscription : août 2002
Messages : 194
Points : 194
Points : 194
Envoyer un message via MSN à Léortien
bon apparement les fonctions récursives n'ont pas de déclarations particulieres en php
(je te conseille de regarder un petit tuto sur les fonctions php ça ne peut pas faire de mal, et en plus toutes les petits fonctions mysql plus ou moins courantes)

donc
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function affiche_fils($id_contact, $nom, $prenom) 
{
ici tu fais une requete sql ou tu demandes id, nom et prenom des enregistrements qui ont pour supérieur $id_contact
tu récupères le nombre d enregistrements avec mysql_num_rows() dans une variable (ex : $nbr_fils)
 
if ($nbr_fils=='0') 
{
  echo $nom.$prenom;
}
else
{
  echo $nom.$prenom;
  tu recupères id_fils, nom_fils, prenom_fils dans chacun des enregistrement de la requete (dans $id_fils, $nom_fils, $prenom_fils par exemple)
  et tu fais affiche_fils($id_fils, $nom_fils, $prenom_fils)
}
 
}
et pour commencer tu peux lancer ton affichage
avec un
vu que d'après ce que tu as indiqué id=0 est la racine de ton affichage et ne correspond à rien, ça n'affichera rien (ou juste une ligne vide)



c'est tout bête en fait le récursif (c'est puissant mais tout bête c'est juste que la logique récursive n'est pas naturelle pour nous ^^)

pour compléter il faut juste savoir lancer des requetes sql en php (je pense que tu sais :p)
__________________
Tout le monde savait que c'était impossible. Il est venu un imbécile qui ne le savait pas et qui l'a fait.
(\ _ /)
(='.'=) Voici Lapinou. Aidez le à conquérir le monde
(")-(") en le reproduisant.


Spidercochon, spidercochon, il peut marcher au plafond
...MM ......Voici Spidercochon. Aidez le à conquérir le monde
E(....)~....en le reproduisant.
...w
Léortien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/12/2007, 16h04   #5
Membre habitué
 
Inscription : mai 2007
Messages : 262
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : mai 2007
Messages : 262
Points : 137
Points : 137
Merci !!!

Voici le code que j'ai utilisé afin d'avoir une liste !

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
function affiche_fils($id_contact, $nom, $prenom) 
{
 
$req=mysql_query("SELECT * FROM tab_contact WHERE id_superieur='$id_contact'") or die(mysql_error()."erreur select 1");
$nbr_fils=mysql_num_rows($req);
//ici tu fais une requete sql ou tu demandes id, nom et prenom des enregistrements qui ont pour supérieur $id_contact
//tu récupères le nombre d enregistrements avec mysql_num_rows() dans une variable (ex : $nbr_fils)
 
if ($nbr_fils=='0') 
{
  echo "<dl><dt><a href='voirContact.php?id=$id_contact'>$nom $prenom</a></dt>";
}
else
{
  echo "<dl><dt><a href='voirContact.php?id=$id_contact'>$nom $prenom</a></dt>";
 
$req2=mysql_query("SELECT * FROM tab_contact WHERE id_superieur='$id_contact'")  or die(mysql_error()."erreur select 2");
echo "<dl>";
while($res=mysql_fetch_object($req2)) {
$nom_fils=$res->nom;
$id_fils=$res->id_contact;
$prenom_fils=$res->prenom;
 
 
//  tu recupères id_fils, nom_fils, prenom_fils dans chacun des enregistrement de la requete (dans $id_fils, $nom_fils, $prenom_fils par exemple)
  echo "<dt>";
  echo affiche_fils($id_fils, $nom_fils, $prenom_fils);
  echo "</dt>";
  }
  echo "</dl>";
}
echo "</dl>";
}
 
affiche_fils(0,"","");
 
?>
Merci pour ton aide passe de bonnes fêtes !
__________________
The Alliance !
Little_flower est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h03.


 
 
 
 
Partenaires

Hébergement Web