problème de boucle

problème de boucle - PHP - Programmation

Marsh Posté le 01-08-2006 à 17:22:35    

Bonjour c'est encore un post de JENNY !!!
 
Cette fois-ci je cale sur ma boucle de résultats. En fait, j'ai une partie admin avec mot de passe. Chaque utilisateurs est lié à un groupe. Un utilisateur peut avoir plusieurs groupes. J'affiche sur mon index de mon admin un menu selon le groupe de mon utilisateur. Ici le problème est que mon USER est lié à 2 groupes, donc qu'il doit voir 3 rubriques : CANDIDATURE, EVENEMENT et CAT 24.
 
Le problème est qu'il voit uniquement la CAT 24 alors qu'il appartient au groupe "sca" et "dlf". Voici mon code, pourriez-vous m'aider et me dire comment je dois faire pour qu'il prenne en compte les 2 profils de la personne qui se connecte? Quand j'execute ma requete j'ai bien 2 lignes de résultats.

Code :
  1. //vérification du login et mot de passe
  2. if ($wlog=='log')
  3. {
  4. $wlogin='';
  5. $wpass='';
  6. if(isset($HTTP_POST_VARS['uti_login']))
  7.  {
  8.  $wlogin=$HTTP_POST_VARS['uti_login'];
  9.  }
  10. if(isset($HTTP_POST_VARS['uti_pass']))
  11.  {
  12.  $wpass=$HTTP_POST_VARS['uti_pass'];
  13.  }
  14. $sql = " SELECT utilisateurs.uti_cle, utilisateurs.uti_nom, utilisateurs.uti_prenom, grputi.grp_cle, grp_vis, grp_adm, grp_dir, grp_bod, grp_arc, grp_che, grp_sob, grp_sca, grp_maf, grp_vir, grp_fle, grp_ale, grp_arg, grp_val, grp_dlf FROM liengrp INNER JOIN utilisateurs ON utilisateurs.uti_cle=liengrp.uti_cle INNER JOIN grputi ON grputi.grp_cle=liengrp.grp_cle WHERE uti_login='".$wlogin."' and uti_pass='".$wpass."' ";
  15. $qry = pg_query($conn, $sql);
  16. $individu = pg_fetch_object($qry);
  17. //si la requete est vide alors mot de passe ou login incorrect
  18. if (!$individu)
  19.  {
  20.  header("Location:adm_login.php?m=1" );
  21.  exit();
  22.  }
  23. //sinon on ouvre la session avec ses caractéristiques
  24.  else
  25.   {
  26.   $_SESSION['ses_nom']=$individu->uti_nom;
  27.   $_SESSION['ses_prenom']=$individu->uti_prenom;
  28.   $_SESSION['ses_grp_cle']=$individu->grp_cle;
  29.   $_SESSION['ses_grp_vis']=$individu->grp_vis;
  30.   $_SESSION['ses_grp_adm']=$individu->grp_adm;
  31.   $_SESSION['ses_grp_dir']=$individu->grp_dir;
  32.   $_SESSION['ses_grp_bod']=$individu->grp_bod;
  33.   $_SESSION['ses_grp_arc']=$individu->grp_arc;
  34.   $_SESSION['ses_grp_che']=$individu->grp_che;
  35.   $_SESSION['ses_grp_sob']=$individu->grp_sob;
  36.   $_SESSION['ses_grp_sca']=$individu->grp_sca;
  37.   $_SESSION['ses_grp_maf']=$individu->grp_maf;
  38.   $_SESSION['ses_grp_vir']=$individu->grp_vir;
  39.   $_SESSION['ses_grp_fle']=$individu->grp_fle;
  40.   $_SESSION['ses_grp_ale']=$individu->grp_ale;
  41.   $_SESSION['ses_grp_arg']=$individu->grp_arg;
  42.   $_SESSION['ses_grp_val']=$individu->grp_val;
  43.   $_SESSION['ses_grp_dlf']=$individu->grp_dlf;
  44.   $_SESSION['ses_log']='oui';
  45.   }
  46. }


 

Code :
  1. <?
  2.        if (($_SESSION['ses_grp_adm']==1)||($_SESSION['ses_grp_sca']==1))
  3.        {
  4.       ?>
  5.       <tr>
  6.        <td align="left" id="rubrique">Candidatures</td>
  7.       </tr>
  8.       <tr>
  9.        <td align="left" id="sousrubrique">
  10.         <a href="adm_listcand.php" target="contenu">Consulter la liste</a><br>
  11.        </td>
  12.       </tr>
  13.       <tr>
  14.        <td align="left" id="rubrique">Evènements</td>
  15.       </tr>
  16.       <tr>
  17.        <td align="left" id="sousrubrique">
  18.         <a href="adm_listeve.php" target="contenu">Consulter la liste</a><br>
  19.        </td>
  20.       </tr>
  21.       <? } ?>
  22.       <?
  23.        if ($_SESSION['ses_grp_dlf']==1)
  24.         {
  25.         $sql = " SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC ";
  26.         $qry = pg_query($conn,$sql);
  27.         $result = pg_fetch_assoc($qry);
  28.       ?>
  29.       <tr>
  30.        <td align="left" id="rubrique"><?=$result['cat_lib']?></td>
  31.       </tr>
  32.       <tr>
  33.        <td align="left" id="sousrubrique">
  34.         <?
  35.         while ($result2 = pg_fetch_assoc($qry))
  36.          {
  37.         ?>
  38.         <a href="adm_listeve.php?scat=<?=$result2['scat_cle']?>" target="contenu"><?=$result2['scat_lib']?></a><br>
  39.         <?
  40.          }
  41.         ?>
  42.        </td>
  43.       </tr>
  44.       <? } ?>

Reply

Marsh Posté le 01-08-2006 à 17:22:35   

Reply

Marsh Posté le 01-08-2006 à 18:45:18    

jenny50 a écrit :

Bonjour c'est encore un post de JENNY !!!


\o/  [:atsuko]  \o/
s'paske tu fais encore n'importe quoi !!!!
 
Remplace toute la partie en dessous de "if ($_SESSION['ses_grp_dlf']==1)" par  

Code :
  1. <?php
  2. if ($_SESSION['ses_grp_dlf']==1)
  3. {
  4.   $sql = " SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC ";
  5.   $qry = pg_query($conn,$sql);
  6.   $oldcat = '';
  7.   while ($result = pg_fetch_assoc($qry))
  8.   {
  9.     if ($old != $result['cat_lib']){
  10.       if ( $old != '' ){
  11.   ?>
  12.     </td>
  13.     </tr>
  14.   <?
  15.       }
  16.   ?>
  17.     <tr>
  18.     <td align="left" id="rubrique"><?=$result['cat_lib']?></td>
  19.     </tr>
  20.     <tr>
  21.     <td align="left" id="sousrubrique">
  22. <?
  23.     }
  24. ?>
  25.     <a href="adm_listeve.php?scat=<?=$result['scat_cle']?>" target="contenu"><?=$result['scat_lib']?></a><br>
  26. <?
  27.   }
  28. ?>
  29.   </td>
  30.   </tr>


 

Reply

Marsh Posté le 02-08-2006 à 09:16:39    

T'as solution ne fonctionne pas. Je pense que c'est dans ma première requete que ça coince. Car il n'affiche qu'une ligne de résultats, soit le groupe de la session 'dlf' pour mon user alors qu'il appartient aussi au groupe de session 'sca'. On devrait voir s'afficher :  
CAT 24
  >scat1
  >scat2...
EVENEMENT
  >consulter la liste
CANDIDATURE
  >consulter la liste
 
Avec mon script je vois ça :  
CAT 24
  >scat1
  >scat2...
 
Avec ton script, on voit ça :  
CAT 24
  >scat1
CAT 24
  >scat2
...
 
Comment je peux faire?

Reply

Marsh Posté le 02-08-2006 à 11:04:38    

jenny50 a écrit :

Comment je peux faire?


Réfléchir ?  :whistle:  
 
Effectivement il me manquait un truc dans le code que j'ai filé!
Voila en corrigé:  

Code :
  1. <?php
  2.     if ($_SESSION['ses_grp_dlf']==1)
  3.     {
  4.      $sql = " SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC ";
  5.      $qry = pg_query($conn,$sql);
  6.      $oldcat = '';
  7.      while ($result = pg_fetch_assoc($qry))
  8.      {
  9.        if ($oldcat != $result['cat_lib']){
  10.          if ( $oldcat != '' ){
  11.      ?>
  12.        </td>
  13.        </tr>
  14.      <?
  15.          }
  16.      ?>
  17.        <tr>
  18.        <td align="left" id="rubrique"><?=$result['cat_lib']?></td>
  19.        </tr>
  20.        <tr>
  21.        <td align="left" id="sousrubrique">
  22.     <?
  23.        }
  24.     ?>
  25.        <a href="adm_listeve.php?scat=<?=$result['scat_cle']?>" target="contenu"><?=$result['scat_lib']?></a><br>
  26.     <?
  27.        $oldcat = $result['cat_lib'];
  28.      }
  29.     ?>
  30.      </td>
  31.      </tr>


Et maintenant tu devrais obtenir le même resultat qu'avec ta méthode ( sauf que la mienne est correcte ;) )
Et ensuite pourquoi t'étonnes tu de n'avoir que la cat 24 alors que dans ta requete tu as:

Citation :

SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC


???

Reply

Marsh Posté le 02-08-2006 à 12:09:51    

Citation :

Et ensuite pourquoi t'étonnes tu de n'avoir que la cat 24 alors que dans ta requete tu as:
SELECT cat_lib, scat_cle, scat_lib FROM souscategorie INNER JOIN categorie ON scat_categorie=cat_cle WHERE cat_cle=24 ORDER BY scat_cle ASC


???[/quotemsg]
 
Mais non c'est dans cette requete que ça ne fonctionne pas. Il affiche seulement la première ligne de résultat, donc il considère seulement le premier groupe (droit 'dlf') auquel appartient mon user. Alors qu'il appartient à au autre groupe (droit 'sca'). C'est pour cette raison que je ne vois que CAT24. Mais je ne sais pas comment faire ma boucle pour qu'il puisse considéré que mon user a plusieurs groupes !!!
REQUETE avec PROBLEME à mon avis :  

Code :
  1. //vérification du login et mot de passe
  2. if ($wlog=='log')
  3. {
  4. $wlogin='';
  5. $wpass='';
  6. if(isset($HTTP_POST_VARS['uti_login']))
  7.  {
  8.  $wlogin=$HTTP_POST_VARS['uti_login'];
  9.  }
  10. if(isset($HTTP_POST_VARS['uti_pass']))
  11.  {
  12.  $wpass=$HTTP_POST_VARS['uti_pass'];
  13.  }
  14. $sql = " SELECT utilisateurs.uti_cle, utilisateurs.uti_nom, utilisateurs.uti_prenom, grputi.grp_cle, grp_vis, grp_adm, grp_dir, grp_bod, grp_arc, grp_che, grp_sob, grp_sca, grp_maf, grp_vir, grp_fle, grp_ale, grp_arg, grp_val, grp_dlf FROM liengrp INNER JOIN utilisateurs ON utilisateurs.uti_cle=liengrp.uti_cle INNER JOIN grputi ON grputi.grp_cle=liengrp.grp_cle WHERE uti_login='".$wlogin."' and uti_pass='".$wpass."' ";
  15. $qry = pg_query($conn, $sql);
  16. $individu = pg_fetch_object($qry);
  17. //si la requete est vide alors mot de passe ou login incorrect
  18. if (!$individu)
  19.  {
  20.  header("Location:adm_login.php?m=1" );
  21.  exit();
  22.  }
  23. //sinon on ouvre la session avec ses caractéristiques
  24.  else
  25.   {
  26.   $_SESSION['ses_nom']=$individu->uti_nom;
  27.   $_SESSION['ses_prenom']=$individu->uti_prenom;
  28.   $_SESSION['ses_grp_cle']=$individu->grp_cle;
  29.   $_SESSION['ses_grp_vis']=$individu->grp_vis;
  30.   $_SESSION['ses_grp_adm']=$individu->grp_adm;
  31.   $_SESSION['ses_grp_dir']=$individu->grp_dir;
  32.   $_SESSION['ses_grp_bod']=$individu->grp_bod;
  33.   $_SESSION['ses_grp_arc']=$individu->grp_arc;
  34.   $_SESSION['ses_grp_che']=$individu->grp_che;
  35.   $_SESSION['ses_grp_sob']=$individu->grp_sob;
  36.   $_SESSION['ses_grp_sca']=$individu->grp_sca;
  37.   $_SESSION['ses_grp_maf']=$individu->grp_maf;
  38.   $_SESSION['ses_grp_vir']=$individu->grp_vir;
  39.   $_SESSION['ses_grp_fle']=$individu->grp_fle;
  40.   $_SESSION['ses_grp_ale']=$individu->grp_ale;
  41.   $_SESSION['ses_grp_arg']=$individu->grp_arg;
  42.   $_SESSION['ses_grp_val']=$individu->grp_val;
  43.   $_SESSION['ses_grp_dlf']=$individu->grp_dlf;
  44.   $_SESSION['ses_log']='oui';
  45.   }
  46. }


Reply

Marsh Posté le 02-08-2006 à 12:26:31    

jenny50 a écrit :


Mais non c'est dans cette requete que ça ne fonctionne pas. Il affiche seulement la première ligne de résultat, donc il considère seulement le premier groupe (droit 'dlf') auquel appartient mon user. Alors qu'il appartient à au autre groupe (droit 'sca'). C'est pour cette raison que je ne vois que CAT24. Mais je ne sais pas comment faire ma boucle pour qu'il puisse considéré que mon user a plusieurs groupes !!!


 [:kwak] Au secours  [:kwak]  
C'est normal qu'il n'affiche que le 1er groupe, tu ne boucles pas sur les résultats tu récupères juste le premier:

Code :
  1. $individu = pg_fetch_object($qry);


Tu mélanges toutes tes entitées et tu espères avoir le bon résultat.
 
Alors proprement tu devrais faire ainsi:
1- requête: récupération  des informations de l'utilisateur (utilisateurs.uti_cle, utilisateurs.uti_nom, utilisateurs.uti_prenom, uti_cle)
2- stockage dans $individu ( comme tu fais là)
3- requête: récupération de la liste des groupes auxquels appartient $individu ( via un where sur liengrp.uti_cle qui doit être égale à individu[uti_cle] récupéré en 1)
4- Requête de récupération de toutes les cats auquels les groupes récupérés en 3 ( n'oublie pas le distinct)
5- boucle sur les résultats cat:
 5.1- Affichage de la partie "cat"
 5.2- Requete de récupération des sous-catégorie de la cat
 5.3- boucle sur les résultats sous-cat
  5.3.1- affichage de chacune des sous-cat
 5.4- Fin d'affichage de la cat ( tu dois avoir des tr/td à fermer)
6- FIN
 
Et voila c'est tout! Mais encore une fois tu mélanges tout [:spamafote]
 
 
N.D.A.: il existe plusieurs façons bien plus optimisées de réaliser ceci ( ne serait qu'en jointant correctement les différents requêtes), je suis tout a fait d'accord. Le problème est de l'expliquer clairement à l'auteur de ce topic!


Message édité par anapajari le 02-08-2006 à 12:28:32
Reply

Marsh Posté le 02-08-2006 à 13:02:39    

Tu es vraiment super anapajari !!! Tu es patient et je te remercierai jamais assez!!!
 
C'est vrai que je mélange un peu tout mais surtout j'ai du mal à expliquer ce que je souhaite faire.
Je vais reprendre ma page avec toutes les informations données au dessus.

Reply

Sujets relatifs:

Leave a Replay

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