Table intermediaire et SQL

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 20:10

ensuite je veux afficher des liens en fonctions des droits, donc je fais une verification du groupe (selon la session) et en fonction de l'ID_GROUPE retourné je regarde les droits appliqués et j'affiche ou non mon lien.
Voila c'est exactement ça :wink:

reste plus qu'a appliquer l'idée :D

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

16 oct. 2005, 13:20

Bonjour,

Une chose que je ne comprend toujours pas, enfin je comprend ce que je fais mais pas pourquoi je n'y arrive pas, je dois pas faire correcetement :
<?php
// Pseudo validé alors mise en cache de l'ID_UTILISATEUR
	if ($loginOK) {
	
// Séléction des groupes
	$sql1 = "SELECT * FROM gesten_utilisateur_groupe ORDER BY ID_GROUPE DESC";
	$req1 = mysql_query($sql1) or die('Impossible de visualiser les groupes');

// Récupération du/des groupe(s) de l'utilisateur	
	$sql2 = "SELECT g3.ID_GROUPE
	FROM gesten_utilisateur as g1, gesten_utilisateur_groupe2 as g2, gesten_utilisateur_groupe as g3
	WHERE g1.PSEUDO ='".$pseudo."'
	AND g1.ID_UTILISATEUR = g2.ID_UTILISATEUR
	AND g2.ID_GROUPE = g3.ID_GROUPE";

	$req2 = mysql_query($sql2) or die('Impossible de visualiser les groupes');
	$group_utilisateur=array(); //tableau pour récupèrer le/les groupe(s) de l'utilisateur
		while($data2 = mysql_fetch_array($req2))
		{
			$group_utilisateur[]=$data2["ID_GROUPE"];
		} 
	
// Création de la boucle qui stoque le/les groupe(s) de l'utilisateur
		while($data3 = mysql_fetch_array($req1))
		{        
		   $groupe_utilisateur = $data3['ID_GROUPE']."/";
		} 

// Mise en cache des variables de sessions	
  	$_SESSION['id'] = $data['ID_UTILISATEUR'];
	$_SESSION['pseudo'] = $data['PSEUDO'];
	$_SESSION['mail'] = $data['MAIL'];
	$_SESSION['id_groupe'] = $groupe_utilisateur;

// Redirection vers le menu.php
header("Location: ../../index2.php");

?>
je devrais avoir en variable de session $_SESSION['id_groupe'] quelque chose comme ca => 3/2/1/ mais il ne me retourne que le dernier c'est à dire 1/

Commen faire alors pour qu'il me retourne la chaine complète ?
si j'ecris comme ca :
<php
// Création de la boucle qui stoque le/les groupe(s) de l'utilisateur
		while($data3 = mysql_fetch_array($req1))
		{        
		   $groupe_utilisateur = $data3['ID_GROUPE']."/";
                   echo $groupe_utilisateur;		
                } 
exit();
?>
il me retourne bien 3/2/1/ ce qui corespond bien au ID_GROUPE auquel appartient l'utilisateur

Si vous pouvez m'aider merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 oct. 2005, 13:25

tu ecrase toujours la valeur précédente => $groupe_utilisateur
while($data3 = mysql_fetch_array($req1))
        {        
           $groupe_utilisateur = $data3['ID_GROUPE']."/";
        }
essai en concaténant
$groupe_utilisateur="";
while($data3 = mysql_fetch_array($req1))
        {        
           $groupe_utilisateur. = $data3['ID_GROUPE']."/";
        }

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

16 oct. 2005, 14:40

J'ai un parse error,dans cette ligne :
<?php
$groupe_utilisateur.  = $data3['ID_GROUPE']."/";
?>

Mammouth du PHP | 19672 Messages

16 oct. 2005, 14:46

<?php
$groupe_utilisateur .= $data3['ID_GROUPE']."/";
?>
L'espace entre le "." et le "="
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 291 Messages

19 oct. 2005, 00:16

Bonsoir,

Merci Cyrano le problème venait effectivement de la.

Je pense tout de même ne pas être très bon dans le domaine des tableaux associatif.

je récupére l'ID_UTILISATEUR avec :
$_POST['pseudo']
ensuite je veux le/les ID_GROUPE de l'utilisateur en fonction du pseudo, donc par :
// Séléction du/des groupe(s) en fonction du pseudo 
$sql2 = "SELECT g3.ID_GROUPE
FROM gesten_utilisateur as g1, gesten_utilisateur_groupe2 as g2, gesten_utilisateur_groupe as g3
WHERE g1.PSEUDO ='".$pseudo."'
AND g1.ID_UTILISATEUR = g2.ID_UTILISATEUR
AND g2.ID_GROUPE = g3.ID_GROUPE";
$req2 = mysql_query($sql2) or die('Impossible de visualiser les groupes');

// Création de la boucle qui stoque le/les groupe(s) de l'utilisateur
        while($data2 = mysql_fetch_array($req2))
        {        
           $grp_utilisateur .= $data2['ID_GROUPE']." "; // Séparation par << espace >>
        }

// Supression du dernier espace de séparation
		$grp_utilisateur = substr($grp_utilisateur,0,strlen($grp_utilisateur)-1);
maintenant que j'ai la liste du/des groupe(s) de l'utilisateur sous la forme : 22 55 32, il faut que je récupere le/les droits coréspondant(s) donc en théorie je devrais faire ceci :

ici, $id_groupe = $grp_utilisateur

	$id_groupe = explode(" ", $id_groupe);

// Récupération du/des droit(s) en fonction du/des groupe(s) de l'utilisateur	
	$sql_g2 = "SELECT g3.DROIT_GROUPE
	FROM gesten_utilisateur_groupe as g1, gesten_utilisateur_groupe_droit as g2, gesten_utilisateur_droit as g3
	WHERE g1.ID_GROUPE ='".$id_groupe."'
	AND g1.ID_GROUPE = g2.ID_GROUPE
	AND g2.ID_DROIT = g3.ID_DROIT";
	$req_g2 = mysql_query($sql_g2) or die('Impossible de visualiser les droits');

// Création de la boucle qui stoque le/les droit(s) du groupe
		$droit_groupe="";
		while($data_g2 = mysql_fetch_array($req_g2))
        {        
			$droit_groupe .= $data_g2['DROIT_GROUPE'];
		}
forcément dans ma dernière requete il ne comprend pas le $id_groupe ou si il comprend mais le dernier de la liste.

Comment faire une boucle qui attriburais automatiquement une des valeur (ID_GROUPE) a une variable afin d'obtenir la liste complète du/des droit(s) en fonction du/des ID_GROUPE ?

J'ai essayé plusieurs choses et dans touts les sens et a mon avis je m'embrouille encor tout seul, c'est une habitude chez moi je cherche toujours le compliqué.

D'avance merci !

Mammouth du PHP | 19672 Messages

19 oct. 2005, 09:21

Attention, en faisant :
$id_groupe = explode(" ", $id_groupe); 
$id_groupe devient un tableau indexé : tu ne peux donc pas l'utiliser comme ça dans ta requête sans préciser l'index que tu veux afficher. Il faut donc procéder à un comptage et passer par une boucle: Ce qui pose problème si tu as 250 groupes parce que ça signifierait 250 requêtes, ce qui n'est pas particulièrement optimal.

Avant de m'avancer dns une solution, j'aimerais bien comprendre ce que tu veux au juste obtenir à partir de quoi exactement: illustre par un exemple ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 291 Messages

19 oct. 2005, 12:59

Bonjour,

En fait je fais un explode parcque je ne savais plus comment traiter la chaine retourné,

Alors en exemple avec le code précédent (pour rester dans ma logique)

L'utilisateur bunk fesant partie du groupe GRP_1 & GRP_2 ayant respectivement les droits suivants : lecture et ecriture & modification et ecriture

il se connecte avec son pseudo bunk si le mot de passe et le pseudo sont verifié je regarde a quel groupe il appartient, en fonction des groupes retenus je regarde quels droits sont appliqués.

En fonction des droits j'autorise ou non certaines chose (liens, images, requete, etc... c'est pour l'exemple)

Donc ce que je veux obtenir c'est la liste des droits (DROIT_GROUPE) que je stoquerais en variable de session, pour me permettre dans mes autres pages de faire des recherche de mot definit afin d'autoriser ou non.

Mon exemple est il assez complet ?

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 oct. 2005, 20:58

Salut, il est possible de passer par une requete pour récupèrer les droits, essai avec cette requete:
$sql2 = "SELECT g5.ID_DROIT
FROM 
gesten_utilisateur as g1, 
gesten_utilisateur_groupe2 as g2, 
gesten_utilisateur_groupe as g3,
gesten_utilisateur_groupe_droit as g4, 
gesten_utilisateur_droit as g5

WHERE g1.PSEUDO ='".$pseudo."'
AND g1.ID_UTILISATEUR = g2.ID_UTILISATEUR
AND g2.ID_GROUPE = g3.ID_GROUPE 
AND g3.ID_GROUPE = g4.ID_GROUPE
AND g4.ID_DROIT = g5.ID_DROIT";
j'ai regoupé ta 1er et 2eme requete

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 291 Messages

19 oct. 2005, 21:57

Bonsoir,

Il me manque certainnement beaucoup de connaissances dans le domaine mais avouez que c'est assez déconcertant :| de voir avec quel facilité (heuresement pour vous c'est peut être votre boulot) vous m'avez répondu !


J'avais essayé une requette dans le style mais rien a faire j'avais toujours des erreurs.

Maintenant ca fonctione, encore merci a vous !! \:D/

Je vais maintenant m'imposer d'autres exercises pour avancer !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

19 oct. 2005, 22:47

c'est assez déconcertant :| de voir avec quel facilité (heuresement pour vous c'est peut être votre boulot) vous m'avez répondu !
Non pas vraiment, mon boulot mais un bon passe temps en attendant le boulot :wink:
bonne continuation, à toi les requetes sur 15 lignes 8)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute