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

Langage PHP Discussion :

Création d'un mini systéme de catégorie/sous catégorie


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Création d'un mini systéme de catégorie/sous catégorie
    Bonjour, je suis actuellement en développement d'un site dynamiquement, cependant moi qui veut gérer tous par interface () j'ai un petit problème que je suis rester dessus sans avoir trouver la réponse .
    Après avoir fais quelques recherches et quelques test, j'ai pu tout simplement afficher que les catégories "principale". Je m'explique:

    Je voudrais en faite rajouter des catégories et des sous catégorie d'une catégorie (), mais j'ai pu qu'afficher les "pères". Pour les sous catégorie je bloque et ne sais pas quel requête faire (Mise à part un SELECT , peut être une jointure .. =/).

    Maintenant l'explication en image

    Voila mon menu (Visuellement) :



    Et voici les Tables ma Base de données :



    Et les champs concernée :

    Table Category :


    Table sous_cat :


    Et voici mon code:

    index.php
    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
     
    <?php
    	require 'class/__header.php' ;
    ?><!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title>Ludo Depannage Informatique</title>
    		<link rel="stylesheet" href="css/global.css" />
    	</head>
    	<body>
     
    		<!-- BLOC WRAP / PAGE -->
    		<div id="wrap">
    			<!-- BLOC MENU -->
    			<div id="menu">
    				<?php
     
    						$category = $DB->query('SELECT name_cat FROM category');
     
    						foreach ($category as $cat) {
    							?>
     
    								<ul>
    									<li>
    										<a href="#"><?php echo $cat->name_cat ; ?></a>
    									</li>
    								</ul>
     
    							<?php
    						}
    				?>
     
    				<!--
    				<ul>
    					<li><a href="#">Accueil</a></li>
    					<li>
    						<a href="#">Composants</a>
    						<ul>
    							<li><a href="#">Carte mères</a></li>
    							<li><a href="#">Processeurs</a></li>
    							<li><a href="#">Cartes Graphiques</a></li>
    							<li><a href="#">Barrettes mémoires</a></li>
    							<li><a href="#">Boitiers PC</a></li>
    							<li><a href="#">Alimentations</a></li>
    							<li><a href="#">Disques durs</a></li>
    						</ul>
    					</li>
    					<li><a href="#">Périphériques</a></li>
    					<li><a href="#">Ordinateurs</a></li>
    					<li><a href="#">Pc Portable</a></li>
    					<li><a href="#">Smartphones</a></li>
    					<li><a href="#">Ecran PC</a></li>
    					<li><a href="#">Logiciels</a></li>
    					<li><a href="#">Réseaux</a></li>
    					<li><a href="#">Photo/Video</a></li>
    					<li><a href="#">Téléviseurs</a></li>
    					<li><a href="#">Contact</a></li>
    				</ul> -->
     
    			</div>
     
    			<div id="content">
     
    		    </div>
    		</div><!-- FIN BLOC WRAP -->
     
    	</body>
     
    </html>
    __header.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    	require '/class/db.class.php' ;
    	require '/class/category.class.php' ;
    	$DB = new DB();
    	$category = new Category($DB);
    ?>
    db.class.php
    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
     
    <?php
     
    	class DB{
     
    		private $host = 'localhost' ;
    		private $user = 'root' ;
    		private $pass = '';
    		private $database = 'bdd' ;
    		private $db ;
     
    		public function __construct($host = null, $user = null, $pass = null, $database = null){
    			if($host != null){
    				$this->host = $host;
    				$this->user = $user ;
    				$this->pass = $pass ;
    				$this->database = $database ;
    			}
     
    			try{
    				$this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->database, $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'));
    			}catch(PDOException $e){
    				die('<h1> Impossible de se connecter a la base de donnees</h1>');
    			}
    		}
     
    		public function query($sql, $data = array()){
    			$req = $this->db->prepare($sql);
    			$req->execute($data);
    			return $req->fetchAll(PDO::FETCH_OBJ);
    		}
     
    	}
     
     
     
     
    ?>
    category.class.php (Pas encore rajouté des fonctions mais pour plus tard je pense ^^)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?php
     
    class Category{
     
    	private $DB ;
     
    	public function __construct($DB){
    		$this->DB = $DB ;
    	}
     
    }
     
    ?>
    Merci d'avance
    Images attachées Images attachées     

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu n'as pas besoin de 2 tables : garde la structure de ta table sous_cat, les éléments de premier niveau n'ont simplement pas de "parent".

    Un autre conseil : ne fait pas des requêtes dans des boucles du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    requête categorie principale {
       requête sous cat
    }
    car la multiplication des requêtes n'est pas efficace.

    Il vaut mieux recuperer toutes les données (cats principales + sous cats) que tu veux en une seule requête (facile si tu n'as qu'une seule table) et travailler ensuite dessus en PHP.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Ok merci, j'essaye de faire sa, si j'ai une autre question je poserai dessous ^^ Merci !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Si je puis me fairepermettre... (OK, Sabotage ? private joke)
    Une seule table, avec :
    id_categorie (int, auto-incrément)
    id_parent (int)
    Comme le suggère bien Sabotage :
    • niveau 0 : id_parent = 0
    • sous-niveau : id_parent = id_categorie(_du_parent)

    N.B. Très pratique aussi pour les menus/sous-menus avec X niveaux.

  5. #5
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Idem, pour une humble proposition
    Si tu ne veux pas toucher à la structure de tes tables, tu dois pouvoir faire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT category.name_cat , sous_cat.name_sous_cat 
    FROM sous_cat
    LEFT JOIN category ON sous_cat.parent=category.id
    ORDER BY category.name_cat , sous_cat.name_sous_cat
    Participez vous aussi !
    Message utile
    Discussion résolue

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Merci pour toutes vos réponse Si avec sa je m'ensort pas, alors je suis vraiment un noob

    Je vous tiens au courant

  7. #7
    Invité
    Invité(e)
    Par défaut
    "N'est pas noob qui veut."
    Fucius, qui est loin d'être con, dixit Pierre Desproges, Grand Humoriste devant l'Eternel !
    Comme il le disait lui-même : « On peut rire de tout, mais pas avec tout le monde »

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Alors me revoici

    J'ai refait une seule table comme ci-dessous:



    Le code:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $category = $DB->query('SELECT * FROM categories'); ?>
    						<ul>
    							<?php foreach ($category as $cat) { ; ?>
    							<li><a href="#"><?php echo $cat->name_cat ; ?></a>
    								<ul>
    									<li><a href="#"><?php echo 'Sous_cat' ; ?></a></li>
    								</ul>
    							</li>
    							<?php } ; ?>
    						</ul>
    Je peux afficher les categories principale, mais pour les sous catégorie je ne vois pas du tout comment faire, j'ai y tester plusieurs petit trucs mais ne marchais pas comme prévu lol. Donc je pense que sa vient de ma requête je pense, mais je ne comprend pas comment le faire, et comment afficher la sous catégorie. J'ai essayer aussi les test avec id_parent = id_categorie mais cela ne m'affiche rien.

    Visuellement sa donne:




    PS : J'espère avoir bien compris le concept lol

    Merci pour les aides apportés
    Images attachées Images attachées   

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Montre nous ce que tu as fait et on te dira pourquoi ça ne va pas.

    Sinon ce n'est quand même pas compliqué, si tu veux les sous-catégorie de "composants" c'est toutes les catégories ayant 2 comme parent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut
    Bah en faite je sais pas si ma requête est bonne ou pas et comment pouvoir afficher aussi, mais bon, J'essayerais quand même de trouver.

    Pour le moment j'ai fait que le code du post précédent avec une requête qui sélectionne tous les champs.

    EDIT: Bon sa avance encore un petit peu.

    Voila 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
    <?php
    $category = $DB->query('SELECT category.nom_category , sous_category.nom_sous_category 
    	FROM sous_category
    	LEFT JOIN category ON sous_category.id_parent=category.id_category
    	ORDER BY category.nom_category , sous_category.nom_sous_category');
    ?>
    <ul>
    	<?php foreach ($category as $cat) { ; ?>
    	<li><a href="#"><?php echo $cat->nom_category ; ?></a>
    	<ul>
    		<li><a href=""><?php echo $cat->nom_sous_category; ?></a> </li>
    	</ul>
    	</li>
    <?php } ; ?>
    </ul>
    Par contre maintenant le soucis d'affichage c'est qu'il m'affiche deux fois "Composants" avec 1 sous catégorie "Cartes mères" et une autre "Processeurs". Reste à régler sa pour y mettre les deux en dessous =/

    Visuellement:


    Images attachées Images attachées   

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 15
    Points : 16
    Points
    16
    Par défaut Résolu
    Bon, j'ai pu trouver une solution à mon probléme je partage le code:

    Avec une table comme ci-dessous:


    Et 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
    <?php
        $catMenu = $DB->query('SELECT * FROM `categories`') ;                            
    ?>
     
    <ul id="menu">
            <?php
                    foreach($catMenu as $cat):  
                        if(empty($cat->id_parent)):
                            echo "<li>";  
                                echo "<a>".$cat->name."</a>";
                                    echo "<ul>"; 
                                    foreach($catMenu as $cats):
                                        if($cat->id == $cats->id_parent):
                                          echo "<li><a href=index.php?id=".$cats->id.">".$cats->name."</a></li>";
                                        endif;
                                    endforeach;
                                    echo "</ul>";
                            echo "</li>";           
                        endif;
                    endforeach;
     
          ?>
    </ul>
    Merci pour l'aide apporter a+ pour d'autre soucis
    Images attachées Images attachées  

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur JAVA/PHP
    Inscrit en
    Mai 2008
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur JAVA/PHP

    Informations forums :
    Inscription : Mai 2008
    Messages : 61
    Points : 52
    Points
    52
    Par défaut
    ça marche, mais c'est pas un bon code

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

Discussions similaires

  1. [OL-2007] Classer ses mails en catégories, sous catégories
    Par Dae_mon dans le forum VBA Outlook
    Réponses: 2
    Dernier message: 28/02/2014, 14h04
  2. Réponses: 10
    Dernier message: 21/10/2009, 15h17
  3. [MySQL] [CMS] Gestion de Catégories/Sous catégories
    Par aenema dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 31/08/2008, 09h25
  4. [JAR]Création d'un JAR avec des dependances sous Eclipse
    Par muthnik dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 05/07/2005, 17h39
  5. [Système] le classpath sous windows 98
    Par helonear dans le forum Général Java
    Réponses: 2
    Dernier message: 23/06/2005, 08h48

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