Table intermediaire et SQL

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

08 oct. 2005, 22:08

Code : Tout sélectionner

// Récupération de/des ID droit foreach($options as $droit) { $sql2 = "SELECT * FROM gesten_utilisateur_droit WHERE DROIT_GROUPE = '$droit'"; $req2 = mysql_query($sql2) or die('Impossible de visualiser les droits'); $data = mysql_fetch_array($req2); $id_test = $data['ID_DROIT']; }
en voyant ça je me dis qu'on est mal parti, en faite je viens de comprendre que tu veut récupèrer les id ... au lieu de mettre les droits, du style 'droit1;droit2,droit3', comme valeur des cases a cocher il aurrait peut etre été plus judicieux de passer directement les id... on va continuer sur la lancée.

Alors tu ne récupère que la dernière valeur normal tu écrase toujours l'ancienne valeur en faissant cça:
$id_test = $data['ID_DROIT'];
il faut crée un tableau contenant les id des différents droit.
$tab_id=array();
foreach($options as $droit)
		{
		$sql2 = "SELECT * FROM gesten_utilisateur_droit WHERE DROIT_GROUPE = '$droit'";
		$req2 = mysql_query($sql2) or die('Impossible de visualiser les droits'); 
		$data = mysql_fetch_array($req2);
		$tab_id[] = $data['ID_DROIT'];
		}
ainsi tu as dans $tab_id les id des droits séléctionné.

Ensuite on va essayer une requete dynamique:
//initialisation de la requete à insertion multiple
$sql3="INSERT INTO gesten_utilisateur_groupe_droit (ID_GROUPE, ID_DROIT) VALUES ";
//listage des droits a inserer avec le meme "id_groupe"
foreach($tab_id as $id)
{
    $sql3.=" (".$id_groupe.",".$id.") ,";
}

$sql3 = substr($sql3,0,strlen($sql3)-1);// a pour effet de supprimer la dernière virgule générée dans la boucle

// si tout se passe bien tu devrai avoir une requete du style
// INSERT INTO gesten_utilisateur_groupe_droit (ID_GROUPE, ID_DROIT) VALUES (id_groupe,id_1) , (id_groupe,id_2) 
mysql_query($sql3) or die('Impossible d\'inserer le couple id_groupr/id_droit');
parcontre la je suppose que tu connais " $id_groupe " et que pour chaque insertion ne change pas.

/!\ 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

10 oct. 2005, 18:42

Merci mille fois !

C'est exactement ce que je voulais obtenir comme résultat !
Je poursuis mes recherches pour avancer !

Merci

Eléphant du PHP | 291 Messages

11 oct. 2005, 20:16

Bonsoir,

Je sais que j'abuse, j'ai réussi a bien avancé grâce à vous et en faisant des modifications je me suis dit "Tien et pourquoi pas faire un formulaire de modification"

Donc me revoilà partit en croisade ! Me basant sur ce que j'avais déjà j'en reviens a mon problème de concordance de ID_GROUPE/ID_DROIT

Je sais que je dois les placer dans un tableau pour les traiter ensuite mais je ne parviens pas à faire ce tableau :

Voici un morceau de code :
<?php
// Récupération du groupe séléctionné
$chx_liste =  $_POST['listegroupe'];

		// Récupération de l'ID du groupe séléctionné
		$sql = "SELECT * FROM gesten_utilisateur_groupe WHERE NOM_GROUPE ='$chx_liste'";
		$req = mysql_query($sql) or die('Impossible de recuperer l\'ID du groupe'); 
		$nb = mysql_numrows($req);

		while ($val = mysql_fetch_array($req)){
		$id_groupe = $val ["ID_GROUPE"];
		
		}
echo $id_groupe;

		// Récupération des ID_DROIT en fonction de l'ID_Groupe séléctionné
		$sql1 = "SELECT * FROM gesten_utilisateur_groupe_droit WHERE ID_GROUPE ='$id_groupe'";
        $req1 = mysql_query($sql1) or die('Impossible de visualiser les droits');
		$nb1 = mysql_numrows($req1);

		while ($val = mysql_fetch_array($req1)){
		$id_droit = $val ["ID_DROIT"];
		}
echo $id_droit;

