Table intermediaire et SQL

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Table intermediaire et SQL

par Truc » 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)

par bunk » 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 !

par Truc » 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

par bunk » 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 ?

par Cyrano » 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 ?

par bunk » 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 !

par Cyrano » 16 oct. 2005, 14:46

<?php
$groupe_utilisateur .= $data3['ID_GROUPE']."/";
?>
L'espace entre le "." et le "="

par bunk » 16 oct. 2005, 14:40

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

par Truc » 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']."/";
        }

par bunk » 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

par Truc » 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

par bunk » 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

par bunk » 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

par Truc » 15 oct. 2005, 02:18

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

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

par Xenon_54 » 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?