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 :

Récupérer des catégories et sous catégories d'une table dans un <Select <option value="">> [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut Récupérer des catégories et sous catégories d'une table dans un <Select <option value="">>
    Bonjour,

    J'essaye de faire une page d'administration pour écrire des articles,
    je voudrai que l'on puisse choisir une catégorie (qui sera l'onglet de la page web) et une sous catégorie (qui correspondra à la page web sélectionnée) et qui s'enregistrera dans la sous-catégorie de la page sélectionnée.

    J'ai créé une table "categories"
    Nom : 2018-04-26_11h44_29.png
Affichages : 1606
Taille : 68,7 Ko

    J'ai fait 1 fonction pour préparer ma requete :
    Nom : 2018-04-26_11h53_31.png
Affichages : 1276
Taille : 11,7 Ko

    Côté HTML, j'ai fait un formulaire avec des boucles foreach pour récupérer mes catégories et sous-catégories, mais je n'arrive à avoir le résultat que je veux....
    Voila mon code partie HTML :
    Nom : 2018-04-26_11h57_36.png
Affichages : 1642
Taille : 31,5 Ko

    Et Voila l'affichage que j'obtiens :
    Pour la page de destination, j'ai bien tous les onglets de page web
    Nom : Capture d’écran (2).png
Affichages : 1360
Taille : 47,0 Ko

    Mais pour la catégorie, j'ai 5 fois la même chose :
    Nom : Capture d’écran (3).png
