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 et sous menu déroulant


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut Menu et sous menu déroulant
    Bonjour,

    dans l'optique de la refonte d'un site internet, j'aimerais changer le menu.
    Ce que j'aimerais faire c'est une sorte de menu déroulant, horizontal et sous l'image du site. En cliquant sur la catégorie souhaitée, on obtient une liste comportant les sous-catégories.
    Puis en cliquant sur les sous-catégories, la page appelée s'ouvre.

    1er problème : comment puis-je faire ce menu en utilisant une base de données ?

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    create table sommaire(
    	numSommaire int(10) NOT NULL AUTO_INCREMENT,
    	nomSommaire VARCHAR2(25),
    	CONSTRAINT Pk_Sommaire PRIMARY KEY (numSommaire));
    INSERT INTO SOMMAIRE VALUES (1, 'Accueil');
    INSERT INTO SOMMAIRE VALUES (2, 'Eau');
    INSERT INTO SOMMAIRE VALUES (3, 'Electricité');
    INSERT INTO SOMMAIRE VALUES (4, 'Eclairage public');
    INSERT INTO SOMMAIRE VALUES (5, 'GRD');
    INSERT INTO SOMMAIRE VALUES (6, 'Contact');
    INSERT INTO SOMMAIRE VALUES (7, 'Liens utiles');
    INSERT INTO SOMMAIRE VALUES (8, 'Relevés');
    J'ai bien entendu la fonction de connexion à la base
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $base = mysql_connect('localhost', 'root', '');  
    		mysql_select_db('ume', $base);
    		$req = mysql_query("SELECT * FROM sommaire");
    		$requete = mysql_query($req, $base);
    Si vous pouviez m'aider, merci ! Je posterais mes autres problèmes ensuite.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Personnellement je ne le verrait pas comme ça. Je verrais plutôt une table catégories:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    CREATE TABLE IF NOT EXISTS `categories` (
      `id` BIGINT(25) NOT NULL AUTO_INCREMENT,
      `name` VARCHAR(90) NOT NULL,
      `description` TEXT NULL,
      `parent` BIGINT(25) NULL,
      PRIMARY KEY (`id`),
      UNIQUE (`name`)
    ) ENGINE=innodb;
    Ainsi tu peux créer tes menu en fonction des catégories avec des catégories parentes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    INSERT INTO `categories` (`id`,`name`, `description`) VALUES
    (0, 'index', 'Sommaire'); 
    INSERT INTO `categories` (`id`,`name`, `description`, `parent`) VALUES
    (1, 'cat1', 'Première catégorie', 0),
    (2, 'cat1', 'Seconde catégorie', 0),
    (3, 'cat1', 'Troisième catégorie', 0),
    (4, 'cat11', 'Première catégorie > sous categorie 1', 1),
    (5, 'cat12', 'Première catégorie > sous categorie 2', 1),
    (6, 'cat13', 'Première catégorie > sous categorie 3', 2),
    (7, 'cat21', 'Seconde catégorie > sous categorie 1', 0);
    Ensuite, tu n'a plus qu'a construire le menu


    --- EDIT: j'ai fait ça à l'arache et ça marche pas en fait >>> voir 2 post plus loin

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    J'ai édité le titre, il est plus juste ainsi.

    Je ne comprends pas trop les bases que tu me proposes
    Est-ce que tu peux un peu expliciter ?

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    Citation Envoyé par feldi Voir le message
    J'ai édité le titre, il est plus juste ainsi.

    Je ne comprends pas trop les bases que tu me proposes
    Est-ce que tu peux un peu expliciter ?
    dans ta base ou voit on les sous catégories ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mai 2010
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2010
    Messages : 347
    Par défaut
    Ah bah oui, c'est exact.
    Merci. Je vais donc changer mes bases.

    En fait je l'avais déjà fait mais je pensais pas que ça me servirait. :/
    Code sql : 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
     
    create table sousCateg(
    	numSousCateg int(10) NOT NULL AUTO_INCREMENT,
    	nomSousCateg VARCHAR2(25),
    	numSommaire int(10) NOT NULL,
    	CONSTRAINT Pk_sousCateg PRIMARY KEY (numSousCateg)
    	CONSTRAINT Fk_sousCateg FOREIGN KEY (numSommaire) REFERENCES SOMMAIRE (numSommaire)
    	);
     
    -- Accueil
    INSERT INTO sousCateg VALUES (1, 'Présentation générale', 1);
    -- Eau
    INSERT INTO sousCateg VALUES (2, 'Présentation technique', 2);
    INSERT INTO sousCateg VALUES (4, 'Contrôle sanitaire', 2);
    INSERT INTO sousCateg VALUES (5, "Tarif de l\'eau potable", 2); 
    INSERT INTO sousCateg VALUES (6, 'Règlement de service', 2);
    INSERT INTO sousCateg VALUES (7, 'Rapport annuel', 2);
    INSERT INTO sousCateg VALUES (8, 'Relevé de vos index', 2);
    -- Electricité
    INSERT INTO sousCateg VALUES (9, 'Présentation technique', 3);
    INSERT INTO sousCateg VALUES (10, 'Tarifs règlementés', 3);
    INSERT INTO sousCateg VALUES (11, 'Infos EJP', 3);
    INSERT INTO sousCateg VALUES (12, 'Infos factures', 3);
    INSERT INTO sousCateg VALUES (13, 'Statistiques coupures', 3);
    INSERT INTO sousCateg VALUES (14, 'Relevé de vos index', 3);
    -- Marché public
    INSERT INTO sousCateg VALUES (15, 'Dématérialisation des marchés publics', 4);
    -- GRD
    INSERT INTO sousCateg VALUES (16, 'Photovoltaïque', 5);
    INSERT INTO sousCateg VALUES (17, 'Catalogue des prestations', 5);
    INSERT INTO sousCateg VALUES (18, 'Barème de raccordement', 5);
    -- Contact
    INSERT INTO sousCateg VALUES (19, 'Vos interlocuteurs', 6);
    INSERT INTO sousCateg VALUES (20, 'E-mail', 6);
    INSERT INTO sousCateg VALUES (21, "Plan d\'accès", 6);
    INSERT INTO sousCateg VALUES (22, "Horaires d\'ouverture", 6);
    INSERT INTO sousCateg VALUES (23, 'Communes desservies', 6);
    -- Liens utiles
    INSERT INTO sousCateg VALUES (24, 'Liens utiles', 7);
    INSERT INTO sousCateg VALUES (25, "Relevés d\'index en cas d\'absence", 7);
    -- Historique des relevés
    INSERT INTO sousCateg VALUES (26, "Analyse d\'eau", 8);
    INSERT INTO sousCateg VALUES (27, "Qualité de l\'eau", 8);

    ça va aussi de cette façon? Même si c'est pas exactement comme tu m'as montré ?

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Comme tu as fait là c'est pas faux. Je trouvais ça plus cohérent de tout mettre dans une seule table avec une relation 1-n sur elle même:


    Ainsi, tu peux créer autant de catégories et de niveaux de sous catégories que tu souhaite, avec une seule table, en gardant la sécurité des contraintes.

    Le code :
    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
     
    CREATE  TABLE IF NOT EXISTS `mydb`.`categories` (
      `id` BIGINT(25) UNSIGNED NOT NULL AUTO_INCREMENT ,
      `name` VARCHAR(90) NOT NULL ,
      `description` TEXT NULL ,
      `parent_category` BIGINT(25) UNSIGNED NULL ,
      PRIMARY KEY (`id`) ,
      INDEX `fk_categories_categories` (`parent_category` ASC) ,
      UNIQUE INDEX `unique_name` (`name` ASC) ,
      CONSTRAINT `fk_categories_categories`
        FOREIGN KEY (`parent_category` )
        REFERENCES `mydb`.`categories` (`id` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB
    Insérer une catégorie racine:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into categories (`name`,`description`,`parent_category`) values ('root', 'Index', null);
    Insérer une sous catégorie (sous la racine):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    insert into categories (`name`,`description`,`parent_category`) values ('Cat1', 'First category', 1);
    (bon et cette fois c'est testé et ça marche :p)

    Je te fais un exemple de requête de séléction bouge pas.
    Images attachées Images attachées  

Discussions similaires

  1. Ajouter un menu et sous menu suite au menu popup Profile As
    Par kkt8 dans le forum Eclipse Platform
    Réponses: 7
    Dernier message: 12/04/2013, 14h57
  2. [XL-2003] Menu et sous menus déroulants
    Par sevy1 dans le forum Excel
    Réponses: 2
    Dernier message: 13/12/2012, 16h49
  3. XML: Prob avec sous-menu d'un menu déroulant
    Par SirTurbo dans le forum Valider
    Réponses: 1
    Dernier message: 26/03/2009, 09h08
  4. Barre de menu et sous-menu déroulant
    Par Ginko dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 04/07/2008, 07h08
  5. Menu, avec sous menu et sous sous menu
    Par flolane dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 15/12/2006, 08h57

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