Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2958 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  menu en PHP/mySQL

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

menu en PHP/mySQL

n°2030572
quaresma
Posté le 19-10-2010 à 14:59:28  profilanswer
 

Bonjour a toutes et tous,
je voulais savoir si quelqu'un pouvait m'aider à faire un menu en PHP/SQL comme celui-ci :
 
http://css.developpez.com/galerie/ [...] roulant2/#
 
En récupérant les titres "menu1","menu1",etc. à partir d'une SGBD SQL et les sous-menu également.
 
J'ai des notions en php/sql, il me faudrait juste un petit coup de pouce s'il vous plait
 
Merci pour votre aide.

mood
Publicité
Posté le 19-10-2010 à 14:59:28  profilanswer
 

n°2030578
skeye
Posté le 19-10-2010 à 15:19:11  profilanswer
 

Quelle est la difficulté? Qu'est-ce que tu n'arrives pas à faire toi-même?


---------------
Can't buy what I want because it's free -
n°2030648
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2010 à 18:38:58  profilanswer
 

soit tu pars sur 2 tables mysql
soit tu pars sur 1 tables mysql hiérarchisé
 
ensuite comme le dit skeye, où ce trouve ta/tes difficulté/s :??:


---------------
Tout à commencé par un rêve...
n°2030670
quaresma
Posté le 19-10-2010 à 21:07:46  profilanswer
 

Bonsoir,
j'ai posté le message de chez ma soeur et je n'avais pas mon code source.
 
J'ai deux tables comme cela :
 

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, numssrubrique INT not null, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
Elles contiennent les données suivantes :
 

Code :
  1. INSERT INTO rubrique (numrubrique, nomrubrique, numssrubrique) VALUES ("1", "écrits", "1" ), ("2", "scènes", "2" );
  2. INSERT INTO ss_rubrique (numssrubrique, nomssrubrique, photossrubrique, numrubrique) VALUES ("1", "théâtre", "foto1.gif", "1" ), ("2", "enfance et jeunesse", "foto2.gif", "2" );


 
J'ai trois fichiers.
 
Un fichier appelé functions.js qui contient la fonction pour le menu :
 

Code :
  1. function afficheMenu(obj){
  2.    
  3.     var idMenu     = obj.id;
  4.     var idSousMenu = 'sous' + idMenu;
  5.     var sousMenu   = document.getElementById(idSousMenu);
  6.    
  7.     /*****************************************************/
  8.     /**    on cache tous les sous-menus pour n'afficher    **/
  9.     /** que celui dont le menu correspondant est cliqué **/
  10.     /** où 4 correspond au nombre de sous-menus         **/
  11.     /*****************************************************/
  12.     for(var i = 1; i <= 4; i++){
  13.         if(document.getElementById('sousmenu' + i) && document.getElementById('sousmenu' + i) != sousMenu){
  14.             document.getElementById('sousmenu' + i).style.display = "none";
  15.         }
  16.     }
  17.    
  18.     if(sousMenu){
  19.         //alert(sousMenu.style.display);
  20.         if(sousMenu.style.display == "block" ){
  21.             sousMenu.style.display = "none";
  22.         }
  23.         else{
  24.             sousMenu.style.display = "block";
  25.         }
  26.     }
  27.    
  28. }


 
 
Un fichier nommé style.css qui contient les styles pour le menu :
 

Code :
  1. *{
  2.     margin:0;
  3.     padding:0;
  4. }
  5. #menu{
  6.     width:150px;
  7.     margin:20px auto 0 auto;
  8. }
  9. .menu, .sousmenu{
  10.     text-align:center;
  11. }
  12. .menu{
  13.     height:18px;
  14.     width:150px;
  15.     padding:2px 0;
  16.     background:#404040;
  17.     color:#fff;
  18. }
  19. .sousmenu{
  20.     height:18px;
  21.     width:150px;
  22.     padding:1px 0;
  23.     background:#808080;
  24.     color:#fff;
  25. }
  26. .menu a{
  27.     display:block;
  28.     width:100%;
  29.     height:100%;
  30.     color:#fff;
  31.     font-family:arial,sans-serif;
  32.     font-size:12px;
  33.     font-weight:bold;
  34.     text-decoration:none;
  35.     background:#404040;
  36. }
  37. .sousmenu a{
  38.     display:block;
  39.     width:100%;
  40.     height:100%;
  41.     color:#123456;
  42.     font-family:arial,sans-serif;
  43.     font-size:12px;
  44.     font-weight:bold;
  45.     text-decoration:none;
  46. }
  47. .menu a:hover, .sousmenu a:hover, .menu a:active, .sousmenu a:active, .menu a:focus, .sousmenu a:focus{
  48.     color:#654321;
  49. }


 
 
