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 :

Requete qui n'affiche aucun resulat [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut Requete qui n'affiche aucun resulat
    Bonjour à tous,
    j'ai un petit problème sur un requête sur 2 tables car elle n'affiche aucun résultat. Je n'ai pas d'erreur SQL.
    Et lorsque que le l’exécute en directe dans SQL cela fonctionne, mais pas dans ma page php

    Menu
    id | nom | url | icon | position

    sousmenu
    id | nom | url | icon | position | idmenu

    idmenu correspond à id de la table menu

    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
     
    $req = mysql_query("SELECT m.*, sm.* FROM menu m LEFT JOIN sousmenu sm ON m.id = sm.idmenu ORDER BY m.position, sm.position") or die("Erreur SQL !");
    			 while($data = mysql_fetch_array($req)) 
    			{
     
    			$mid=$data['m.id'];
    			$mnom=$data['m.nom'];
    			$murl=$data['m.url'];		
    			$micon=$data['m.icon'];	
     
    			echo '<li';
    					if ($nav_en_cours == $mnom) 
    					{
    					echo ' id="en-cours"';
    					}
    				//$licone='<span class="icon-fleche-bas"> </span>';
     
    					echo '><a href="'.$murl.'">'.$micon.' '.$mnom.' </a>';
     
    				... ... 	
     
    			echo '</li>';	
    			}
    Quelqu'un aurai une idée d'ou vient le blem ?

    Merci d'avance de votre aide

  2. #2
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    En voyant ton code comme ça, je pense pas qu'il y ait de soucis.

    Pourrais-tu posté le code généré que tu reçois dans ton navigateur? (clicdroit->"afficher le code" ou "code source de la page").

    Pour débugguer, essai de mettre
    dans ta boucle while, afin de voir si tu parcour bien tout les enregistrements.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  3. #3
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Salut est merci de me répondre.
    j'ai modifié le code de la requêt de cette façon et cela fonctionne presque

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $req = mysql_query("SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition,
    			sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    			FROM menu AS me LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu ORDER BY me.position, sme.position") or die("Erreur SQL !");
    			while($data = mysql_fetch_array($req))
    resultat de la requete
    meid | menom | meurl | meicon | meposition | smeid | smenom | smeurl | smeicon | smeposition
    1 Accueil blabla.html icon 1 NULL NULL NULL NULL NULL
    2 Actualité blabla.html icon 2 NULL NULL NULL NULL NULL
    8 Galerie blabla.html icon 3 15 Animaux photo_1406651069.html 1
    8 Galerie blabla.html icon 3 16 Paysages photo_1406650775.html 2
    8 Galerie blabla.html icon 3 17 Héros photo_1406649566.html 3
    8 Galerie blabla.html icon 3 18 Voitures photo_1406628866.html 4
    8 Galerie blabla.html icon 3 19 Jeux photo_1406619051.html 5
    13 Rubrique blabla.html icon 4 NULL NULL NULL NULL NULL
    9 Contact blabla.html icon 5 NULL NULL NULL NULL NULL

    mon souci maintenant c'est qu'il me manque 1 ligne.
    la ligne du menu ayant des sousmenu dans la table sousmenu n'est pas affiché

    Menu
    id | nom | url | icon | position
    1 | Accueil | blabla.html | licone | 1
    2 | Actualité| blabla.html | licone | 2
    8 | Galerie| blabla.html | licone | 3
    9 | Contact| blabla.html | licone | 5
    13 | Rubrique| blabla.html | licone | 5

    sousmenu
    id | Nom | url | icon | position | idmenu
    15 | Animaux| blabla.html | licone | 1 | 8
    16 | Paysages| blabla.html | licone | 2 | 8
    17 | Héros| blabla.html | licone | 3 | 8
    18 | Voitures| blabla.html | licone | 5 | 8
    19 | Jeux| blabla.html | licone | 5 | 8

    je galère a 1 mètre du bol de sangria...

    Tu aurais une idée ????

  4. #4
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Euh, à lire ce que tu postes, il ne manque pas de ligne ^^.
    Il te manque une ligne dans les enregistrement que ta variable data contient?
    Ou il te manque une ligne à l'affichage?

    (perso j'aurais pas fait comme ça concernant le code, mais plutôt avec une double boucle et deux requêtes, certes c'est moins optimisé, mais moins bugogène au passage ^^).
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  5. #5
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    si il manque la ligne Galerie seul niveau menu
    si tu regardes chaque tables contient 5 enregistrement et la requête en sort que 9
    il manque la ligne galerie seule
    puisque j'ai les 5 galerie du sousmenu mais pas la galerie du menu

    il doit y avoir une subtilité dans la requête mais laquelle ???

  6. #6
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Ah oui ça c'est normal, c'est pasque tu utilise un leftjoin:
    en gros on pourrait traduire ta requete par:
    Sort moi tout les enregistrement des menu, pour chaque menu, rajoute les information des sous-menu.

    Le plus simple pour moi serait de passé par une boucle while imbriqué: (en pseudo-code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    requete = select * from menu
    while (resultat = requete)
    {
       afficher menu
       requeteSousMenu = select * from sousmenu where idmenu = resultat[id]
       while (resulatSousMenu = requete)
       {
          afficher sous menu
       }
    }
    Tu vois ce que je veux dire?
    De cette manière tu auras la ligne seule que tu voulais .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  7. #7
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    oui je vois ce que tu veux dire j'ai fais un truc comme cela a la base, mais on ma conseillé histoire d'optimiser le code de passer par une requête unique.
    c'est vrai qu'une fois la requête fonctionnelle c'est plus simple.

    maintenant faut faire la bonne requête. je pense que cela doit être faisable quand même de cette façon, il doit pas manquer grand chose

  8. #8
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    tu as certainement des menus qui n'ont pas de sous menus.Pour ne pas afficher les NULL dans ton sous-menu tu dois exclure dans ta requête les sme.idmenu qui sont null

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req = mysql_query("SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition,
    			sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    			FROM menu AS me LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu 
                           WHERE sme.idmenu IS NOT NULL OR sme.idmenu!=''
                         ORDER BY me.position, sme.position") or die("Erreur SQL !");
    			while($data = mysql_fetch_array($req))

    ou le cas échéant à la place de left join tu mets join (à condition que tous tes menus aient un sous menu)

  9. #9
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    effectivement j'ai des menu sans sous menu.
    le problème avec ta requête c'est que cela affiche que les sousmenu sans les menu au dessus ???

    la requête doit m'afficher les menu pour pouvoir construire les sousmenus

  10. #10
    Membre éprouvé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2012
    Messages
    631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2012
    Messages : 631
    Points : 1 220
    Points
    1 220
    Par défaut
    le problème avec ta requête c'est que cela affiche que les sousmenu sans les menu au dessus ???
    Logiquement ça devrait afficher les menus et les sous-menus.
    -fais un var_dump(mysql_fetch_array($req))
    -exécute la requête directement avec phpmyadmin

  11. #11
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    le var_dump affiche
    array(20) { [0]=> string(1) "8" ["meid"]=> string(1) "8" [1]=> string(7) "Galerie" ["menom"]=> string(7) "Galerie" [2]=> string(32) "blabla.html" ["meurl"]=> string(32) "blabla.html" [3]=> string(36) "icon" ["meicon"]=> string(36) "icon" [4]=> string(1) "3" ["meposition"]=> string(1) "3" [5]=> string(2) "15" ["smeid"]=> string(2) "15" [6]=> string(7) "Animaux" ["smenom"]=> string(7) "Animaux" [7]=> string(21) "photo_1406651069.html" ["smeurl"]=> string(21) "photo_1406651069.html" [8]=> string(0) "" ["smeicon"]=> string(0) "" [9]=> string(1) "1" ["smeposition"]=> string(1) "1" }
    dans phpmyadmin
    meid | menom   | meurl       | meicon | meposition | smeid | smenom   | smeurl                | smeicon | smeposition
    8    | Galerie | blabla.html | icon   | 3          | 15    | Animaux  | photo_1406651069.html | 1
    8    | Galerie | blabla.html | icon   | 3          | 16    | Paysages | photo_1406650775.html | 2
    8    | Galerie | blabla.html | icon   | 3          | 17    | Héros    | photo_1406649566.html | 3
    8    | Galerie | blabla.html | icon   | 3          | 18    | Voitures | photo_1406628866.html | 4
    8    | Galerie | blabla.html | icon   | 3          | 19    | Jeux     | photo_1406619051.html | 5

  12. #12
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par armel18 Voir le message
    tu as certainement des menus qui n'ont pas de sous menus.Pour ne pas afficher les NULL dans ton sous-menu tu dois exclure dans ta requête les sme.idmenu qui sont null

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $req = mysql_query("SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition,
    			sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    			FROM menu AS me LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu 
                           WHERE sme.idmenu IS NOT NULL OR sme.idmenu!=''
                         ORDER BY me.position, sme.position") or die("Erreur SQL !");
    			while($data = mysql_fetch_array($req))

    ou le cas échéant à la place de left join tu mets join (à condition que tous tes menus aient un sous menu)
    Si tu fonctionne comme ça, c'est normal de ne plus avoir les menu de base, ils n'ont pas de sous-menu, du coup tu les exclu .....

    la meilleur solution reste de passer par deux requete, en une seule requete, tu ne pourras pas les avoir tous d'un coup, c'est pas possible.

    Le seul moyen serait de revoir ta base de donnée pour n'utiliser qu'une table et non deux, je posterais un exemple dès que j'en ai fait un.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  13. #13
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Normalement, ton menu / sous-menu devrait être géré dans une seul et unique table récursive. Cela facilite grandement les extractions en une seule passe.

    Si tu regardes bien tes données tu récupères bien toutes les infos (rien ne manque à vrai dire), après il faut juste les traiter correctement côté PHP.

    Dans ce résultat :
    2 Actualité blabla.html icon 2 NULL NULL NULL NULL NULL
    8 Galerie blabla.html icon 3 15 Animaux photo_1406651069.html 1
    Moi je vois un menu Actualité et un menu Galerie immédiatement suivi d'un sous-menu Animaux.
    Je ne vois pas pourquoi cela t'empêcherait de générer ton menu/sous-menu.

  14. #14
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Je t'ai fait un petit code qui fait ce que tu voudrais, en une seule requete:

    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
    <?php
    function afficherMenu($req, $parent)
    {
      echo '<ul>';
      $res = mysql_fetch_assoc($req);
      while ($res && ($parent == $res["idParent"] || $parent == 0))
      {
        echo '<li>';
    	echo '<a href="'.$res["url"].'">'.$res["nom"].'</a>';
    	echo '</li>';
    	if ($res["hasChild"] == 1)
    	  $res = afficherMenu($req, $res["id"]);
    	else
    	  $res = mysql_fetch_assoc($req);
      }
      echo '</ul>';
      return ($res);
    }
    // on se connecte à MySQL
    $db = mysql_connect('localhost', 'root', '') or die("can' cvonnect");
     
    // on sélectionne la base
    mysql_select_db('test',$db);
     
    $req = mysql_query("select * from menu order by position") or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
    afficherMenu($req, 0);
    // on ferme la connexion à mysql
    mysql_close();
    ?>
    avec comme bdd:
    id,nom,url,icon,position,hasChild,idParent
    1,"Accueil","bla.html",,"1","0","0"
    2,"Actualité","blabla.html",,"2","1","0"
    3,"Galerie","blabl.html",,"3","1","0"
    4,"Animaux","blabla.html",,"31","0","3"
    5,"paysage","blabla.html",,"32","1","3"
    6,"rubrique","blabla.html",,"4","0","0"
    7,"toto","bla.html",,"21","0","2"
    8,"test3","bla.html",,"321","0","5"


    De cette manière tu peux avoir autant de sous-menu imbriqué que tu veux
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  15. #15
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par rawsrc Voir le message
    Moi je vois un menu Actualité et un menu Galerie immédiatement suivi d'un sous-menu Animaux.
    Je ne vois pas pourquoi cela t'empêcherait de générer ton menu/sous-menu.
    mon souci c'est que je n'arrive pas à afficher dans ce cas précis le menu galerie dans un premier temps

    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
     
    			$req = mysql_query("SELECT me.id AS meid, me.nom AS menom, me.url AS meurl, me.icon AS meicon, me.position AS meposition,
    			sme.id AS smeid, sme.nom AS smenom, sme.url AS smeurl, sme.icon AS smeicon, sme.position AS smeposition
    			FROM menu AS me LEFT JOIN sousmenu AS sme ON me.id = sme.idmenu  ORDER BY me.position, sme.position") or die("Erreur SQL !");
    			while($data = mysql_fetch_array($req)) 
    			{
    			//---- variable menu--------
    			$meid=$data['meid'];
    			$menom=$data['menom'];
    			$meurl=$data['meurl'];		
    			$meicon=$data['meicon'];	
    			//---- variable sousmenu--------
    			$smeid=$data['smeid'];
    			$smeidmenu==$data['smeidmenu'];
    			$smenom=$data['smenom'];
    			$smeurl=$data['smeurl'];		
    			$smeicon=$data['smeicon'];				
    			//print_r($data);
     
    			echo '<li';
    					if ($nav_en_cours == $mnom) 
    					{
    					echo ' id="en-cours"';
    					}
    				//$licone='<span class="icon-fleche-bas"> </span>';
    					if($smeid<=Null){
    					echo '><a href="'.$meurl.'">'.$meicon.' '.$menom.' </a>';
    					}
    				 echo "<ul>";
    							if ($smeidmenu==$meid)
    							{
    								echo '<li><a href="'.$smeurl.'">'.$smeicon.' '.$smenom.'</a></li>';
    							}							
     
    						echo "</ul>";	
     
    			echo '</li>';	
    			}

  16. #16
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    Citation Envoyé par skeud Voir le message
    Je t'ai fait un petit code qui fait ce que tu voudrais, en une seule requete:

    .../...

    avec comme bdd:
    id,nom,url,icon,position,hasChild,idParent
    1,"Accueil","bla.html",,"1","0","0"
    2,"Actualité","blabla.html",,"2","1","0"
    3,"Galerie","blabl.html",,"3","1","0"
    4,"Animaux","blabla.html",,"31","0","3"
    5,"paysage","blabla.html",,"32","1","3"
    6,"rubrique","blabla.html",,"4","0","0"
    7,"toto","bla.html",,"21","0","2"
    8,"test3","bla.html",,"321","0","5"


    De cette manière tu peux avoir autant de sous-menu imbriqué que tu veux
    le problème c'est que je doit changer la bdd et cela me gène car d'autres fonctionnalité utilise c'est deux tables c'est compliqué.
    je garde néanmoins ton code au chaud, car je l'utiliserai en dernier recours.

    Merci beaucoup de ton aide skeud

  17. #17
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Si tu dois garder les deux tables, tu n'as pas d'autre solution que de passé par deux requête :/

    EDIT: Ah non attends, j'ai peut-etre une idée .
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


  18. #18
    Membre habitué Avatar de spawns
    Homme Profil pro
    Inscrit en
    Juillet 2004
    Messages
    558
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 558
    Points : 193
    Points
    193
    Par défaut
    de mon coté j'ai trouvé une solution avec deux requête et un array qui fonctionne.

    j'aurai bien aimé trouver la solution avec une seule requête
    aprés c'est peut etre un souci a l'affichage seulement ????

  19. #19
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    J'ai pas testé mais c'est dans ce genre d'idée :
    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
    71
    72
    73
    74
    75
    $id_menu      = 0;
    $has_sub_menu = false;
    $hsc          = function($p) { return htmlspecialchars($p, ENT_QUOTES, 'utf-8'); };  // fonction d'échappement html
     
    $sql  = <<<'sql'
      SELECT m.id    AS m_id,
             m.nom   AS m_nom,
             m.url   AS m_url,
             m.icon  AS m_icon,
             sm.id   AS sm_id,
             sm.nom  AS sm_nom,
             sm.url  AS sm_url,
             sm.icon AS sm_icon
        FROM
             menu m
             LEFT JOIN sousmenu sm ON m.id = sm.idmenu
    ORDER BY
             m.position,
             sm.position
    sql;
     
    $qry  = mysql_query($sql) or die ('Erreur SQL !');
    $html = ['<ul>'];
     
    while ($row = mysql_fetch_assoc($qry))
    {
        $idc      = ($nav_en_cours == $row['m_nom']) ? 'id="en-cours"' : '';
        $new_menu = ($id_menu != $row['m_id']);
     
        // changement de menu
        if ($new_menu)
        {
            if ($has_sub_menu)
            {
                $html[] = '</ul>';
            }
     
            if ( ! empty($html))
            {
                $html[] = '</li>';
            }
     
            $html[]  = <<<html
    <li {$idc}><a href="{$row['m_url']}">{$row['m_icon']} {$hsc($row['m_nom'])}</a>
    html;
     
            $id_menu = $row['m_id'];
        }
     
        $has_sub_menu = (empty($row['sm_id']) === false);
     
        // gestion du sous-menu
        if ($has_sub_menu)
        {
            if ($new_menu)
            {
                $html[] = '<ul>';
            }
     
            $html[]  = <<<html
    <li><a href="{$row['sm_url']}">{$row['sm_icon']} {$hsc($row['sm_nom'])}</a></li>
    html;
        }
    }
     
    if ($has_sub_menu)
    {
        $html[] = '</ul>';
    }
    $html[] = '</li>';
    $html[] = '</ul>';
     
    echo implode('', $html);
     
    ?>

  20. #20
    Membre émérite
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Points : 2 724
    Points
    2 724
    Billets dans le blog
    1
    Par défaut
    Trouvé .

    Utilise une requete comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("select * from (select id,0 as idMenu,nom,url,position from menu UNION select idMenu,id,nom,url,position from smenu) mymenu order by id, idMenu, position")
    Par contre, dans ta table, les id doivent correspondre à l'ordre des menu. (donc le position devient un peu inutile au final). c'est le seul moyen que j'ai trouvé pour l'instant.
    Pas de solution, pas de probleme

    Une réponse utile (ou +1) ->
    Une réponse inutile ou pas d'accord -> et expliquer pourquoi
    Une réponse à votre question


+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] Une requete qui ne retourne aucun résultats
    Par amerex dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 23/01/2010, 17h46
  2. [MySQL] requete qui n'affiche rien
    Par ffred2908 dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 15/04/2008, 15h07
  3. requete qui n'affiche pas le bon résultat
    Par imsse dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 26/02/2008, 17h46
  4. Requete qui n'affiche pas tout
    Par sebinator dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 11/12/2007, 17h52
  5. [Requete] qui n'affiche pas les doublons mais sur un seul champs
    Par joseph.breham dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/12/2006, 14h57

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