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

SQL Procédural MySQL Discussion :

php / mysql établir une liste


Sujet :

SQL Procédural MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Par défaut php / mysql établir une liste
    Bonjour,
    Je posséde une base de donnée dont l'une des tables contient les éléments à afficher dans une liste. Ces élements peuvent être des catégories ou des sous-catégories. Pour cela, j'ai créé un champ "parent_id" qui détermine la catègorie parent. Ainsi j'obtient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    id | parent_id | nom
    1         0        catégorie1
    2         0        catégorie2
    3         1        sous-catégorie1.1
    4         1        sous-catégorie1.2
    5         2        sous-catégorie2.1
    6         3        sous-sous-catégorie1.1.1
    A partir de là je voudrais construire une liste (en html <ul><li>) de la façon suivante :

    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
     
    <ul>
      <li>catégorie1</li>
         <ul>
           <li>sous-catégorie1.1</li>
             <ul>
               <li>sous-sous-catégorie1.1.1</li>
             </ul>
           <li>sous-catégorie1.2</li>
         </ul>
      <li>catégorie2</li>
         <ul>
           <li>sous-catégorie2.1</li>
         </ul>
    </ul>
    Je cherche à écrire une fonction en php qui me génére cette liste automatiquement... Seulement pas moyen! Je bloque sur ce problème depuis 2 jours..
    Vous auriez des pistes pour m'aider?
    merci

  2. #2
    Membre expérimenté
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Par défaut
    Essaie le code que j'ai posté ici : http://www.developpez.net/forums/sho...0&postcount=21

    La seule différence dans ma structure, c'est que je définit une page "racine" ayant pour id 1 et comme id_parent 0, mais ça ne devrait pas poser de problèmes dans ton cas...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  3. #3
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Ecrit à la volée, donc pas testé :
    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
    <?php
     
    Class Liste {
     
       var $items;
       var $nom;
       var $id;
       var $parent_id;
     
       function Liste($id, $parent_id, $title) {
          $this->id        = $id;
          $this->parent_id = $parent_id;
          $this->nom       = $nom;
          $this->items = array();
       }
       function add(&$item) {
          $this->items[] =& $item;
       }
       function display() {
          echo '<li>'.$this->nom;
          if (count($this->items)) {
             echo '<ul>';
             foreach($this->items as $key => $nop) {
                $items[$key]->display();
             }
             echo '</ul>';
          }
          echo '</ul>';
       }
    }
     
    ?>
    Et tu peux charger par exemple de la facon suivante :
    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
     
    //On recupère les données de la bd et on construit les listes
    $sql = 'SELECT * FROM ma_table';
    $req = mysql_query($sql);
    $listes = array();
    while($data = mysql_fetch_assoc($req)) {
       $listes[$data['id']] =& new Liste($data['id'], $data['parent_id'], $data['nom']);
    }
     
    //On fait le lien entre les différentes listes
    $racines = array();
    foreach($listes as $id => $nop) {
       if ($listes[$id]->parent_id == 0) {
          $racines[] =& $liste;
       } else {
          $listes[$listes[$id]->parent_id]->add($listes[$id]);
       }
    }
     
    //Affichage
    if (count($racines)) {
       echo '<ul>';
       foreach($racines as $key => $nop) {
          $racines[$key]->display();
       }
       echo '</ul>';
    }
    Voilà une des nombreuses pistes à explorer. HTH

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Par défaut
    Merci beaucoup à tous les 2!!
    J'ai retenu le code de titoumimi, çà marche très bien.

    ++

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 13/02/2007, 11h51
  2. [PHP-JS] tester une liste en php.
    Par lecail65 dans le forum Langage
    Réponses: 3
    Dernier message: 27/07/2006, 13h23
  3. Réponses: 3
    Dernier message: 20/05/2006, 23h28
  4. [PHP-JS] Afficher une liste sur la page ?
    Par bzoler dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 09h41

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