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 :

Affichage des catégories et sous-catégories [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut Affichage des catégories et sous-catégories
    Bonjour tout le monde,

    Je suis entrain de voir pour réaliser un blog et je pèche un peu au niveau des catégories et sous-catégorie.

    Voici la structure de ma table « tbl_categorie » qui correspond aux catégorie et sous-catégorie :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE TABLE IF NOT EXISTS `tbl_categorie` (
      `id_categorie` int(11) NOT NULL AUTO_INCREMENT,
      `libelle_categorie` varchar(255) NOT NULL,
      `categorieid_parent_categorie` int(11) NOT NULL DEFAULT '0' COMMENT '0 => Pas de catégorie parent donc c''est elle le parent.',
      PRIMARY KEY (`id_categorie`),
      KEY `fk_tbl_categorie_tbl_categorie1_idx` (`categorieid_parent_categorie`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=14 ;

    Voici le contenu de ma « tbl_categorie » :
    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
    INSERT INTO `tbl_categorie` (`id_categorie`, `libelle_categorie`, `categorieid_parent_categorie`) VALUES
    (1, 'Cuisine', 0),
    (2, 'Entrée', 1),
    (3, 'Plat', 1),
    (4, 'Dessert', 1),
    (5, 'Entrée 1', 2),
    (6, 'Entrée 2', 2),
    (7, 'Poisson', 3),
    (8, 'Viande', 3),
    (9, 'Poisson 1', 7),
    (10, 'Poisson 2', 7),
    (11, 'Décoration', 0),
    (12, 'Viande 1', 8),
    (13, 'Viande 2', 8);

    J’aimerai obtenir quelque chose du genre :
    Cuisine
        Entrée
            Entrée 1 
            Entrée 2
        Plat
            Poisson
                Poisson 1 
                Poisson 2
            Viande
                Viande 1 
                Viande 2
        Dessert
    Décoration
    Donc je pense qu’il me faut un mélange de HTML et de PHP mais je ne vois pas trop comment faire, quelqu’un aurait-il une idée ?

    Merci par avance.

  2. #2
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    C'est exactement ça il te faut du PHP tu te connectes à la BDD tu récupères toutes tes catégories que tu peux trier en fonction de la catégorie parente.

    Puis tu les parcours et tu les affiches en HTML

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Merci de ta réponse.

    Le problème c'est qu'il y a des sous-catégories de sous-catégories (et je veux prévoir le fait d'avoir des sous-catégories de sous-catégories à l'infini)
    Car pour afficher les catégories(parent) et ensuite les sous-catégories(enfant) direct pas de souci mais les autres (les petits-enfants) je voit pas trop comment faire.

    Je sait pas si je m'exprime correctement ?!

    Merci par avance.

  4. #4
    Membre très actif
    Homme Profil pro
    Déveleoppeur Web/Mobile
    Inscrit en
    Avril 2013
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Déveleoppeur Web/Mobile
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 330
    Par défaut
    Ah si il y a des sous catégories à l'infini ça se complique ... comment tu peux savoir si c'est un noeud ou pas, je pense qu'il faut revoir ton modèle de données

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Ce que tu veux faire, c'est l'affichage d'un arbre (ou treeview)
    En général, ça implique soit la récupération de tout l'arbre en base et une fonction récursive pour l'affichage, soit la récupération du 1er niveau avec une fonction récursive qui récupère les enfants de chaque niveau.
    Tu as une idée du nombre de niveaux possibles et de la taille de la table ?

    Au passage, ça aiderait pour la partie mise en forme si tu avais déjà un exemple de HTML statique, avec les balises et les css.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Réponse à -Rpass- :
    Si c'est une catégorie parent je le sait car dans la colonne "categorieid_parent_categorie" c'est "0" comme valeur.
    Par contre si c'est une sous catégorie dans la colonne "categorieid_parent_categorie", la valeur correspond à l'id de son parent.
    Après si mon schéma est à modifier, je n'y voit pas d'objection mais je voit pas comment faire.

    Réponse à Celira :
    Oui c'est tout à fait ça, je veux faire l'affichage d'un arbre.
    Dans le cas minimum je dirais 5 niveaux mais je veux pas me bloquer à 5 niveaux car on ne sait jamais
    Après au niveau de la mise en forme, je pense plutôt utiliser les balises "ul" et "li" ce qui pourrait donner (avec l'exemple présentée dans mon premier message) ceci :
    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
    <ul>
    	<li>
    		Cuisine
    		<ul>
    			<li>
    				Entrée
    				<ul>
    					<li>
    						Entrée 1
    					</li>
    					<li>
    						Entrée 2
    					</li>
    				</ul>
    			</li>
    			<li>
    				Plat
    				<ul>
    					<li>
    						Poisson
    						<ul>
    							<li>
    								Poisson 1
    							</li>
    							<li>
    								Poisson 2
    							</li>
    						</ul>
    					</li>
    					<li>
    						Viande
    						<ul>
    							<li>
    								Viande 1
    							</li>
    							<li>
    								Viande 2
    							</li>
    						</ul>
    					</li>
    				</ul>
    			</li>
    			<li>
    				Dessert
    			</li>
    		</ul>
    	</li>
    	<li>Décoration</li>
    </u>
    Pour le css, je sait pas trop car je ne connait pas encore le template final du site.

    Merci par avance.

    Loïc.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Citation Envoyé par loic20h28 Voir le message
    ...je veux prévoir le fait d'avoir des sous-catégories de sous-catégories à l'infini...
    J'ai retrouvé une discussion intéressante sur le sujet.

    Avec un lien tout aussi intéressant : modèles de gestion de données hierachiques
    Voir la section : "The Nested Set Model"

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Bonjour tout le monde,

    Je vous remercie pour votre aide mais j'ai enfin trouvé la solution (grâce à ce que Celira m'a indiqué "En général, ça implique soit la récupération de tout l'arbre en base et une fonction récursive pour l'affichage, soit la récupération du 1er niveau avec une fonction récursive qui récupère les enfants de chaque niveau.").

    Voici 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
    16
    17
    18
    19
    20
    21
    22
    23
    echo '<ul>';
    	$sql_categorie = 'SELECT id_categorie, libelle_categorie 
    					  FROM tbl_categorie 
    					  WHERE categorieid_parent_categorie = 0';
    	foreach($dbh->query($sql_categorie) as $row_categorie)
        {
    		echo '<li>'.$row_categorie['libelle_categorie'].'</li>';
    		sous_categorie($row_categorie['id_categorie']);
    	}
    	function sous_categorie($categ) {
    		$dbh = new PDO('mysql:host=localhost;dbname=marie_test', 'root', '');
    		echo '<ul>';
    		$sql_sous_categorie = 'SELECT id_categorie, libelle_categorie 
    							   FROM tbl_categorie 
    							   WHERE categorieid_parent_categorie = '.$categ;
    		foreach($dbh->query($sql_sous_categorie) as $row_sous_categorie)
    		{
    			echo '<li>'.$row_sous_categorie['libelle_categorie'].'</li>';
    			sous_categorie($row_sous_categorie['id_categorie']);
    		}
    		echo '</ul>';
    	}
    	echo '</ul>';
    Cordialement.
    Loïc.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu n'es pas obligé de réouvrir une connexion dans tes FONCTIONS :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $dbh = new PDO('mysql:host=localhost;dbname=marie_test', 'root', '');
     
    echo '<ul>';
    //...............
    foreach($dbh->query($sql_categorie) as $row_categorie)
    {
    	//...............
    }
     
    function sous_categorie($categ) {
    	global $dbh; // VARIABLE GLOBALE
    	//...............
    }
    echo '</ul>';

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 571
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 571
    Par défaut
    Ah oui en effet, j'y est même pas pensée à la variable global!!
    Merci de la remarque constructive en tout cas ^^

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/12/2011, 14h16
  2. créer des catégories et sous catégories
    Par larreira dans le forum Excel
    Réponses: 5
    Dernier message: 28/04/2009, 11h47
  3. [MySQL] Affichage des catégories et sous catégories
    Par onirisme dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 25/10/2007, 10h24
  4. Réponses: 17
    Dernier message: 07/09/2007, 08h06
  5. Affichage incrémenté de catégories et sous-catégories
    Par Djakisback dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 21/09/2006, 21h55

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