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

  FORUM HardWare.fr
  Programmation
  PHP

  problème de boucle

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

problème de boucle

n°1417618
jenny50
Posté le 01-08-2006 à 17:22:35  profilanswer
 

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.       <? } ?>

mood
Publicité
Posté le 01-08-2006 à 17:22:35  profilanswer
 

n°1417654
anapajari
s/travail/glanding on hfr/gs;
Posté le 01-08-2006 à 18:45:18  profilanswer
 

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>


 

n°1417911
jenny50
Posté le 02-08-2006 à 09:16:39  profilanswer
 

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?

n°1418012
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-08-2006 à 11:04:38  profilanswer
 

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


???

n°1418052
jenny50
Posté le 02-08-2006 à 12:09:51  profilanswer
 

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. }


n°1418056
anapajari
s/travail/glanding on hfr/gs;
Posté le 02-08-2006 à 12:26:31  profilanswer
 

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
n°1418068
jenny50
Posté le 02-08-2006 à 13:02:39  profilanswer
 

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.


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

  problème de boucle

 

Sujets relatifs
problème de boucle/session : envoi de doublons en nombre variable ?!probleme affichage boucle
problème de variable en boucle arrivant d'un formulaireprobleme de double boucle et variables... [résolu]
probleme de boucleprobleme de boucle avec une date résolu
Petit problème de boucle[Résolu] Probleme boucle toute simple pourtant
Probleme pour boucle sur collection userformprobleme boucle... grosse boucle... voir probleme à la fin
Plus de sujets relatifs à : problème de boucle


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