// Concordance des couples ID_GROUPE / ID_DROIT



		// Récupération des "nom" des DROIT
		$sql3 = "SELECT * FROM gesten_utilisateur_droit WHERE ID_DROIT ='$id_droit'";
        $req3 = mysql_query($sql3) or die('Impossible de visualiser les droits');
		$nb3 = mysql_numrows($req3);

		while ($val = mysql_fetch_array($req3)){
		$droit_groupe = $val ["DROIT_GROUPE"];
	?>
<form name="form" method="post" action="modification.php?groupe=mod2">
  <p>Nom : 
    <input name="nom_groupe" type="text" id="nom_groupe" value="<?php echo $chx_liste; ?>">
  </p>
  <p>Droits du groupe :</p>
  <p>
<?php
		
		// Affichage de la boucle pour les case a cocher
		echo $val['DROIT_GROUPE'] . "<input name=\"options[]\" type=\"checkbox\" checked=\"checked\" id=\"options[]\" value=".$data['DROIT_GROUPE']."><br>";
		}
?>
  </p>
  <p>
    <input name="bouton" type="submit" id="bouton" value="Modifier">
  </p>
</form>
En fait pour le moment je ne récupère que la dernière valeur correspondante ce qui est normal, grâce a ce tableau intermédiaire j'aurais toutes les informations (normalement) sauf elle qui ne sont pas coché (donc pas dans la table) mais je devrais pouvoir les afficher ensuite pour a l'action du bouton "Modifier" je fasse un Update et que cela modifie les droit du groupe en fonction des informations remplis dans mon formulaire.

Merci de votre aide

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

11 oct. 2005, 22:01

j'ai pas trop compris comment tu veut t'y prendre pour la modification mais essai deja ça:
$sql = "SELECT g3.DROIT_GROUPE 
FROM gesten_utilisateur_groupe as g1, gesten_utilisateur_groupe_droit as g2, gesten_utilisateur_droit as g3
WHERE g1.NOM_GROUPE ='".$chx_liste."' 
AND g1.ID_GROUPE = g2.ID_GROUPE
AND g2.ID_DROIT = g3.ID_DROIT");
      
$req = mysql_query($sql) or die('Impossible de visualiser les droits');       

while ($val = mysql_fetch_array($req))
{     
	echo $val["DROIT_GROUPE"];
}
remplace tout ton code par ceci et normalement tu devrai voir tous les droits associés au nom du groupe.

Ensuite rexplique le fonctionnement des droits (comment tu les saisie, leur valeur) pour que d'autres qui n'ont pas tout suivi puisse aider
:wink:

/!\ 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

13 oct. 2005, 19:24

Bonsoir,

Merci pour le code, je l'ai un peu adapté par rapport au changement que j'avais fait entre temps et ca fonctionne comme je pensé, c'est à dire que ca afficher que les case coché (normal).

Pour le fonctionnement hé bien, selon le MPD (voir premier post) la liste des droit (gesten_utilisateur_droit) est prédéfinie a l'avance et il n'est pas possible d'en rajouter, ensuite on peux attribuer un ou plusieurs droit a un groupe, ajouter via un formulaire. On peux ainsi créer et associer a un groupe un utilisateurs qui aura les droit du groupe.

Tout ca afin d'utiliser les sessions pour afficher ou non certaine parti (menu, lien, page) en fonction des droits.

Voila je poursuis mes recherches

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 19:37

ce que tu peut faire est de re-proposer tous les droits (comme lors de la 1ere saisie) avec les cases, correspondant aux droits du groupe, deja cochées.
Car modification => suppression ou ajout de droits...

voila une piste, si tu as besoin d'aide pour ce faire, tu sait ou trouver de l'aide :wink:

/!\ 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

13 oct. 2005, 19:52

C'est ce que j'etais en train de me dire.

En fait je vais plutot mettre ca :
<?php
		// Séléction des droits
		$sql1 = "SELECT * FROM gesten_utilisateur_droit ORDER BY ID_DROIT DESC";
		$req = mysql_query($sql1) or die('Impossible de visualiser les droits'); 

		// Création de la boucle pour les case a cocher
		while($data = mysql_fetch_array($req)) 
			{
		
		echo $data['DROIT_GROUPE'] . "<input name=\"options[]\" type=\"checkbox\" id=\"options[]\" value=".$data['DROIT_GROUPE']."><br>";
		}
?>
ce qui va me mettre tout les droits avec une case a cocher a chaque fois, et il faudrait que je mette une condition pour changer l'etat de la case a cocher avec une condition.

Mais peut on mettre une condition dans une boucle ?

Eléphant du PHP | 291 Messages

13 oct. 2005, 21:09

Bon ben ma page de modification fonctionne corectement, il ne me manque plus qu'a cocher les case automatiquement si le/les "droit(s)" est present dans la table intermediaire.

Merci Truc

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

13 oct. 2005, 21:33

biensur que tu peut mettre des tests dans une boucle... tu peut faire un mélange de la requete d'affichage des droits d'un certain groupe donné et la requete qui affiche tous les droits.
<?
// Séléction des droits
$sql1 = "SELECT * FROM gesten_utilisateur_droit ORDER BY ID_DROIT DESC";
$req = mysql_query($sql1) or die('Impossible de visualiser les droits');

//séléction des droits pour un groupe donné
$sql2 = "SELECT g3.DROIT_GROUPE
FROM gesten_utilisateur_groupe as g1, gesten_utilisateur_groupe_droit as g2, gesten_utilisateur_droit as g3
WHERE g1.NOM_GROUPE ='".$chx_liste."'
AND g1.ID_GROUPE = g2.ID_GROUPE
AND g2.ID_DROIT = g3.ID_DROIT");
      
$req2 = mysql_query($sql2) or die('Impossible de visualiser les droits');
$droit_group=array(); //tableau pour récupèrer les droits du groupe
while($data2 = mysql_fetch_array($req2))
{
	$droit_group[]=$data2["DROIT_GROUPE"];
}

// Création de la boucle pour les case a cocher
while($data = mysql_fetch_array($req))
{    	
    $droit=$data['DROIT_GROUPE'];
	
	$coche= (in_array($droit,$droit_group)) ? "checked" : "";// si le groupe a ce droit alors cocher la case sinon rien
	 	
    echo $data['DROIT_GROUPE'] . "<input name=\"options[]\" type=\"checkbox\" id=\"options[]\" ".$coche." value=".$data['DROIT_GROUPE']."><br>";
}
?>
j'ai pas testé le tout mais dans l'idée c'est ça :wink:

/!\ 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

15 oct. 2005, 01:42

Bonsoir,


Merci TRUC tu m'a bien dépatouillé!

Je pense que maintenant vous avez plus ou moins compris ce que je voulais faire, je me pose tout de même une question, j'en suis arrivé au point des sessions et la une grande question (que j'aurais pu me poser avant je vous l'accorde) qui est, mes droits je les cherges comment dans mes sessions ? Je fais un tableau ou je stoque les ID de mes droits puis avec une fonction pleine de conditions j'autorise ou non selon l'appartenance de l'utilisateur a un groupe ou bien je stocke mes droits et pareil avec une fonction je gère les autorisations ?

C'est plutôt pour un avis car je me suis un peu embrouillé avec moi même a ce sujet !

D'avance merci

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 02:11

eh, bien tu peut mettre les id des droits de l'utilisateur dans une variable de session et comparer, a chaque fois que tu veut rendre une partie accessible en fonction des droits, avec le contenu en session.

par exemple
if($_SESSION['droit']==1)
 // reservé admin
elseif ($_SESSION['droit']==2)
 //membre
else
 //publique
Modifié en dernier par Truc le 15 oct. 2005, 02:17, modifié 1 fois.

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

Mammouth du PHP | 1885 Messages

15 oct. 2005, 02:13

eh, bien tu peut mettre les id des droits de l'utilisateur dans une variable de session et comparer, a chaque fois que tu veut rendre une partie accessible en fonction des droits, avec le contenu en session.

par exemple
if($_SESSION['droit']=1)
 // reservé admin
elseif ($_SESSION['droit']=2)
 //membre
else
 //publique
if($_SESSION['droit']==1)
 // reservé admin
elseif ($_SESSION['droit']==2)
 //membre
else
 //publique
Avec == n'est-ce pas?
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

15 oct. 2005, 02:18

Avec == n'est-ce pas?
bien sur que oui :oops: :wink:

autant pour moi, vitesse et précipitation ... :x

/!\ 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

15 oct. 2005, 12:33

Bonjour,

ca risque d'être compliqué, si j'ai une 20ene de droit ca va faire beaucoup de trafic je pense ?

Je vais y rflaichir aujourd'hui car j'aimerais avancer la suite mais la question est plutot vague !

Merci a vous

Eléphant du PHP | 291 Messages

15 oct. 2005, 19:18

Re bonjour,

J'y ai reflaichis tout le journée, je suis tellement sur de mon coup dans access que j'ai vou essayé est ca a fonctionné jusqu'a maintenant ou par la force d'un reboot mystère j'ai tout perdu (y compris le debut de mon dev php) j'avais une petite sauvegarde, ca m'a permis de modifier quelques lignes.

Bref, voila comment je compte proceder, si vous pouviez me donner votre avis :

La base

* un droit lecture
* un droit ecriture

assigné au groupe TEST_1

dans ce groupe l'utilisateur Bunk

La session

Bunk ouvre sa session, je verifie a quelle groupe il appartient dans ma page login.php (celle qui valide ou non le mot de passe), si tout est bon je le redirige vers la page index2.php

Dans la page index2.php je commence par mettre un cadre avec logo etc...
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.


Mon résonnement sembli t'il corecte ?

D'avance merci