Affichages : 1356
Taille : 50,2 Ko

    Pouvez vous m'aider
    Merci

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Bonjour,

    La prochaine fois utilise les balises code, plutôt qu'une image c'est plus facile pour nous des copier/coller de ton code, afin de t'aider.

    As-tu remarqué que dans la partie où tu fais un double foreach pour avoir les sous-catégorie, tu n,'as qu'un seul endforeach ????????

  3. #3
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Bonjour,

    La prochaine fois utilise les balises code, plutôt qu'une image c'est plus facile pour nous des copier/coller de ton code, afin de t'aider.

    As-tu remarqué que dans la partie où tu fais un double foreach pour avoir les sous-catégorie, tu n,'as qu'un seul endforeach ????????

    Ok, j'ai bien noté pour les balises.

    Non je n'avais pas remarqué avoir une seule balise de fermeture endforeach, j'avoue qu'en php je tatonne, il dois me manquer autre chose car php me met des erreurs quand je veux fermer cette 2eme balise...je ne sais pas ou la positionner...

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 496
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 496
    Points : 12 596
    Points
    12 596
    Par défaut
    Je dois bien avouer ne pas comprendre l'intérêt d'avoir des noms de sous-catégories qui sont en fait des noms de catégories.

    Il vous manque pas une tables sous-catégorie ?

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

    ...choisir une catégorie (qui sera l'onglet de la page web) et une sous catégorie (qui correspondra à la page web sélectionnée)...
    @MaitrePylos
    catégorie et sous catégorie sont dans la même table.
    Les sous catégorie sont liées à leur "catégorie parente" via la colonne "sousCategorie".


    1- Ce que tu as appelé "sousCategorie" dans ta table porte à confusion.
    En fait, tu devrais l'appeler : "idCatParent" (id de la catégorie parente), ce serait plus clair !


    2- Tu n'as aucun besoin d'avoir 2 <select> * : un seul suffit !
    en effet, le fait de choisir une sous-catégorie sélectionne automatiquement la catégorie (via "idCatParent").

    Encore faut-il que toutes les catégories aient au moins une sous-catégorie. **

    * Je te parlerais bien de 2 select, avec "listes liées via Ajax", mais j'ai peur de te perdre en route...


    3- Pour afficher aussi les catégories dans le <select> des sous-catégories, il existe la balise <optgroup>.


    4- ** On peut aussi rendre l'<optgroup> sélectionnable (au cas où il n'y a pas de sous-catégorie) en lui mettant son "id_categorie" en value (comme pour les <option>)
    Sinon, pour les désactiver (empêcher la sélection), on ajoute disabled.



    N.B. Si tu ne fais pas de copier-coller de ton code, je ne mets pas non plus de code....

  6. #6
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Tout d'abord, merci de ta réponse, en effet en faisant un seul SELECT je peux récupérer les noms relatifs au idCatParent, mais ce n'est pas comme ca que je voulais présenter ma page.

    Code de ma fonction :
    function getCategories()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {
        require 'bdd.php';
        $req = $bdd->prepare('SELECT id, nomCategorie, idCatParent FROM categories WHERE idCatParent !=0 ORDER BY nomCategorie');
        $req->execute();
     
        $data = $req->fetchAll();
        return $data;
        $req->closeCursor();
    Code partie HTML :
    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
     
    <div class="form-group">
    					<label>Choisissez la page de destination...................</label>
    					<select class="categories form-controm" name="categories"/>
     
    					 <?php foreach($categories as $idCatParent): ?>
     
    		           	<option value=""><?= $idCatParent->nomCategorie ?></option>
    		           	<?php endforeach; ?>
     
    					</select>
    				</div>
     
    				<div class="form-group">
    					<label>Choisissez la catégorie</label>
    					<select class="nomCategorie form-controm" class="sousCategories form-controm" name="sousCategories"/>
     
     
    					<?php foreach($categories as $categorie):
     
    							foreach ($categories as $sousCategorie) {
    							if ($sousCategorie->sousCategorie == $categorie->id) {
     
    									}
     
    								}
    							 ?>
     
    	        	   		<option value=""><?= $sousCategorie->nomCategorie ?></option>
    	        	   		<a href="redactor.php?id=<?= $sousCategorie->nomCategorie ?>"></a> ?>
     
    		           	<?php endforeach; ?>
    Voila le résultat, moi j'aurai voulu un choix par ligne : 1/ Choix de la page web 2/Choix de la catégorie

    Je ne connais pas le select <optgroup>, je vais aller voir comment je peux l'utiliser dans ma configuration.
    Merci
    Nom : Capture d’écran (4).png
Affichages : 1274
Taille : 58,9 Ko

  7. #7
    Invité
    Invité(e)
    Par défaut
    non, tu te trompes.
    Je parlais d'un seul <select> (liste déroulante), pas du SELECT SQL.


    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
    <?php
    function getCategorie_parent()
    {
        require 'bdd.php';
        $req = $bdd->prepare('SELECT id, nomCategorie, idCatParent FROM categories WHERE idCatParent =0 ORDER BY nomCategorie');
        $req->execute();
     
        $data = $req->fetchAll();
        return $data;
    }
    function getsousCategorie_byCatParentId( $idCatParent )
    {
        require 'bdd.php';
        $req = $bdd->prepare('SELECT id, nomCategorie, idCatParent FROM categories WHERE idCatParent = :idCatParent ORDER BY nomCategorie');
        $req->execute( array(':idCatParent' => $idCatParent );
     
        $data = $req->fetchAll();
        return $data;
    }
    ?>
    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
    <div class="form-group">
    	<label>Choisissez la catégorie</label>
    	<select class="nomCategorie form-controm" class="sousCategories form-controm" name="id_categorie"/>	
    <?php
    	// Catégories Parentes
    	$catParents = getCategorie_parent();
     
    	<?php foreach($catParents as $catParent): ?>
     
    		<optgroup value="<?= $catParent->id ?>"><?= $catParent->nomCategorie ?>
     
    			// Sous-Catégories de cette Catégorie
    			$sousCats = getsousCategorie_byCatParentId( $catParent->id );
     
    		<?php foreach($sousCats as $sousCat): ?>
     
    			<option value="<?= $sousCat->id ?>"><?= $sousCat->nomCategorie ?></option>
     
    		<?php endforeach; ?>
     
    	</optgroup>
     
    	<?php endforeach; ?>
    ?>
    	</select>
    A NOTER :
    <select ... name="id_categorie"/>
    C'est bien l'id (celui de la table en BDD) qu'on va récupérer, via :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $id_categorie = $_POST['id_categorie'];

  8. #8
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Bonjour,
    J'ai enfin pu tester ton code, il fonctionne bien, il affiche toutes les sous catégories distinctement comme je le voulais. Est il possible que la catégorie principale s'affiche également ? Voici ce que j'obtiens :
    Nom : Capture d’écran (7).png
Affichages : 1263
Taille : 55,1 Ko
    En tout cas un grand merci pour ton aide, j'étais sur ce bout de code depuis plusieurs jours et je tournai en rond....
    Images attachées Images attachées  

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

    1- As-tu regardé le code HTML généré ?

    2- J'ai fait une erreur de syntaxe pour <optgroup>...

    Correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		<optgroup label="-- <?= $catParent->nomCategorie ?> --" disabled="disabled">
    Si on doit obligatoirement choisir une sous-catégorie, on ajoute disabled.
    Dernière modification par Invité ; 28/04/2018 à 14h32.

  10. #10
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Yes ca fonctionne !!! Un grand grand MERCI.............

    J'ai en effet rajouté un label pour afficher les noms de mes pages web :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    foreach($catParents as $catParent): ?>
     
    						<optgroup label="<?= $catParent->nomCategorie ?>"><?= $catParent->nomCategorie ?>
    J'ai testé l'enregistrement dans la BDD et après quelques modifications ca fonctionne bien aussi, ouf un problèmes de moins !! Je passe maintenant à l'étape d'afficher l'article sur la page de mon choix automatiquement......

    Voici le screen du menu qui fonctionne :
    Nom : Capture d’écran (8).png
Affichages : 1309
Taille : 52,6 Ko

  11. #11
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Ouah, il est beau ton select... Je note "optgroup" pour les select avec une hiérarchie car j'en ai parfois besoin.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  12. #12
    Membre à l'essai
    Femme Profil pro
    Création sites web
    Inscrit en
    Novembre 2016
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Création sites web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 26
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par Dendrite Voir le message
    Ouah, il est beau ton select... Je note "optgroup" pour les select avec une hiérarchie car j'en ai parfois besoin.
    Merci !
    Je ne connaissais pas optgroup, mais c'est très pratique en effet....mais pas facile à mettre en place en le mélangeant à php quand on débute.

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

Discussions similaires

  1. Charger une JComboBox ou une JList des données d'un champ d'une table dans une BDD.
    Par MasterMbg dans le forum Codes sources à télécharger
    Réponses: 2
    Dernier message: 27/09/2013, 12h16
  2. Réponses: 1
    Dernier message: 15/12/2011, 14h16
  3. créer des catégories et sous catégories
    Par larreira dans le forum Excel
    Réponses: 5
    Dernier message: 28/04/2009, 11h47
  4. [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
  5. Réponses: 17
    Dernier message: 07/09/2007, 08h06

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