incrémentation

incrémentation - PHP - Programmation

Marsh Posté le 01-08-2006 à 11:10:03    

bonjour,  
 
J'ai un problème, je souhaite faire un compteur d'incrémentation pour avoir un menu dynamique de A à Z mais je n'y arrive pas. Voici le code tel qu'il est actuellement (avec mes essais).
 

Code :
  1. <?
  2.          $max = 20;
  3.          for ($i=12; $i!= $max ; $i++)
  4.           {
  5.           $sql_m = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_cle>22 AND cat_cle<32 ORDER BY cat_lib ASC ";
  6.           $qry_m = pg_query($conn,$sql_m);
  7.           while($result_m = pg_fetch_assoc($qry_m))
  8.            {
  9.            $cat = $result_m['cat_cle'];
  10.          ?>
  11.          <dt onClick="javascript:montre('smenu<?=$i?>');"><a href="#" target="bodemer"><?=$result_m['cat_lib']?></a></dt>
  12.           <dd id="smenu<?=$i?>">
  13.            <ul>
  14.             <?
  15.             $sql_f = " SELECT scat_cle, scat_lib FROM souscategorie WHERE scat_categorie = ".$cat." ORDER BY scat_cle ASC ";
  16.             $qry_f = pg_query($conn,$sql_f);
  17.             while ($result_f = pg_fetch_assoc($qry_f))
  18.              {
  19.             ?>
  20.             <li><a href=""><?=$result_f['scat_lib']?></a></li>
  21.             <?
  22.              }
  23.             }
  24.             ?>
  25.            </ul>
  26.           </dd>
  27.          <?
  28.            //}
  29.           }
  30.          ?>
  31.         </dl>


 
Code javascript du menu ouvrir/fermer

Code :
  1. <script language="javascript">
  2. function montre(id)
  3. {
  4. var d = document.getElementById(id);
  5. for (var i=1; i<=200; i++)
  6.  {
  7.  if (document.getElementById('smenu'+ i))
  8.   {
  9.   document.getElementById('smenu'+ i).style.display = 'none';
  10.   }
  11.  }
  12.  if(d)
  13.   {
  14.   d.style.display = 'block';
  15.   }
  16. }
  17. window.onload = montre;
  18. </script>

Reply

Marsh Posté le 01-08-2006 à 11:10:03   

Reply

Marsh Posté le 01-08-2006 à 11:13:14    

C'est quoi que tu veux exactement là ? Qu'est-ce qui ne marche pas ?
 
Faut donner bcp plus de détails.

Reply

Marsh Posté le 01-08-2006 à 11:25:17    

remplace  
 <dd id="smenu<?=$i?>">
 
par  <dd id="smenu<?echo $i?>">
 
c'est le menu d'alsacreation,non ?

Reply

Marsh Posté le 01-08-2006 à 11:28:52    

Aaah les topic de jenny50  [:atsuko]  
 
En gros tu fais ça:

Code :
  1. for ($i=12; $i!= $max ; $i++){
  2.   //execution requete
  3.   while($result_m = pg_fetch_assoc($qry_m)){
  4.     ...
  5.    print $i;
  6.   }
  7. }


Ton "for" te fait faire 8 itérations, dans chaque itération tu execute exactement la même requete (qui doit remonter en gros 10 enregistrements "cat_cle>22 AND cat_cle<32" ). Donc tu fais 80 itérations au total!!!
Est-ce bien que tu souhaites???

Reply

Marsh Posté le 01-08-2006 à 11:32:02    

Ben en fait,  
 
C'est mon compteur d'incrémentation qui ne fonctionne pas. Sur ma page mon menu devrait apparaitre de cette manière :  
CAT 22
  >scat1
  >scat2
  >scat3...
CAT 23
  >scat1
  >scat2...
 
Quand je clique sur CAT 23 son sous menu se déroule et le sous menu de la cat 22 se ferme (code javascript) Pour faire cette manip il faut que "smenu" de <dt> soit égal au "smenu" de <dd>

Code :
  1. #
  2. <dt onClick="javascript:montre('smenu<?=$i?>');"><a href="#" target="bodemer"><?=$result_m['cat_lib']?></a></dt>
  3. #
  4.                                             <dd id="smenu<?=$i?>">


 
Il n'y a uniquement ma "cat 22" qui apparait et quand je clique dessus, le reste de mes "cat" apparait.
 
En fait rien ne fonctionne comme je veux!!

Reply

Marsh Posté le 01-08-2006 à 11:34:11    

hey anapajari arrete de te moquer de moi !!!!
 
J'ai pas tout compris à ton post... As-tu compris ce que je veux faire?

Reply

Marsh Posté le 01-08-2006 à 11:38:38    

essaye deja de remplacer <?=$i?> ( qui sauf erreur de m part ne veut rien dire du tout ) par <? echo $?>  
 
en bonus ; tu ouvres des ul dans une boucle ( donc tu en ouvre plusieurs ) , tu les fermes a l'exterieur ( donc tu n'en ferme qu'un ) , idem pour les dd

Message cité 1 fois
Message édité par flo850 le 01-08-2006 à 11:42:09
Reply

Marsh Posté le 01-08-2006 à 11:39:14    

jenny50 a écrit :

hey anapajari arrete de te moquer de moi !!!!
 
J'ai pas tout compris à ton post... As-tu compris ce que je veux faire?


il te taquine juste ( si il avait voulu se moquer, il aurai ete moins gentil  [:twixy] )
 
en plus il a raison, je pense que tu vas faire afficher bcp plus de menu que ce que tu veux


Message édité par flo850 le 01-08-2006 à 11:41:58
Reply

Marsh Posté le 01-08-2006 à 11:53:44    

ben ouai je pense que c'est l'emplacement de ma boucle "for" qui ne va pas!!!
 
Mais je ne vois pas comment faire, hier j'ai essayé plein de choses mais sans succès.
Moi en tout je dois avoir 9 CATEGORIE donc mon compteur d'incrémentation doit être 12 pour CAT22, 13 pour CAT23...
 
Vous pouvez m'aider?

Reply

Marsh Posté le 01-08-2006 à 12:14:39    

flo850 a écrit :

essaye deja de remplacer <?=$i?> ( qui sauf erreur de m part ne veut rien dire du tout ) par <? echo $?>

En fait, les deux veulent dire la même chôse.
la seule différence, c'est qu'avec "<?=" tu n'as pas le droit de faire des traitements complexes, tu peux juste calculer une valeur qui sera celle affiché.

Reply

Marsh Posté le 01-08-2006 à 12:14:39   

Reply

Marsh Posté le 01-08-2006 à 13:44:16    

jenny50 a écrit :

hey anapajari arrete de te moquer de moi !!!!
J'ai pas tout compris à ton post... As-tu compris ce que je veux faire?


Je me moque pas je t'explique que tu as fais n'importe quoi (en gros tu fais une boucle dans une boucle et tu t'étonnes que les résultats ne soient pas bons)!!! [:spamafote]
Non j'avais pas compris ce que tu voulais faire, mais visiblement toi non plus :o
 

jenny50 a écrit :

ben ouai je pense que c'est l'emplacement de ma boucle "for" qui ne va pas!!!


ça c'est sur
 

jenny50 a écrit :

Mais je ne vois pas comment faire, hier j'ai essayé plein de choses mais sans succès.
Moi en tout je dois avoir 9 CATEGORIE donc mon compteur d'incrémentation doit être 12 pour CAT22, 13 pour CAT23...
 
Vous pouvez m'aider?


 
En gros, ce que tu dois faire c'est boucler sur tes catégories, puis sur tes sous-catégories ( sachant qu'on pourrait optimiser via une jointure, mais c'est une autre histoire).
Donc ça donne:

Code :
  1. <?php
  2. $i = 0;
  3. $sql_m = " SELECT cat_cle, cat_lib FROM categorie WHERE cat_cle>22 AND cat_cle<32 ORDER BY cat_lib ASC ";
  4. $qry_m = pg_query($conn,$sql_m);
  5. while($result_m = pg_fetch_assoc($qry_m)) {
  6.   $i++;
  7.   $cat = $result_m['cat_cle'];
  8. ?>
  9.     <dt onClick="javascript:montre('smenu<?=$i?>');"><a href="#" target="bodemer"><?=$result_m['cat_lib']?></a></dt>
  10.     <dd id="smenu<?=$i?>">
  11.     <ul>
  12. <?php
  13.   $sql_f = " SELECT scat_cle, scat_lib FROM souscategorie WHERE scat_categorie = ".$cat." ORDER BY scat_cle ASC ";
  14.   $qry_f = pg_query($conn,$sql_f);
  15.   while ($result_f = pg_fetch_assoc($qry_f)) {
  16. ?>
  17.       <li><a href=""><?=$result_f['scat_lib']?></a></li>
  18. <?php
  19.   }
  20. }
  21. ?>


enfin si j'ai tout compris ;)
 

Reply

Marsh Posté le 01-08-2006 à 14:37:48    

ok c'est exactement ce que je voulais...
 
En fait à chaque fois je veux trop pas oublier des trucs et en fait je me complique la vie...

Reply

Marsh Posté le 01-08-2006 à 15:10:51    

omega2 a écrit :

En fait, les deux veulent dire la même chôse.
la seule différence, c'est qu'avec "<?=" tu n'as pas le droit de faire des traitements complexes, tu peux juste calculer une valeur qui sera celle affiché.


 
je savais pas  
merci  [:youyou2224]

Reply

Sujets relatifs:

Leave a Replay

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