La page sur laquelle j'appelle le menu dynamiquement ainsi que les fichiers "functions.js" et "style.css"  :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" />
  7. <meta name="description" content=" />
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.      <link rel="stylesheet" href="menu/style.css" type="text/css" />
  11.      <script type="text/javascript" src="menu/functions.js"></script>
  12. </head>
  13. <body>
  14. <table width="900" height="421" border="0" align="center" bgcolor="#000000">
  15.   <tr>
  16.     <td width="22">&nbsp;</td>
  17.     <td width="145" valign="top"><br />
  18.     <?php include"menu/menu.php" ?>; </td>
  19.     <td width="682" valign="top"><br />


 
 
Puis, le fichier du menu :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
  4. mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
  5. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE rubrique.numssrubrique = ss_rubrique.numssrubrique AND rubrique.numrubrique = ss_rubrique.numrubrique" ) or die ("impossible d'effectuer la requête" );
  6. $arrayFlag = array();
  7. while($shopone = mysql_fetch_array($req)){
  8. $nomrubrique = stripslashes($shopone['nomrubrique']);
  9. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  10. $nomrubrique2 = utf8_encode($nomrubrique);
  11. $nomssrubrique2 = utf8_encode($nomssrubrique);
  12. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  13. {
  14. print'
  15. <div id="menu">
  16.     <div class="menu" id="menu1" onclick="afficheMenu(this)">
  17.         <a href="#">'.$nomrubrique2.'</a>
  18.     </div>';
  19. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  20. print'<div id="sousmenu1" style="display:none">
  21.         <div class="sousmenu">
  22.             <a href="#">'.$nomssrubrique2.'</a>
  23.         </div>
  24.         </div>
  25.         </div>'; 
  26. }
  27. mysql_close();
  28. ?>


 
Pour l'instant, le résultat n'est pas terrible comme vous pourrez le constater :
 
http://www.la-grange-sardieres.fr/ [...] tation.php
 
Je voudrai le même résultat que le menu pris en exemple dans mon 1er message, mais dans ce que j'ai fait il y a quelque chose qui ne va pas.
 
Merci beaucoup pour votre aide.


Message édité par quaresma le 19-10-2010 à 21:10:33
n°2030690
stef_dober​mann
Personne n'est parfait ...
Posté le 19-10-2010 à 22:35:55  profilanswer
 

je crois qu'il y a un problème dans ton analyse :

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, numssrubrique INT not null, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
une rubrique à 0 ou plusieurs sousRubrique
une sousRubrique à 1 et 1 seule rubrique
 
ça devrais plutôt être comme ça :

Code :
  1. CREATE TABLE rubrique (numrubrique INT not null, nomrubrique VARCHAR (20) NOT NULL, PRIMARY KEY (numrubrique));
  2. CREATE TABLE ss_rubrique (numssrubrique INT not null AUTO_INCREMENT, nomssrubrique VARCHAR (40) NOT NULL, photossrubrique VARCHAR (40), numrubrique INT not null, PRIMARY KEY (numssrubrique));


 
du coup les données sont :

Code :
  1. INSERT INTO rubrique (numrubrique, nomrubrique) VALUES ("1", "écrits" ), ("2", "scènes" );
  2. INSERT INTO ss_rubrique (numssrubrique, nomssrubrique, photossrubrique, numrubrique) VALUES ("1", "théâtre", "foto1.gif", "1" ), ("2", "enfance et jeunesse", "foto2.gif", "2" );


 
ensuite au niveau du code PHP pour faire l'affichage je vois pas l'intérêt de cette la variable ligne 6 :

Code :
  1. $arrayFlag = array();


 
Edit :
horreur la requête SQL vient de me bruler les yeux,

Code :
  1. SELECT * FROM rubrique, ss_rubrique WHERE rubrique.numssrubrique = ss_rubrique.numssrubrique


 
Edit :
correction de frappe


Message édité par stef_dobermann le 20-10-2010 à 10:07:31

---------------
Tout à commencé par un rêve...
n°2030695
quaresma
Posté le 19-10-2010 à 22:38:46  profilanswer
 

Ok pas mal de fautes déjà aïe.
Je crois que je vais avoir besoin d'une précieuse aide... :whistle:

n°2031030
quaresma
Posté le 20-10-2010 à 22:23:06  profilanswer
 

J'ai fait des modifications, mais le résultat n'est pas encore terrible :(
 
Voici mon nouveau code :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $db = mysql_connect($host_db,$login_db,$password_db) or die ("impossible de se connecter a la base".mysql_error());
  4. mysql_select_db($name_db,$db) or die ("base inexistante".mysql_error());
  5. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique" ) or die ("impossible d'effectuer la requête" );
  6. $arrayFlag = array();
  7. print'<div id="menu">';
  8. while($shopone = mysql_fetch_array($req)){
  9. $nomrubrique = stripslashes($shopone['nomrubrique']);
  10. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  11. $nomrubrique2 = utf8_encode($nomrubrique);
  12. $nomssrubrique2 = utf8_encode($nomssrubrique);
  13. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  14. {
  15. print'
  16. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  17.  <a href="#">'.$nomrubrique2.'</a>
  18. </div>';
  19. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  20. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  21. {
  22. print'<div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">
  23.     <div class="sousmenu">
  24.     <a href="#">'.$nomssrubrique2.'</a>
  25.  </div>'; 
  26. }else{
  27. print'<div class="sousmenu">
  28.     <a href="#">'.$nomssrubrique2.'</a>
  29.  </div>'; 
  30.  }
  31. }
  32. print'</div>';
  33. mysql_close();
  34. ?>


Puis le résultat :
 
http://www.la-grange-sardieres.fr/ [...] tation.php
 
Merci

n°2031142
stef_dober​mann
Personne n'est parfait ...
Posté le 21-10-2010 à 14:32:31  profilanswer
 

dans la source de ta page, il y a bien toute les données.
cela doit venir du HTML...


---------------
Tout à commencé par un rêve...
n°2031162
quaresma
Posté le 21-10-2010 à 15:16:16  profilanswer
 

Oui il y a toutes les données, mais la structure HTML de mon fichier PHP n'est pas bonne pour mon menu.
Celui-ci ne fonctionne pas comme je veux.
 
Je fais plein de tests, mais en vain...:(
 
Voici mon nouveau code :
 

Code :
  1. <?php
  2. require("identification/connexion_sql.php" );
  3. $req = mysql_query("SELECT * FROM rubrique, ss_rubrique WHERE ss_rubrique.numrubrique = rubrique.numrubrique ORDER BY rubrique.numrubrique ASC, ss_rubrique.numssrubrique" ) or die ("impossible d'effectuer la requête" );
  4. $arrayFlag = array();
  5. print'<div id="menu">';
  6. while($shopone = mysql_fetch_array($req)){
  7. $nomrubrique = stripslashes($shopone['nomrubrique']);
  8. $nomssrubrique = stripslashes($shopone['nomssrubrique']);
  9. $nomrubrique2 = utf8_encode($nomrubrique);
  10. $nomssrubrique2 = utf8_encode($nomssrubrique);
  11. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  12. {
  13. print'
  14. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  15.  <a href="#">'.$nomrubrique2.'</a>
  16. </div>
  17. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  18. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  19. print'
  20.     <div class="sousmenu">
  21.     <a href="#">'.$nomssrubrique2.'</a>
  22.  </div>'; 
  23. }
  24. print'</div>';
  25. mysql_close();
  26. ?>


 
Le résultat est toujours sur la même page.
 
Serais-tu d'où pourrait provenir le problème ?
 
merci

n°2031382
stef_dober​mann
Personne n'est parfait ...
Posté le 22-10-2010 à 11:40:50  profilanswer
 

il faut que tu retravaille ce bout de code :

Code :
  1. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  2. {
  3. print'
  4. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  5. <a href="#">'.$nomrubrique2.'</a>
  6. </div>
  7. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  8. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  9. print'
  10.      <div class="sousmenu">
  11.      <a href="#">'.$nomssrubrique2.'</a>
  12.   </div>';
  13. }


 
Edit : dans la boucle tu vérifie si le menu est déjà inscrit, mais .... trouve la suite ;)


Message édité par stef_dobermann le 22-10-2010 à 11:42:44

---------------
Tout à commencé par un rêve...
mood
Publicité
Posté le 22-10-2010 à 11:40:50  profilanswer
 

n°2031433
quaresma
Posté le 22-10-2010 à 14:02:38  profilanswer
 

J'ai changé pas mal de chose depuis hier, mais si tu veux toujours m'aider j'ai encore des soucis :(
 
Merci et bonne journée

n°2031515
stef_dober​mann
Personne n'est parfait ...
Posté le 22-10-2010 à 16:02:40  profilanswer
 

envoi les modifications...


---------------
Tout à commencé par un rêve...
n°2031604
quaresma
Posté le 22-10-2010 à 21:01:31  profilanswer
 

Bonsoir,
j'ai fait pas mal de modifications.
 
Voici le code de la page "presentation.php" :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" "/>
  7. <meta name="description" content=" "/>
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.  <link rel="stylesheet" href="css/style_menu.css" type="text/css" />
  11.  <script type="text/javascript" src="js/functions.js"></script>
  12. <style type="text/css">
  13. <!--
  14. body {
  15. margin-top: 0px;
  16. }
  17. -->
  18. </style></head>
  19. <body bgcolor="#333333">
  20. <table width="1050" border="0" align="center" cellpadding="0" cellspacing="0" style="background: #000; height: 421px; min-height: 421px;">
  21. <tr>
  22. <td colspan="3" style="height: 50px; min-height: 50px; max-height: 50px;">&nbsp;</td>
  23. </tr>
  24. <tr>
  25. <td width="183" valign="top" style="width: 145px;"><?php include"menu/menu.php" ?></td>
  26. <td width="850" style="width: 682px; background: #fff;">contenu</td>
  27. <td width="17" style="background: #000;">&nbsp;</td>
  28. </tr>
  29. </table>
  30. </body>
  31. </html>


 
Voici le code du CSS :
 

Code :
  1. #menu {
  2. width: 150px;
  3. background: #000;
  4. margin: 0;
  5. }
  6. .menu_niv2 { display: none; }
  7. .menu_niv1 a {
  8. display: block;
  9. background: #333;
  10. color: #fff;
  11. text-decoration: none;
  12. text-align: center;
  13. }
  14. .menu_niv1 a:hover {
  15. display: block;
  16. background: #666;
  17. color: #fff;
  18. text-decoration: underline;
  19. text-align: center;
  20. }
  21. .menu_niv2 a {
  22. color: #333;
  23. background: #ccc;
  24. text-decoration: none;
  25. text-align: center;
  26. display: block;
  27. }
  28. .menu_niv2 a:hover {
  29. color: #333;
  30. background: #aaa;
  31. text-decoration: underline;
  32. text-align: center;
  33. display: block;
  34. }


 
Voici le code du js :
 

Code :
  1. function afficheMenu(menu) {
  2. // generation du nom du sous menu que l'on veut gerer (afficher / cacher)
  3. var sousMenu='sous' + menu;
  4. // on recupere son etat
  5. var etatSousMenu=document.getElementById(sousMenu).style.display;
  6. // on cree un array de tous les menus de niveau 1, donc ceux qui ont la classe 'menu_niv1'
  7. var listeNiv1=document.getElementsByClassName('menu_niv1');
  8. // on boucle sur ces elements
  9. for (var i=0; i<listeNiv1.length; i++) {
  10. // on recupere l'id du menu courant
  11. var idCourant=listeNiv1[i].id;
  12. // si l'id courant est le meme que le menu que l'on a clique alors on traite le sous menu
  13. // sinon on le cache et on passe au suivant
  14. if (idCourant==menu) {
  15. if (etatSousMenu=='block') {
  16. document.getElementById(sousMenu).style.display='none';
  17. } else {
  18. document.getElementById(sousMenu).style.display='block';
  19. }
  20. } else {
  21. // attention, si on cache, on doit cacher le sous menu du menu courant, il faut donc creer une nouvelle variable pour cacher celui-ci
  22. var sousMenuTemp='sous' + idCourant;
  23. document.getElementById(sousMenuTemp).style.display='none';
  24. }
  25. }
  26. }


 
Et, enfin le code du menu :
 

Code :
  1. <div id="menu">
  2. <?php
  3. require("identification/connexion_sql.php" );
  4. // on attaque le php ici
  5. // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  6. $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête" );
  7. $rep1 = mysql_query($req1);
  8. while($row1 = mysql_fetch_array($rep1)) {
  9. // on affiche le menu de niveau 1
  10. echo "<div class=\"menu_niv1\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this.id)\"><a href=\"#\">".$row1['lib_menu']."</a></div>\n";
  11. // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
  12. $req2="SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu']."' ORDER BY ordre_menu"  or die ("impossible d'effectuer la requête" );
  13. $rep2=mysql_query($req2);
  14. $nb2=mysql_num_rows($rep2);
  15. if (isset($nb2) && $nb2>0) {
  16. echo "<div id=\"sousmenu".$row1['id_menu']."\" class=\"menu_niv2\">\n";
  17. while ($row2=mysql_fetch_array($rep2)) {
  18. echo "<a href=\"#\">".htmlentities($row2['lib_menu'])."</a>\n";
  19. }
  20. echo "</div>\n";
  21. }
  22. }
  23. ?>
  24. </div>


 
le premier problème est le décalage du menu par rapport à la zone blanche.
Normalement, le menu doit être à la même hauteur que la zone blanche, mais ce n'est pas le cas :(
Je ne comprends pas pourquoi il y a ce problème.
 
Autre problème, le menu ne fonctionne pas du tout sous IE.
 
Penses-tu pouvoir m'aider ?
 
Merci beaucoup et bonne soirée

n°2031618
stef_dober​mann
Personne n'est parfait ...
Posté le 22-10-2010 à 21:44:05  profilanswer
 

Citation :

le premier problème est le décalage du menu par rapport à la zone blanche.
Normalement, le menu doit être à la même hauteur que la zone blanche, mais ce n'est pas le cas :(
Je ne comprends pas pourquoi il y a ce problème.


pour faire une mise forme correct on passe par des CSS et non des tableaux
 

Citation :

Autre problème, le menu ne fonctionne pas du tout sous IE.


 
ça il faut voir du côté de JavaScript et prévoir le navigateur car chaque navigateur IE et mozilla entre autre n'ont pas les même propriété pour faire une chose.
 

Citation :

Penses-tu pouvoir m'aider ?


 
oui mais je ne fais pas tous...
 
la seule qui m'interrese dans un premier temps c'est que tu comprenne ce que tu fais, et je pense que pour l'instant tu ne sais pas ce que tu fais.
tu es partis sur un autre code alors qu'il n'y pas besoin, il faut juste que tu réfléchisse.
 
relit les ancien poste je t'apporte une solution.


---------------
Tout à commencé par un rêve...
n°2031625
quaresma
Posté le 22-10-2010 à 22:13:03  profilanswer
 

Citation :

pour faire une mise forme correct on passe par des CSS et non des tableaux


 
Oui, mais comme étant débutant, j'utilise les tableaux.
 

Citation :

ça il faut voir du côté de JavaScript et prévoir le navigateur car chaque navigateur IE et mozilla entre autre n'ont pas les même propriété pour faire une chose.


 
Et comment faire pour corriger ce bug ??
 

Citation :

oui mais je ne fais pas tous...
 
la seule qui m'interrese dans un premier temps c'est que tu comprenne ce que tu fais, et je pense que pour l'instant tu ne sais pas ce que tu fais.
tu es partis sur un autre code alors qu'il n'y pas besoin, il faut juste que tu réfléchisse.
 
relit les ancien poste je t'apporte une solution.


 
Si je sais ce que je fais, mais les problèmes persistent et je ne trouve pas les solutions.

n°2031827
stef_dober​mann
Personne n'est parfait ...
Posté le 24-10-2010 à 14:42:23  profilanswer
 

pourtant ce code n'est pas fini :

Code :
  1. if( !isset($arrayFlag[$shopone['numrubrique']])) // On vérifie que le champ n'a pas été déjà affiché
  2. {
  3. print'
  4. <div class="menu" id="menu'.$shopone['numrubrique'].'" onclick="afficheMenu(this)">
  5. <a href="#">'.$nomrubrique2.'</a>
  6. </div>
  7. <div id="sousmenu'.$shopone['numrubrique'].'" style="display:none">';
  8. $arrayFlag[$shopone['numrubrique']] = true;} // On signale qu'on a affiché cette catégorie au moins une fois
  9. print'
  10.      <div class="sousmenu">
  11.      <a href="#">'.$nomssrubrique2.'</a>
  12.   </div>';
  13. }


 
si le champ n'est pas déjà affiché ...
sinon :??: donc s'il n'est pas affiché tu fais rien ...
donc -> eurêka


---------------
Tout à commencé par un rêve...
n°2031831
quaresma
Posté le 24-10-2010 à 15:08:20  profilanswer
 

J'ai changé le code,  
je suis revenu au code de l'exemple que j'avais donné.
 
Voici les données :
 
HTML
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <meta name="robots" content="index, follow" />
  6. <meta name="keywords" content=" "/>
  7. <meta name="description" content=" "/>
  8. <title></title>
  9.      <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  10.  <link rel="stylesheet" href="css/copie_style_menu.css" type="text/css" />
  11.  <script type="text/javascript" src="js/copie_functions.js"></script>
  12. <style type="text/css">
  13. <!--
  14. body {
  15. margin-top: 0px;
  16. }
  17. -->
  18. </style></head>
  19. <body bgcolor="#333333">
  20. <table width="1050" border="0" align="center" cellpadding="0" cellspacing="0" style="background: #000; height: 421px; min-height: 421px;">
  21. <tr>
  22. <td colspan="3" style="height: 50px; min-height: 50px; max-height: 50px;"></td>
  23. </tr>
  24. <tr>
  25. <td width="183" valign="top"><?php include("menu/copie_menu.php" ) ?></td>
  26. <td width="800" valign="top" style="width: 665px; background: #fff;">contenu</td>
  27. <td width="17" style="background: #000;">&nbsp;</td>
  28. </tr>
  29. </table>
  30. </body>
  31. </html>


 
CSS appelé
 

Code :
  1. #menu{
  2. width:150px;
  3. //margin-top: -26px;
  4. }
  5. .menu, .sousmenu{
  6. text-align: right;
  7. }
  8. .menu{
  9. height:18px;
  10. width:150px;
  11. color:#fff;
  12. padding-bottom: 10px;
  13. top:0;
  14. font-family:arial,sans-serif;
  15. font-size:12px;
  16. text-decoration:none;
  17. }
  18. .sousmenu{
  19. height:14px;
  20. width:170px;
  21. padding: 0px;
  22. color:#ffffff;
  23. text-align: right;
  24. }
  25. .menu a{
  26. display:block;
  27. width:100%;
  28. height:100%;
  29. color:#fff;
  30. font-family:arial,sans-serif;
  31. font-size:12px;
  32. text-decoration:none;
  33. margin-top: 0;
  34. }
  35. .sousmenu a{
  36. display:block;
  37. width:100%;
  38. height:100%;
  39. color:#666666;
  40. font-family:Garamond;
  41. font-size:18px;
  42. text-decoration:none;
  43. }
  44. .sousmenu a:hover, .sousmenu a:active, .sousmenu a:focus{
  45. color:#ffffff;
  46. }


 
javascript du menu de gauche
 

Code :
  1. function afficheMenu(obj){
  2. var idMenu     = obj.id;
  3. var idSousMenu = 'sous' + idMenu;
  4. var sousMenu   = document.getElementById(idSousMenu);
  5. /*****************************************************/
  6. /** on cache tous les sous-menus pour n'afficher    **/
  7. /** que celui dont le menu correspondant est cliqué **/
  8. /** où 4 correspond au nombre de sous-menus         **/
  9. /*****************************************************/
  10. for(var i = 1; i <= 5; i++){
  11.  if(document.getElementById('sousmenu' + i) && document.getElementById('sousmenu' + i) != sousMenu){
  12.   document.getElementById('sousmenu' + i).style.display = "none";
  13.  }
  14. }
  15. if(sousMenu){
  16.  //alert(sousMenu.style.display);
  17.  if(sousMenu.style.display == "block" ){
  18.   sousMenu.style.display = "none";
  19.  }
  20.  else{
  21.   sousMenu.style.display = "block";
  22.  }
  23. }
  24. }


 
PHP du menu
 

Code :
  1. <div id="menu">
  2. <?php
  3. require("identification/connexion_sql.php" );
  4. // on attaque le php ici
  5. // dans un premier temps on recupere les menus de niveau 1 donc ceux qui ont l'id_parent egal a 0
  6. $req1 = "SELECT id_menu, lib_menu FROM menus WHERE id_parent='0' ORDER BY ordre_menu" or die ("impossible d'effectuer la requête" );
  7. $rep1 = mysql_query($req1);
  8. while($row1 = mysql_fetch_array($rep1)) {
  9. // on affiche le menu de niveau 1
  10. echo "<div class=\"menu\" id=\"menu".$row1['id_menu']."\" onclick=\"afficheMenu(this)\"><a href=\"#\">".$row1['lib_menu']."</a></div><br>\n";
  11. // ensuite on fait une seconde requete pour chercher les sous menus de ce niveau, s'il y en a on les affiche, sinon on ne fait rien
  12. $req2="SELECT id_menu, lib_menu FROM menus WHERE id_parent='".$row1['id_menu']."' ORDER BY ordre_menu"  or die ("impossible d'effectuer la requête" );
  13. $rep2=mysql_query($req2);
  14. $nb2=mysql_num_rows($rep2);
  15. if (isset($nb2) && $nb2>0) {
  16. echo "<div id=\"sousmenu".$row1['id_menu']."\" style=\"display:none\"><br>\n";
  17. while ($row2=mysql_fetch_array($rep2)) {
  18. echo "<div class=\"sousmenu\"><a href=\"#\">".htmlentities($row2['lib_menu'])."</a></div><br>\n";
  19. }
  20. echo "</div>\n";
  21. }
  22. }
  23. ?>
  24. </div>


 
 
Le résultat est visible ici :

Code :
  1. http://www.la-grange-sardieres.fr/ [...] ation2.php


 
Le problème de la marge est toujours présent par contre... :(
 

n°2031902
stef_dober​mann
Personne n'est parfait ...
Posté le 24-10-2010 à 22:06:48  profilanswer
 

il y a déjà du mieux ;)
mais je ne comprend ta 1ére requete SQL id_parent c'est qui ??


Message édité par stef_dobermann le 24-10-2010 à 22:11:34

---------------
Tout à commencé par un rêve...
n°2031913
quaresma
Posté le 24-10-2010 à 23:44:04  profilanswer
 

id_parent c'est l'id des menus et sous-menus.
 
L'id_parent 0 correspond aux menus et l'id_parent 1 aux sous-menus.

n°2031914
stef_dober​mann
Personne n'est parfait ...
Posté le 24-10-2010 à 23:46:05  profilanswer
 

plus aucune correspondance avec la table MySQL que tu as mis en deuxième poste : http://forum.hardware.fr/hfr/Progr [...] m#t2030670


---------------
Tout à commencé par un rêve...
n°2031918
quaresma
Posté le 25-10-2010 à 00:13:07  profilanswer
 

Non, en effet j'ai tout modifié :
 
Voici la nouvelle table :
 
CREATE TABLE menus (id_menu INT not null AUTO_INCREMENT, lib_menu VARCHAR (100) NOT NULL, id_parent INT, image_menu VARCHAR (100), url_page VARCHAR (100), ordre_menu INT, PRIMARY KEY (id_menu));
 
 

n°2031935
stef_dober​mann
Personne n'est parfait ...
Posté le 25-10-2010 à 10:03:05  profilanswer
 

merci de tenir au courant...
j'en étais encore avec tes 2 tables ...
 
Edit : et le contenu de ta table, en partie ou entier comme tu sens


Message édité par stef_dobermann le 25-10-2010 à 10:03:47

---------------
Tout à commencé par un rêve...
n°2031980
quaresma
Posté le 25-10-2010 à 12:25:47  profilanswer
 

désolé, mais j'essaie tellement de choses et comme le site doit être fini le plus rapidement possible, je ne peux pas toujours venir sur hardware.fr

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  menu en PHP/mySQL

 

Sujets relatifs
Conseil pour geolocalisation HTML5 - PHP[resolu][PHP & Oracle] Champs DateTime : recuperer la date ET l'heure
[PHP] Seuls les mails vers les adresse wanadoo.fr sont envoyésMenu /PHP Lien avec MySQL
[Résolu] Menu et sous menu-dynamique[PHP/MYSQL] Affichage de tables dans le menu puis ...
[PHP - MySQL] Insertion nouvel item ds menu déroulantmenu php mysql
[PHP-MySQL] Récupérer une valeur de menu déroulant. 
Plus de sujets relatifs à : menu en PHP/mySQL


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR