rendre un menu dynamique et non statique

rendre un menu dynamique et non statique - PHP - Programmation

Marsh Posté le 28-02-2006 à 14:28:28    

Bonjour à tous,  
 
Je viens une nouvelle fois vers où car je dois rendre mon projet demain et je n'arrive tjs pas à faire ce que je souhaite (j'ai une solution de dépannage mais elle ne me convient pas).
 
J'ai ce script qui me donne un menu verticale non dynamique mais esthétique. Le hic c'est que toutes les catégories et leurs sous catégories sont entrées en dur.

Code :
  1. <script language="JavaScript">
  2. //-------------------------Liens de rubriques et leur contenu
  3. rub1 = '<a href="2000/dec.php">n°2 Décembre</a>';
  4. rub2 = '<a href="2001/dec.php">n°6 Décembre</a><br><a href="2001/sept.php">n°5 Septembre</a><br> <a href="2001/juin.php">n°4 Juin</a><br> <a href="2001/avril.php">n°3 Avril</a>';
  5. function fermer(e){
  6. document.getElementById("rubrique"+e).innerHTML = '';
  7. document.getElementById("rubrique"+e).style.position = 'absolute';
  8. }
  9. function go(n){
  10. document.getElementById("rubrique"+n).style.position = 'relative';
  11. if(n == 1){
  12.     document.getElementById("rubrique"+n).innerHTML = rub1 + "   <a href='javascript:fermer("+n+" )'></a>";
  13.     }
  14.     if(n == 2){
  15.         document.getElementById("rubrique"+n).innerHTML = rub2 + "   <a href='javascript:fermer("+n+" )'></a>";
  16.     }
  17. }
  18. <body>
  19. <h2><a href="javascript:go(2)">Infos 2001</a></h2>
  20.          <DIV ID="rubrique2" STYLE="position:relative"></DIV>
  21.          <h2><a href="javascript:go(1)">Infos 2000</a></h2>
  22.          <DIV ID="rubrique1" STYLE="position:relative"></DIV>
  23. </script>


J'ai réussi à faire en sorte de changer le code du body pour que mes rubriques s'affiche dynamiquement. Mais je n'y arrive pas pour les sous rubriques

Code :
  1. <?
  2.          $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  3.          $qry = pg_query($conn, $sql);
  4.          while ($result = pg_fetch_assoc($qry))
  5.           {
  6.          ?>
  7.          <h2><a href="javascript:go(<?=$result['cat_cle']?> )">Infos de <?=$result['cat_lib']?></a></h2>
  8.          <DIV ID="rubrique6" STYLE="position:relative"></DIV>
  9.          <?
  10.           }
  11.          ?>


Pour le lien (ouvrir ou fermer la rubrique) j'ai utilisé ma clé de catégorie. Est-ce une bonne solution?? Comment feriez-vous??

Reply

Marsh Posté le 28-02-2006 à 14:28:28   

Reply

Marsh Posté le 28-02-2006 à 19:17:29    

il faut que tu imbriques 2 boucles SQL
 

Code :
  1. $req_cat = 'SELECT cat FROM table... ';
  2. while mysql_fetch_array($req_cat){
  3.   echo 'la catégorie : '.$req_cat['cat'];
  4.    $req_sscat = 'SELECT sscat FROM table WHERE cat = '.$req_cat['cat'];
  5.      while mysql_fetch_array($req_sscat){
  6.         echo 'la sous catégorie : '.$req_sscat['sscat'];
  7.       }
  8. }


 
Voilà, bonne chance

Message cité 1 fois
Message édité par newneo2001 le 01-03-2006 à 09:50:39
Reply

Marsh Posté le 01-03-2006 à 09:47:19    

Je n'y arrive pas..
 
Voici mes requetes.

Code :
  1. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  2. $qry = pg_query($conn, $sql);
  3. $result = pg_fetch_assoc($qry);
  4. $sql2 = " SELECT doc_cle, doc_lib, doc_type, doc_file, doc_cat FROM documents WHERE doc_cat=".$result['cat_cle']." ORDER BY doc_lib DESC ";
  5. $qry2 = pg_query($conn, $sql2);
  6. $result2 = pg_fetch_assoc($qry2);


 
Je souhaite boucler cette ligne:  

Code :
  1. rub2 = '<a href="2001/dec.php">n°6 Décembre</a><br> <a href="2001/sept.php">n°5 Septembre</a><br> <a href="2001/juin.php">n°4 Juin</a><br> <a href="2001/avril.php">n°3 Avril</a>';


 
où :
2 = cat_cle;
2001/dec.php = doc_file
n°6 Décembre = doc_lib
 
Merci d'avance

Reply

Marsh Posté le 01-03-2006 à 09:55:44    

ben c'est exactement le code que je t'ai fait au dessus.
 
$req_cat = $sql
$req_sscat = $sql2
 
il faut juste rajouter les mysql_query apres les $req_cat et $req_sscat mais ca tu le sais déjà.
 
Il est où le problème ?

Reply

Marsh Posté le 01-03-2006 à 10:06:54    

Ben ça m'affiche une liste énorme où est écrit !: "categorie:souscategorie:...."
 
Voici mon code, regarde s'il te parait correct?

Code :
  1. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  2. $qry = pg_query($conn, $sql);
  3. $result = pg_fetch_assoc($qry);
  4. while (pg_fetch_array($qry, O, PGSQL_ASSOC))
  5. {
  6. echo 'la catégorie : '.$sql['cat_lib'];
  7. $sql2 = " SELECT doc_cle, doc_lib, doc_type, doc_file, doc_cat FROM documents WHERE doc_cat=".$result['cat_cle']." ORDER BY doc_lib DESC ";
  8. $qry2 = pg_query($conn, $sql2);
  9. $result2 = pg_fetch_assoc($qry2);
  10. while (pg_fetch_array($qry2, O, PGSQL_ASSOC))
  11. {
  12. echo 'la sous catégorie : '.$sql2['doc_lib'];
  13. }
  14. }

Reply

Marsh Posté le 01-03-2006 à 10:12:44    

normal que ca marche pas
 
ton problème vient de là
 

Code :
  1. $result = pg_fetch_assoc($qry);
  2. while (pg_fetch_array($qry, O, PGSQL_ASSOC))


 
ca sert à rien ta boucle while là.
 
corrige comme ca normalement :
 

