Page 1 sur 1

probleme d'attribution de droit

Posté : 09 oct. 2006, 11:08
par cendrine87
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.

Posté : 09 oct. 2006, 11:18
par zeus
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" ;)

Posté : 09 oct. 2006, 11:31
par cendrine87
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!!!!

Posté : 09 oct. 2006, 11:32
par zeus
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 ?

Posté : 09 oct. 2006, 11:39
par cendrine87
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

Posté : 09 oct. 2006, 11:45
par zeus
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 ?

Posté : 09 oct. 2006, 11:48
par cendrine87
ok merci j'ai compris. ça peut servir pour une prochaine fois.