IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

[Conception] Sommaire à plusieurs niveaux dynamique


Sujet :

PHP & Base de données

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    de la programmation récursive en php?

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    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...

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Août 2002
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 194
    Points : 216
    Points
    216
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  5. #5
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    262
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mai 2007
    Messages : 262
    Points : 172
    Points
    172
    Par défaut
    Merci !!!

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/06/2012, 08h34
  2. Réponses: 0
    Dernier message: 09/04/2012, 19h43
  3. conception de base héritage de plusieurs niveaux
    Par BECHBECH01 dans le forum Merise
    Réponses: 0
    Dernier message: 02/03/2012, 12h01
  4. treeview dynamique plusieurs niveaux
    Par marwa_rades dans le forum ASP.NET
    Réponses: 0
    Dernier message: 08/05/2011, 18h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo