probleme d'attribution de droit

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 : probleme d'attribution de droit

par cendrine87 » 09 oct. 2006, 11:48

ok merci j'ai compris. ça peut servir pour une prochaine fois.

par zeus » 09 oct. 2006, 11:45

en fait, il aurait fallut faire une concaténation et ensuite faire le switch sur ta concaténation et un case sur chaque cas (111, 110, 101, ...)

exemple de code valide
$test = $data['lecture'].$data['ecriture'].$data['suppression']
switch($test)
            { 
            case 111:
                $droit = '111'; 
                break; 
            case 110: 
                $droit = '110'; 
                break; 
            case 100: 
                $droit = '100'; 
                break; 
            case 000: 
                $droit = '000'; 
                break; 
            } 
si on traduit ta manière d'écrire le switch avec des if (comme mon 1er exemple), on aurait eu ça :
if (($data['lecture'] && $data['ecriture'] && $data['suppression']) == (($data['lecture']=='1') && ($data['ecriture']=='1') && ($data['suppression']=='1'))
{
  $droit = '111'; 
}
elseif ( ($data['lecture'] && $data['ecriture'] && $data['suppression']) ==     (($data['lecture']=='1') && ($data['ecriture']=='1') && ($data['suppression']=='0'))
{
  $droit = '110'; 
}...
Est-ce que tu comprends ton erreur maintenant ?

par cendrine87 » 09 oct. 2006, 11:39

non franchement je ne voie pas se qui peut gener.
C'est qu'il n'accepte pas plusieurs choix ? Il faudrait que je fasse un switch pour lecture, un pour ecriture, un pour suppression ?

encore merci

par zeus » 09 oct. 2006, 11:32

Pourquoi faire simple quand on peut faire compliquer, c'est ma devise!!!!
Bienvenue dans le monde fabuleux du développement :langue:

Sinon, est-ce que tu as compris ton erreurs sur les switch/case ?

par cendrine87 » 09 oct. 2006, 11:31

merci beaucoup, je n'y avait pas penser, j'aime bien me compliquer la vie!!!!! :D , c'est clair que c'est beaucoup plus simple.
Sinon je sais que c'est exécution mais moi par rapport a se que je veux faire, c'est suppression qu'il me faut. Merci beaucoup.

Pourquoi faire simple quand on peut faire compliquer, c'est ma devise!!!!

par zeus » 09 oct. 2006, 11:18

Le soucis vient, à mon avis, du fait que tu n'as pas compris comment fonctionne un switch/case

il ne s'agit en aucun cas d'un if/elseif

quand j'écrit ça :
switch ($toto)
{
  case 1:
    //du code...
    break:
  case 2:
    //encore du code ....
    break;
}
L'écriture équivalente serait
if ($toto == 1)
{
  //du code
}
elseif($toto == 2)
{
  //encore du code
}
le switch/case compare la valeur donnée dans le switch à la valeur donnée a chaque case. Toi, tu essaye de faire des tests dans chaque case.

Sinon, pour simplifier enormément ton problème, comme chaque type de droit contient 0 ou 1, il suffit de les concatener pour obtenir le chmod ;)
$droit = $data['lecture'].$data['ecriture']$data['suppression'];
Si lecture = 0, ecriture = 1 et suppression = 1, droit = 011 ;)

PS : au fait, le dernier droit, c'est "exécution", pas "suppression" ;)

probleme d'attribution de droit

par cendrine87 » 09 oct. 2006, 11:08

Bonjour,

Voila, j'essais de gérer les droit des utilisateurs.
Voici un extrait de la fenetre :
if ($_SESSION['login'])
{
	$sql = "SELECT lecture, ecriture, suppression
	FROM fichiers, accedepers, personnel
	WHERE fichiers.num_fic=accedepers.num_fic
	AND accedepers.num_pers=personnel.num_pers
	AND login= '".addslashes($_SESSION['login'])."'
	AND nom_fic='".addslashes($_SERVER['PHP_SELF'])."'";
	$req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
	if (mysql_num_rows($req) > 0)
		{
		$data = mysql_fetch_assoc($req);
			switch($data['lecture'] && $data['ecriture'] && $data['suppression'])
			{ 
			case (($data['lecture']=='1') && ($data['ecriture']=='1') && ($data['suppression']=='1')):
				$droit = '111'; 
				break; 
			case (($data['lecture']=='1') && ($data['ecriture']=='1') && ($data['suppression']=='0')): 
				$droit = '110'; 
				break; 
			case (($data['lecture']=='1') && ($data['ecriture']=='0') && ($data['suppression']=='0')): 
				$droit = '100'; 
				break; 
			case (($data['lecture']=='0') && ($data['ecriture']=='0') && ($data['suppression']=='0')): 
				$droit = '000'; 
				break; 
			} 

quand je fait un
echo $droit; 
cela me donne 111.
quand je fait un
echo de $data['lecture'].' '.$data['ecriture'].' '.$data['suppression'];
j'ai 110.
110 est la vrai valeur. Alors pourquoi cela m'affiche 111. Ou es-ce que ce situe mon erreur, j'ai essayer de changer l'ordre des case et le echo $droit change tout le temps, et ne me donne jamais la vrai valeur.

Es-ce que vous auriez une idée ? merci d'avance.