Menu dynamique avec BDD

Résolu
Bonjour,

Je voudrais pouvoir incorporer un menu dynamique lié à ma BDD.
J'ai trouvé mon bonheur sur le site "developpez.com
https://pbnaigeon.developpez.com/tutoriel/PHP/conception-site-dynamique/

Tous les liens fonctionnent mais je ne sais pas comment afficher mes pages.
Pouvez-vous m'aider un peu s'ils vous plait.
En vous remerciant beaucoup.

15 réponses

  1. Bonjour

    Merci pour tes encouragements mais je connais les bases du HTML mais pour ça je ne vois pas.
    Peut-être en me donnant quelques explications ça pourrai m'aider.
    Merci
    1. ok alors allons y petit a petit :)
      tu arrives a récupérer les infos de ta base déja ou pas ?
      1. bonjour et merci

        oui j'ai récupéré mes infos de ma BDD
        1. tu peu coller le minima du script que tu utilise on va voir ensemble comment l'adapter pour generer un menu html
          1. Tout d'abord il y a ce script qui affiche soit la page courante soit la page d'accueil
            	// on récupère l'id de la page courante passée par l'URL
            	// Si non défini, on considère que la page est la page d'accueil
            	if (isset($_GET['id_page'])) {
            		$_ENV['id_page'] = intval($_GET['id_page']);
            	} else {
            		$_ENV['id_page'] = $id_page_accueil;
            	}
            

            et la fonction qui.......
            // Affiche les menus.
            // Paramètres : id de la page -> $idpage 
            // (id de la page en cours pour le menu de gauche, id de la page racine (1) pour le menu du haut)
            // Renvoie : le menu sous forme de liste -> $menu_retour
            function affiche_menu($idpage) {
            	// Sélectionne toutes les pages filles de la page en cours
            	$strSQL = 'SELECT 'Id_page', 'Titre' FROM 'pages' WHERE 'Id_parent' = '.$idpage;
            	$resultat = requete_SQL($strSQL);
            	// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.
            	if (mysql_num_rows($resultat) == 0) {
            		$strSQL = 'SELECT 'Id_page', 'Titre' FROM 'pages' WHERE 'Id_parent' = '.$_ENV['id_parent'];
            		$resultat = requete_SQL($strSQL);
            	}
            	$menu_retour = '<ul>';
            	while ($tabl_result = mysql_fetch_array($resultat)) {
            		$menu_retour .= '<li>';
            		$menu_retour .= '<a href="index.php?id_page='.$tabl_result['Id_page'].'">';
            		$menu_retour .= $tabl_result['Titre'];
            		$menu_retour .= '</a>';
            		$menu_retour .= '</li>';
            	}
            	$menu_retour .= '</ul>';
            	return $menu_retour;
            }
            ?>
            
            1. et donc qu'est ce qui ne marche pas ?
          2. ben en fait je ne sais pas comment afficher mes pages dynamiquement.
            Dans ma BDD j'ai 6 champs dont 1 champ "contenu" j'affiche bien toutes les pages via le menu mais elles sont vides.
            mes pages se trouvent dans un dossier "page" à la racine du site.

            voici ma table
            CREATE TABLE IF NOT EXISTS 'pages' (
              'Id_page' int(11) NOT NULL AUTO_INCREMENT,
              'Titre' varchar(255) CHARACTER SET utf8 NOT NULL,
              'Mots_cles' varchar(255) CHARACTER SET utf8 NOT NULL,
              'Description' varchar(255) CHARACTER SET utf8 NOT NULL,
              'Contenu' text CHARACTER SET utf8 NOT NULL,
              'Id_parent' int(11) NOT NULL DEFAULT '1',
              PRIMARY KEY ('Id_page')
            ) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
            
            --
            -- Contenu de la table 'pages'
            --
            
            INSERT INTO 'pages' ('Id_page', 'Titre', 'Mots_cles', 'Description', 'Contenu', 'Id_parent') VALUES
            (1, 'Accueil', 'Accueil', 'Accueil', 'Accueil', 0),
            (2, 'L''association', 'L''association', 'L''association', 'L''association', 1),
            (3, 'Membres', 'Membres', 'Membres', 'Membres', 1),
            (4, 'Galeries', 'Galeries', 'Galeries', 'Galeries', 1),
            (5, 'Infos pratiques', 'Infos pratiques', 'Infos pratiques', 'Infos pratiques', 1),
            (6, 'Historique', 'Historique', 'Historique', 'Historique', 2),
            (7, 'Statuts', 'Statuts', 'Statuts', 'Statuts', 2),
            (8, 'Réglement', 'Réglement', 'Réglement', 'Réglement', 2),
            (9, 'Musiciens', 'Musiciens', 'Musiciens', 'Musiciens', 3),
            (10, 'Responsables', 'Responsables', 'Responsables', 'Responsables', 3),
            (11, 'Récompenses', 'Récompenses', 'Récompenses', 'Récompenses', 3),
            (12, 'Photos', 'Photos', 'Photos', 'Photos', 4),
            (13, 'Vidéos', 'Vidéos', 'Vidéos', 'Vidéos', 4),
            (14, 'La presse', 'La presse', 'La presse', 'La presse', 4),
            (15, 'Notre répertoire', 'Notre répertoire', 'Notre répertoire', 'Notre répertoire', 4),
            (16, 'Formations', 'Formations', 'Formations', 'Formations', 5),
            (17, 'Prestations', 'Prestations', 'Prestations', 'Prestations', 5),
            (18, 'Lieu', 'Lieu', 'Lieu', 'Lieu', 5);
            

            Merci
            1. c pas évident si tu colle tout a chaques fois pour bien faire il faudrai que je le copie dans mon editeur de code mais non pask sinon on en finirai jamais...

              colle le minima a l'avenir stp

              essaie juste une simple requete et affiche un champ pour voir, mais sans tout le bazard
          3. En fait je crois que je me suis mal expliqué.

            Si par exemple c'était un menu classique sans BDD j'aurai juste besoin de cliquer sur le lien du menu pour afficher la page historique
            <a href="index.php?body=historique">Historique</a>
            

            avec se script bien sur
            <?php
            //si la valeur "body" de $_GET existe et est différent de NUL
            //alors $corps prend pour valeur les 3 chaines de caractéres concaténé, qui représente l'url que je veux afficher
            if (isset($_GET['body']) && $_GET['body'] != NULL)
                $corps = 'page/' . $_GET['body'] . '.php';
            else
                $corps = 'page/accueil.php';
            ?>
            

            je peux afficher le champ "contenu" de ma table mais juste avec le titre
            je ne peux quand même pas mettre le code de toutes mes pages dans ma base de donnée.
            C'est là que je ne comprend pas.
            Merci
            1. je comprend tout jusque la :
              "je peux afficher le champ "contenu" de ma table mais juste avec le titre "

              le reste je comprend pas ce que tu veux.... :(

              sinon ton systeme est pas mauvais par contre il est vraiment dans les choux niveau sécurité
          4. je suis en train de voir quelques chose et je te redis...

            Merci
            1. c'est encore moi .

              je pensais qu'en rajoutant dans ma table "contenu" page/historique.php
              j'allais pouvoir ouvrir cette page, mais non c'est la galère.
              1. tu peux m'expliquer ça j'ai du mal à comprendre.
                ça concerne mon champ "contenu"

                stocker uniquement l'adresse physique sur le serveur de la page à inclure. A ce moment là, il faudra remplacer l'affichage du contenu en provenance de la base de données par un include du chemin extrait du contenu de la DB

                Je te remercie
                1. en gros tu stoque le nom de la page qui contien le contenu que tu souhaites faire aparaitre apres le click...

                  et tu utilise include pour l'afficher

                  tu récupere ta variable $_POST et tu include la page qui correspond

                  par exemple

                  url => index.php?body=article
                  
                  $page = $_GET['body'];
                  
                  switch($page){
                      case "article" :
                          include 'article.php';
                          break;
                      case "accueil" :
                          include 'accueil.php';
                          break;
                      defaut :
                          include "login.php";
                          break;
                  }


                  ou directement (en faisant quelques controles sinon c'est dangereux ^^)

                  include $_GET['body'];
                  1. Bonjour

                    Ca y est bon sang de bonsoir..........................................

                    Super cool ça fonctionne comme je le souhaitais.
                    C'est génial.
                    Un grand merci pour tout.
                    1. alors explik ce que tu as fait car je t'avoue je ne vois toujours pas exactement ce que tu voulais faire :)
                      1. Bonjour,
                        En fait j'ai du rajouter tout simplement le chemin relatif dans mon champ contenu. "page/menu_membre/membre.php"

                        C'est ton dernier post qui ma donnée la puce à l'oreille.

                        A+
                        Merci
                        1. Ca remonte un peu, mais j'ai toujours pas compris, porrait tu mieux expliquer stp

                          Merci