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 :

Menu déroulant à trois niveaux


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2012
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Octobre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Menu déroulant à trois niveaux
    Bonjour,

    Je suis un débutant en ce qui concerne la programmation de sites web à l'aide de PHP/MySql, mais j'ai quand même quelques années d'expérience et j'ai déjà pu créer des sites avec console d'administration et tout.

    Je bosse actuellement sur un mandat, tout se passait bien jusque quand j'appris que mon patron désire un menu dynamique (alors que j'avais déjà tout prévu pour qu'il soit fixe, bref, je recommence tout!).

    Voici à quoi le menu ressemblerait :

    [Menu1]
    - -[Page1]
    - -[Page2]
    - -[Menu1.1]
    - - - -[Page3]
    - - - -[Page 4]
    - - - -[Menu 1.1.1]
    - - - - - -[Page 5]
    - - - - - -[Page 6]

    J'ai déjà défini le style css pour que mon menu soit déroulant. En ce qui concerne le HTML, je place le tout dans une liste, jusqu'alors faite à la main.

    Pour ce système, un maximum de trois niveaux est autorisé. Mon problème, c'est que je n'ai jamais fais ça et je ne m'en sors pas avec la base de donnée ! J'ai pensé que la meilleure solution serait d'effectuer un auto-jointure sur une table "menus", qui contiendrait entre autre une clé étrangère qui pointerait sur l'ID du menu parent.

    Mon autre soucis, c'est comment faire apparaître mon menu, correctement listé avec du PHP ? A savoir qu'un menu, contient d'autres menus ainsi que des pages qui se trouvent dans une autre table.

    J'utilise des while pour faire apparaître le résultat de mes requêtes SQL, est-ce possible avec ceux-ci pour faire ce que je veux ?

    Merci d'avance pour vos réponses !!

  2. #2
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonjour,
    Moi aussi je débute (depuis pas mal de temps...). J'ai beaucoup galéré pour obtenir un menu déroulant à 3 niveaux. Si je peux t'aider aujourd'hui ce sera avec plaisir. Je te transmets mon code qui marche très bien. Il s'agit de choisir un pays puis un département puis une commune. Tout est extrait de la base sql. Il me semble que c'est ce que tu souhaites. Ce code est inclus dans un fichier de traitement de formulaire avec un include pour la connexion à la Bdd.
    Bon courage et très bonne journée,
    Evelyne

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    <?php
    $idp = (empty($_POST['ID_pays']) ? -1 : intval($_POST['ID_pays']));
    $idp = (($idp < -1) || ($idp == 0) ? -1 : $idp);
     
    $iddp = (empty($_POST['ID_departement']) ? -1 : intval($_POST['ID_departement']));
    $iddp = (($iddp < -1) || ($iddp == 0) ? -1 : $iddp);
     
    $idc = (empty($_POST['ID_commune']) ? -1 : intval($_POST['ID_commune']));
    $idc = (($idc < -1) || ($idc == 0) ? -1 : $idc);
     
    $rech_pays = parcoursRs(SQLSelect("SELECT `id_pays`, `codePays`, `nomPays` FROM `PAYS` ORDER BY 'nomPays'"));
    ?> 
    <p>Pays (*): 
        <select name="ID_pays" id="nomPays" onchange="document.forms['chgdepartement'].submit();">
            <option value='-1'>Choisissez un pays</option>-->
            <?php
            foreach ($rech_pays as $pays)
            {
                ?>            
                <option value='<?php echo $pays["id_pays"]; ?>' <?php echo (($idp == $pays['id_pays']) ? " selected='selected'" : null); ?>><?php echo $pays['nomPays']; ?></option>  
                <?php
            }
            ?>
        </select> 
     
    </p>
    <?php
    if ($idp != -1)
    {
        $rech_departement = parcoursRs(SQLSelect("SELECT `id_departement`, `codeDepartement`,`nomDepartement` FROM `DEPARTEMENT` WHERE `id_pays` = $idp"));
        ?>
        <p>
            Département (*): 
            <select name="ID_departement" id="nomDepartement" onchange="document.forms['chgdepartement'].submit();">
                <option value='-1'>Choisissez un département</option>
                <?php
                foreach ($rech_departement as $departement)
                {
                    ?>
                    <option value="<?php echo $departement['id_departement']; ?>" <?php echo (($iddp == $departement['id_departement']) ? " selected=\"selected\"" : null); ?>><?php echo $departement['nomDepartement']; ?></option>
                    <?php
                }
                ?>
            </select>
     
        </p>
        <?php
        if ($iddp != -1)
        {
            $rech_commune = parcoursRs(SQLSelect("SELECT `id_commune`, `codeCommune`,`nomCommune` FROM `COMMUNE` WHERE `id_departement` = $iddp"));
            ?>
            <p>
                Commune (*): 
                <select name="ID_commune" id="nomCommune" onchange="document.forms['chgdepartement'].submit();">
                    <option value='-1'>Choisissez une commune</option>
                    <?php
                    foreach ($rech_commune as $commune)
                    {
                        ?>
                        <option value="<?php echo $commune['id_commune']; ?>" <?php echo (($idc == $commune['id_commune']) ? " selected=\"selected\"" : null); ?>><?php echo $commune['nomCommune']; ?></option>
                        <?php
                    }
                    ?>  
                </select>
     
            </p>
            <?php
            if ($idc != -1)
            {
                //actions si les champs sont sélectionnés
            }
        }
    } else
    {
        ?>
        <div>Vous devez sélectionner un pays</div>
        <?php
    }
    ?>

  3. #3
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    salut,

    c'est bien evelyne tu l'as fini ton truc... je suis fier de toi

    mais c'est pas tout à fait ce que lui veut

    toi tu as un triple enchainement de listes déroulantes dynamiques

    lui veut générer une hiérarchie "fixe" qui sera un menu déroulant (comme les menu d'applications windows par exemple) dont la hiérarchie est stockée en bd

    le principe est simple faire une récursion... ou en pur sql (procédure stockée) ou php/mysql:
    tu fais une fonction qui liste tous les éléments enfants d'un élément parent que tu as passé en paramètre:
    • si au moins un élément est trouvé:
      • tu ouvres une liste: <ul>
      • pour chaque élément trouvé:
        • tu affiches <li><a href='#'>l'élément
        • tu appliques la fonction à l'élément
        • tu fermes la ligne: </li>
      • tu fermes la liste: </ul>
    • sinon tu ne fais rien
    le but est de générer un code xml qui ressemble à ça:
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <ul>
      <li><a href='#'>menu1</a>
        <ul>
          <li><a href='#'>sous-menu1-1</a></li>
          <li><a href='#'>sous-menu1-2</a></li>
          <li><a href='#'>sous-menu1-3</a></li>
        </ul>
      </li>
      <li><a href='#'>menu2</a></li>
      <li><a href='#'>menu3</a></li>
    </ul>
    la subtilité du css (à partir de css2) permet de générer les effets d'apparition/disparition des différents niveaux du menu
    voir cet exemple de cours qui le propose...

    donc tu vois, si tu sais lister tous les éléments qui ont pour parent un élément donné alors rien de compliqué

    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  4. #4
    Membre régulier
    Femme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    210
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 210
    Points : 92
    Points
    92
    Par défaut
    Bonjour eric69 et jonfever,
    Je n'y serais jamais arrivée sans toi Eric, encore merci.
    Pour une fois que je voulais rendre service, je tombe à côté, désolée jonfever !
    Le code marche à merveille, je l'ai étendu aux communes et je le fais suivre !
    Très bonne journée à vous 2,
    Evelyne

Discussions similaires

  1. Css menu déroulant à deux niveaux
    Par tatutatu2009 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 25/04/2015, 18h07
  2. Menu déroulant à plusieurs niveaux (CSS+JS)
    Par Toiine dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 16/04/2015, 11h50
  3. [XL-2010] Menu déroulant multi-niveaux
    Par maxoulagalere dans le forum Excel
    Réponses: 18
    Dernier message: 08/01/2015, 16h29
  4. Menu déroulant à 3 sous-niveaux
    Par derzy971 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 23/02/2010, 10h03
  5. Menu déroulant (select), passer de 2 niveaux à 3 niveaux
    Par DaD92 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 10/12/2006, 21h51

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