Code :
  1. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  2. $qry = pg_query($conn, $sql);
  3. while ($result = pg_fetch_assoc($qry))
  4.     {
  5.     echo 'la catégorie : '.$result['cat_lib'].'</br>';


 
tien moi au courant
++


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 10:19:45    

jenny50 a écrit :

Ben ça m'affiche une liste énorme où est écrit !: "categorie:souscategorie:...."
 
Voici mon code, regarde s'il te parait correct?

Code :
  1. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  2. $qry = pg_query($conn, $sql);
  3. $result = pg_fetch_assoc($qry);
  4. while (pg_fetch_array($qry, O, PGSQL_ASSOC))
  5. {
  6. echo 'la catégorie : '.$sql['cat_lib'];
  7. $sql2 = " SELECT doc_cle, doc_lib, doc_type, doc_file, doc_cat FROM documents WHERE doc_cat=".$result['cat_cle']." ORDER BY doc_lib DESC ";
  8. $qry2 = pg_query($conn, $sql2);
  9. $result2 = pg_fetch_assoc($qry2);
  10. while (pg_fetch_array($qry2, O, PGSQL_ASSOC))
  11. {
  12. echo 'la sous catégorie : '.$sql2['doc_lib'];
  13. }
  14. }



waouh c'est magnifiquement n'importe quoi :o
 
Tu fais

Code :
  1. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";


definition d'une chaine de caractère ( dans ce cas précis une requete)

Code :
  1. $qry = pg_query($conn, $sql);


execution de la requete

Code :
  1. $result = pg_fetch_assoc($qry);


tu recupères le résultat de la requete dans un tableau associatif

Code :
  1. while (pg_fetch_array($qry, O, PGSQL_ASSOC)) {


tu récupères la ligne suivantes du resultat de la requete ( la je sais déjà pas ce qu'il fait vu que tu as déjà un fetch avant)

Code :
  1. echo 'la catégorie : '.$sql['cat_lib'];


Et le tu fais un echo de la case 'cat_lib' de ton tableau $sql ( qui est en fait un string défini plutot).
Pas trop étonnant que ça marche pas.
Il vaut mieux essayer de comprendre ce qu'on fait plutot que d'assembler 2/3 bouts de code péchés a droite a gauche sur le net!
 
Par ailleurs newneo2001, ton code c'est nawak aussi :o
[edit] le code nawak en question c'est celui la

newneo2001 a écrit :


Code :
  1. $req_cat = 'SELECT cat FROM table... ';
  2. while mysql_fetch_array($req_cat){
  3.   echo 'la catégorie : '.$req_cat['cat'];
  4.    $req_sscat = 'SELECT sscat FROM table WHERE cat = '.$req_cat['cat'];
  5.      while mysql_fetch_array($req_sscat){
  6.         echo 'la sous catégorie : '.$req_sscat['sscat'];
  7.       }
  8. }


 


les deux variables dans les echos n'existent pas


Message édité par anapajari le 01-03-2006 à 10:21:29
Reply

Marsh Posté le 01-03-2006 à 10:24:34    

anapajari > si tu veux, mais ca serait bien de dire pourquoi alors ?
 
Pour ce que tu dis du code jenny50, oui ca je sais que ca merde c'est pour ca que je lui ai réécrit.
 
et tu proposes quoi alors toi ?


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 10:30:29    

Bin je l'ai dit pourquoi!!! [:spamafote]
Dans le 1er cas tu fait echo de $req_cat['cat'], or $req_cat c'est en fait la requete que tu as définie 2 lignes plus tot!
 
Dans ton 2eme bout de code tu ne t'es pas contre pas trompé, tu fais:

Code :
  1. while ($result = pg_fetch_assoc($qry))


et tu te sers bien de result et plus de sql

Reply

Marsh Posté le 01-03-2006 à 10:33:56    

ah oui c'est pcq le 1er code je l'ai fait pour lui montrer le schéma pour imbriquer les 2 boucles. mais le code était un peu capilotracté c'est vrai
 
j'ai aussi oubié d'exécuter les query dans mon 1er code si tu regardes bien aussi.
 
Ce qui compte c'est que ca marche maintenant :)


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 10:33:56   

Reply

Marsh Posté le 01-03-2006 à 10:53:24    

en fait j'avais déjà fait ce code. Mais ça ne fonctionne pas. Quand je visualise juste les catégorie apparaisent normal c'est correct dans mon body. Le hic vient vraiment de la partie php dans javascript. Mais quand je regarde le code source les sousrubriques sont présentes et bien remplies. Alors pourquoi elles ne s'affichent pas c'est un mistère.
 
Voici mon code entier. Regarde si tu vois qqch qui pourrait êtr une erreur.

Code :
  1. <?php
  2. require('fonctions.php');
  3. $conn = g_connect();
  4. $rep = '../img';
  5. ?>
  6. <html>
  7. <head>
  8. <title>Bodemer Infos du groupe Bodemer</title>
  9. <!-------------------------- Fichiers liés pour aérer code -->
  10. <link href="../css/style.css" rel="stylesheet" type="text/css">
  11. <script type="text/javascript" src="../css/javascript.js"></script>
  12. <script language="JavaScript">
  13. //-------------------------Liens de rubriques
  14. <?
  15. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  16. $qry = pg_query($conn, $sql);
  17. while ($result = pg_fetch_assoc($qry))
  18.    {
  19.    echo 'rub '.$result['cat_cle'].'=\'';
  20. $sql2 = " SELECT doc_cle, doc_lib, doc_type, doc_file, doc_cat FROM documents WHERE doc_cat=".$result['cat_cle']." ORDER BY doc_lib DESC ";
  21. $qry2 = pg_query($conn, $sql2);
  22. while ($result2 = pg_fetch_assoc($qry2))
  23. {
  24. echo '<img src="../img/puce.jpg" border="0" hspace="10"><a href="../admin/file.php?cle=' .$result2['doc_cle']. '&oid=' .$result2['doc_file']. '&doc_type' .$result2['doc_type']. '" target="bodemer">' .$result2['doc_lib'].'</a></br>';
  25. }
  26. echo '\'';
  27. }
  28. ?>
  29. //rub2 = '<a href="2001/dec.php">n°6 Décembre</a><br> <a href="2001/sept.php">n°5 Septembre</a><br> <a href="2001/juin.php">n°4 Juin</a><br> <a href="2001/avril.php">n°3 Avril</a>';
  30. function fermer(e){
  31. document.getElementById("rubrique"+e).innerHTML = '';
  32. document.getElementById("rubrique"+e).style.position = 'absolute';
  33. }
  34. function go(n){
  35. document.getElementById("rubrique"+n).style.position = 'relative';
  36. <?
  37. $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  38. $qry = pg_query($conn, $sql);
  39. while ($result = pg_fetch_assoc($qry))
  40.    {
  41.    echo 'if(n == '.$result['cat_cle'].'){ document.getElementById("rubrique"+n).innerHTML = rub' .$result['cat_cle']. '+ "   <a href=\'javascript:fermer("+n+" )\'><img src="../img/croix.jpg" border="0"></a>"; }'; 
  42.    }
  43. ?>
  44. //if(n == 1){
  45.     //document.getElementById("rubrique"+n).innerHTML = rub1 + "   <a href='javascript:fermer("+n+" )'><img src=\"../img/croix.jpg\" border=\"0\"></a>";
  46.     //}
  47. }
  48. </script>
  49. </head>
  50. <body>
  51. <table width="90%" align="center" height="100%" border="1" bordercolor="#CCCCCC" cellpadding="0" cellspacing="0">
  52. <tr valign="top">
  53.  <td>
  54.   <table width="100%" height="79%" border="0" cellpadding="0" cellspacing="0" bgcolor="#CCCCCC" bordercolor="#333399">
  55.    <tr valign="top">
  56.     <td width="25%">
  57. <!-------------------------- Tableau pour agir -->
  58.      <table width="80%" align="center" bgcolor="#CCCCCC" cellpadding="0" cellspacing="0">
  59.       <tr>
  60.        <td>
  61.         <div class="bodemerinfos">
  62.          <?
  63.          $sql = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_lib like '%20%' ORDER BY cat_lib DESC ";
  64.          $qry = pg_query($conn, $sql);
  65.          while ($result = pg_fetch_assoc($qry))
  66.           {
  67.          ?>
  68.          <h2><a href="javascript:go(<?=$result['cat_cle']?> )"><img src="../img/+.jpg" border="0" hspace="5">Bodemer Infos de <?=$result['cat_lib']?></a></h2>
  69.          <DIV ID="rubrique<?=$result['cat_cle']?>" STYLE="position:relative"></DIV>
  70.          <?
  71.           }
  72.          ?>
  73. <!-------------------------Code pour que le lien soit ouvert au chargement -->
  74.          <script language='JavaScript' type='text/javascript'>
  75.           go(6);
  76.          </script>
  77.         </div>
  78.        </td>
  79.       </tr>
  80.      </table>
  81.     </td>
  82.     <td width="75%" height="70%" bgcolor="#FFFFFF" align="center">
  83.      <iframe src="../public/infos.php" name="bodemer"></iframe>
  84.     </td>
  85.    </tr>
  86.   </table>
  87.  </td>
  88. </tr>
  89. </table>
  90. </body>
  91. </html>

Reply

Marsh Posté le 01-03-2006 à 11:00:23    

met en ligne et montre nous.
 
Le truc qu'il faut comprendre c'est que le PHP est interprété coté serveur alors que le JS coté client.
 
En fait ton PHP, doit te générer ta page HTML correctement, regarde ta source et si la source est bonne, c'est que c'est ton JS qui ne fonctionne pas.
 
A savoir que pour des menu dynamiques je te conseille plus l'utilisation des CSS qui peut permettre ce genre de menu. Et c'est bien mieux que le javascript


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 11:28:39    

C'est trop le bazar pour le mettre en ligne car ma base est géré en interne...
En ce qui concerne les css je suis dac avec toi mais j'aurais voulu régler ce problème. J'aime pas quand quelque chose reste en suspens...
 
Merci de ton aide jvais voir comment je peux faire. C'est bien mon JS qui ne fonctionne pas puisque ma source est bonne...

Reply

Marsh Posté le 01-03-2006 à 11:31:33    

Ce qui faut faire c'est d'abord faire fonctionner ton menu sans le PHP. Ecrit ta source en dure. Qd ton menu fonctionne, là tu as qu'à remplacer le dure par le PHP.
 
@++


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 11:45:53    

merci mais justement c'est la méthode que j'ai utilisé...
Et ça ne fonctionne pas... EN dure y'a pas de soucis tout marche.
 
1. j'ai changer mon code dans mon body (le plus simple) pas de soucis.
2. mettre mon php dans mon JS et là merdage...
 
Il doit y avoir un petit bug

Reply

Marsh Posté le 01-03-2006 à 11:50:38    

c'est que ton code PHP, ne génère pas un code HTML valide, tout simplement.
 
Maintenant ti tu mets pas en ligne on pourra difficilement t'aider +


---------------
N'oubliez pas de mettre [RESOLU] dans le titre quand c'est fini - Pour poster vos sources : http://paste.clicksources.com/
Reply

Marsh Posté le 01-03-2006 à 12:11:38    

jenny50 a écrit :

merci mais justement c'est la méthode que j'ai utilisé...
Et ça ne fonctionne pas... EN dure y'a pas de soucis tout marche.
 
1. j'ai changer mon code dans mon body (le plus simple) pas de soucis.
2. mettre mon php dans mon JS et là merdage...
 
Il doit y avoir un petit bug


Si ca marche pas, c'est que le code php ne te cré pas de code html respectant la même régle que ce que t'avais mis en place avec ta version "en dur".
Faute d'exemple "dynamique" accéssible sur un serveur, c'est à toi de regarder le code html de la page tel que reçu par le navigateur afin de chercher les différences. On ne poura pas le faire à ta place.

Reply

Marsh Posté le 01-03-2006 à 12:26:39    

j'en ai bien conscience.. je vous remercie de votre aide.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed