Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/06/2007, 15h10   #1
Futur Membre du Club
 
Homme
Ingénieur systèmes et réseaux
Inscription : mai 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : mai 2006
Messages : 62
Points : 19
Points : 19
Par défaut [SQL] Gérer les droits sur des modules !

Bonjour à tous,
je suis en train de développer en php un système de module, donc en gros je m'explique, on créait un droit auquel on ajoutera des modules (c'est fait et ca fonctionne), ensuite pour le code que je vais vous montrer, on récupère le droit attribué à la session puis on récupère les modules attribués au droit.

Ensuite on dis quoi afficher, mais le problème est qu'à cause du while, g les menu qui se mettent en double voir plus tout dépend du nombre de module que ma table possède, si quelqu'un peut m'aider à résoudre ce problème je lui en serais reconnaissant :

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<?php
$hote = 'localhost';
$user = 'root';
$password = '';
$base = 'ecommerce';
 
mysql_connect($hote,$user,$password) or die("vous n'avez pas pu vous connecter à la base de données, les identifiants sont incorrects");
mysql_select_db($base) or die("pb de connection à la base");
 
$session = $_SESSION['pseudo']; //login de session
 
$slct_nom_droit = mysql_query("
SELECT droits.nom_droit FROM droit_util
INNER JOIN utilisateur ON droit_util.fk_utilisateur = utilisateur .id_util 
INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
WHERE utilisateur.login_util = '".$session."'");
$donnees = mysql_fetch_array($slct_nom_droit);//on récupère le nmo du droit pour la session (par exemple pour la session ca sera Administrateur)
 
$slct_module_droit = mysql_query("
SELECT modules.nom_module
FROM module_droits
INNER JOIN droits ON module_droits.fk_droits = droits.id_droit
INNER JOIN modules ON module_droits.fk_module = modules.id_module
WHERE droits.nom_droit = '".$donnees['nom_droit']."'");//On récupère les différents modules auquel l'admin a accès (général et Utilisateurs)
while($donnees = mysql_fetch_array($slct_module_droit))
{
if($donnees['nom_module'] == 'General')
{
?>
<div id="menu_entete">
	<h4>Général</h4><!--GENERAL -->
</div>
<div id="menu_corps">
	<ul>
		<li><a href="index.php">Accueil</a></li>
	</ul>
</div>
<div id="menu_pied">
</div>
<?php
}	
if($donnees['nom_module'] == 'Utilisateur')
{
?>
<div id="menu_entete">
	<h4>Utilisateurs</h4><!-- UTILISATEUR -->
</div>
<div id="menu_corps">
	<ul>
		<li><a href="gestion_utilisateurs.php?gestion=liste">Gestion Utilisateurs</a></li>
		<li><a href="gestion_droits.php?gestion=liste">Gestion des Droits</a></li>
	</ul>
</div>
<div id="menu_pied">
</div>
<?php
}
}
?>
furth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 04h33   #2
Membre confirmé
 
Homme Clément Béni
Ingénieur qualité méthodes
Inscription : mars 2004
Messages : 221
Détails du profil
Informations personnelles :
Nom : Homme Clément Béni
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2004
Messages : 221
Points : 294
Points : 294
Bonjour furth,

Avant toute chose, je tiens à faire remarquer qu'il est préférable (et demandé) de rédiger plus correctement les post. Ton post est parsemé d'abréviations sms et est mal ponctué.
Merci de faire plus attention pour les prochains.

Merci également de fournir la structure de ta base de donnée. Je pense toutefois avoir compris ce que tu souhaitais faire.
Je n'ai pas testé ma solution, ne disposant pas de la base. Il y a peut être des erreurs de syntaxe, mais la logique est là.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
      /**
       * on recupere la liste des droits de l'utilisateur 
       */
      $slct_nom_droit = mysql_query(" 
            SELECT droits.nom_droit 
            FROM droit_util 
            INNER JOIN utilisateur 
            ON droit_util.fk_utilisateur = utilisateur .id_util 
            INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
            WHERE utilisateur.login_util = '".$session."'"
      );
      
      /* on rentre les droits dans un tableau */
      $i = 0 ;
      while( $table_droit = mysql_fetch_array($slct_nom_droit) ){
            $droit[$i] = $table_droit['nom_droit'] ;
            
            $i++ ;
      }
      
      
      /** 
       * on rentre tous les droits existant dans un tableau 
       */
      $slct_module_droit = mysql_query(" 
            SELECT modules.nom_module 
            FROM module_droits 
            INNER JOIN droits 
            ON module_droits.fk_droits = droits.id_droit 
            INNER JOIN modules 
            ON module_droits.fk_module = modules.id_module 
            WHERE droits.nom_droit = '".$donnees['nom_droit']."'"
      );
      
      /* on initialise le tableau des modules */
      $j = 0 ;
      $modules[$j] = '' ; ;
      
      /* on rentre les modules de l'utilisateur dans un tableau */
      while( $table_modules = mysql_fetch_array($slct_droit) ){
            $ok = true ;
            
            /* on regarde si module est dans la liste */
            foreach($modules as $m){
                  
                  //si le module y est
                  if($m == $table_modules['nom_module']){
                        $ok = false ; // on dit que c'est pas bon
                  }
            }
            
            /* si c'est bon, on la rajoute */
            if( $ok == true ) {
                  $modules[$j] = $table_modules['nom_module'] ;
                  $j++ ;
            }
      }
      
      /**
       * on listes les modules
       */
       echo '<ul>' ;
      foreach ($modules as $n) {
            echo '<li>'.$n.'</li>' ;
      }
      echo '<ul>' ;
?>
[/quote]Colorez votre code PHP sur les forums grâce à Developpez.com
azertyman
__________________
"Une méthode fixe n'est pas une méthode" (Proverbe chinois)
azertyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 09h32   #3
Futur Membre du Club
 
Homme
Ingénieur systèmes et réseaux
Inscription : mai 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : mai 2006
Messages : 62
Points : 19
Points : 19
Merci azertyman,
Je veillerez plus tard à ce que mes post soient plus compréhensif, je m'en vais tout de suite tester ta solution.

Je vous tiens au courant...
furth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 10h04   #4
Futur Membre du Club
 
Homme
Ingénieur systèmes et réseaux
Inscription : mai 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : mai 2006
Messages : 62
Points : 19
Points : 19
Rebonjour à tous,
Azertyman, je viens de tester ton code, il marche à merveille.
Je connaissais pas trop les foreach mais je vois que c'est bien puissant et je pense que ca me servira à l'avenir.

J'aurais juste une petit question soit à toi, soit à tous, au premier qui répond .

C'est pour la deuxième requête SQL, comment se servir du nom du droit attribué à la session récupéré dans la requête précédente, regarde mon code il t'en dira plus...

Code php :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
/**
   * on recupere la liste des droits de l'utilisateur 
   */
$slct_nom_droit = mysql_query(" 
		SELECT droits.nom_droit 
		FROM droit_util 
		INNER JOIN utilisateur 
		ON droit_util.fk_utilisateur = utilisateur .id_util 
		INNER JOIN droits ON droit_util.fk_droit = droits.id_droit 
		WHERE utilisateur.login_util = '".$session."'"
);
 
/* on rentre les droits dans un tableau */
$i = 0 ;
while( $table_droit = mysql_fetch_array($slct_nom_droit) )
{
	$droit[$i] = $table_droit['nom_droit'] ;
	$i++ ;
}
 
 
  /** 
   * on rentre tous les droits existant dans un tableau 
   */
$slct_module_droit = mysql_query(" 
		SELECT modules.nom_module 
		FROM module_droits 
		INNER JOIN droits 
		ON module_droits.fk_droits = droits.id_droit 
		INNER JOIN modules 
		ON module_droits.fk_module = modules.id_module 
		WHERE droits.nom_droit = 'dje'"/*ICI, Comment récupérer le droit ??*/
);
 
 
/* on initialise le tableau des modules */
$j = 0 ;
$modules[$j] = '' ; 
 
 /* on rentre les modules de l'utilisateur dans un tableau */
while( $table_modules = mysql_fetch_array($slct_module_droit) )
{
	$ok = true ;
 
	/* on regarde si module est dans la liste */
	foreach($modules as $m)
	{          
		//si le module y est
		if($m == $table_modules['nom_module'])
		{
			$ok = false ; // on dit que c'est pas bon
		}
	}
 
	/* si c'est bon, on la rajoute */
	if( $ok == true ) 
	{
		$modules[$j] = $table_modules['nom_module'] ;
		$j++ ;
	}
}
 
  /**
   * on listes les modules
   */
echo '<ul>' ;
foreach ($modules as $n) 
{
	echo '<li>'.$n.'</li>' ;
	if($n == 'General')
	{
		echo 'Module <b>Général</b> affiché';
	}
	else if($n == 'Outils')
	{
		echo 'Module <b>Outils</b> affiché';
	}
	else if($n == 'Menu')
	{
		echo 'Module <b>Menu</b> affiché';
	}
	else if($n == 'Produit')
	{
		echo 'Module <b>Produit</b> affiché';
	}
	else if($n == 'Article')
	{
		echo 'Module <b>Article</b> affiché';
	}
	else if($n == 'Fabricant')
	{
		echo 'Module <b>Fabricant</b> affiché';
	}
	else if($n == 'Utilisateur')
	{
		echo 'Module <b>Utilisateur</b> affiché';
	}
}
echo '<ul>' ;
?>
furth est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 11h24   #5
Membre confirmé
 
Homme Clément Béni
Ingénieur qualité méthodes
Inscription : mars 2004
Messages : 221
Détails du profil
Informations personnelles :
Nom : Homme Clément Béni
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mars 2004
Messages : 221
Points : 294
Points : 294
Pour définir un droit précis, il faut sois définir un droit particulier
Code :
WHERE droits.nom_droit = '.$droits[0].'
ou sois faire la requete dans le while

Code :
1
2
3
4
5
while( $table_droit = mysql_fetch_array($slct_nom_droit) )
{
          ....
          'WHERE droits.nom_droit = '.$table_droit['nom_droit'].'
}
Le problème, c'est qu'on effectue n-requetes. Il doit y avoir une solution plus efficace.

De plus, je ne suis pas sur que 'dje' soit un droit.
azertyman
__________________
"Une méthode fixe n'est pas une méthode" (Proverbe chinois)
azertyman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 12h01   #6
Futur Membre du Club
 
Homme
Ingénieur systèmes et réseaux
Inscription : mai 2006
Messages : 62
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 26
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux

Informations forums :
Inscription : mai 2006
Messages : 62
Points : 19
Points : 19
Sisi, "dje" est un droit que j'ai créer pour tester le tout
furth est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h41.


 
 
 
 
Partenaires

Hébergement Web