Page 1 sur 1
Systeme de droit
Posté : 02 févr. 2007, 14:01
par dunbar
Bonjour,
J'ai une table menbre avec un champ "droit" de 0 à 2
o -> pour tous
1 -> Admin
2 -> super admin
Dans ma session je récupère comme ceci
session_start();
if (!isset($_SESSION['login'])) {
if (!isset($_SESSION['name'])) {
header ('Location: ../../index.php');
exit();
}
}
if (!isset($_SESSION['droit'])) {
if (!isset($_SESSION['droit'])) {
header ('Location: index.htm');
exit();
}
}
Et dans mes pages comme ceci
if ($droit >=1); --> pour donné accée aux grade 0 et 1
Ceci ne fonctionne pas ?
if ($droit !=2); --> pour donné accée uniquement aux grade 2
Qui pourrais me dire ou je me plante ???
D'avance merci
Posté : 02 févr. 2007, 14:08
par Ryle
A mon avis, c'est dans l'interprétation de tes conditions que tu te trompes :
if ($droit >=1) --> vrai pour 1 et + (donc 1 et 2)
if ($droit !=2) --> vrai pour tout ce qui est différent de 2
Ce qui n'a pas grand chose à voir avec ce que tu sembles souhaiter
(ah pis, on va mettre ça sur le compte du copier/coller, il te manque une apostrophes ici $_SESSION['droit] et il ne faut pas mettre de point-virgule juste après un if(), sinon il ne sert à rien

Posté : 02 févr. 2007, 14:15
par dunbar
(ah pis, on va mettre ça sur le compte du copier/coller, il te manque une apostrophes ici $_SESSION['droit] et il ne faut pas mettre de point-virgule juste après un if(), sinon il ne sert à rien

Oui effectivement c'est la faute du copier coller
Quand à ùes condition :
Ci je souhaite donné accés à 0
if ($droit = 0 AND 1) --> ne devrais donné accée que aux droit 0 et 1 exact ????
Parce que ca ne fonctionne pas
Merci
Posté : 02 févr. 2007, 15:06
par Ryle
Presque...
if ($droit = 0 AND 1) --> affecte 0 à $droit (ce qui est vrai) ET 1 (qui est toujours vrai) sera donc toujours vrai
if ($droit == 0 || $droit == 1) // n'est vrai que si $droit est égal à 1 ou à 0
Posté : 02 févr. 2007, 15:12
par dunbar
(ah pis, on va mettre ça sur le compte du copier/coller, il te manque une apostrophes ici $_SESSION['droit] et il ne faut pas mettre de point-virgule juste après un if(), sinon il ne sert à rien

Oui effectivement c'est la faute du copier coller
Quand à ùes condition :
Ci je souhaite donné accés à 0
if ($droit = 0 AND 1) --> ne devrais donné accée que aux droit 0 et 1 exact ????
Parce que ca ne fonctionne pas
Merci
Mon soucis est que je ne récupére pas ma valeur de $droit
Parce que si je fait
echo "Ton droit est : ".$droit;
et je déclare ma variable dans index (fichier de connexion) comme ceci
$droit= $data['droit'];
J'ai rien
alors que si je fait
echo "Bonjour, ".$_SESSION['name'];
J'ai bien le nom

Posté : 02 févr. 2007, 17:17
par dunbar
(ah pis, on va mettre ça sur le compte du copier/coller, il te manque une apostrophes ici $_SESSION['droit] et il ne faut pas mettre de point-virgule juste après un if(), sinon il ne sert à rien

Oui effectivement c'est la faute du copier coller
Quand à ùes condition :
Ci je souhaite donné accés à 0
if ($droit = 0 AND 1) --> ne devrais donné accée que aux droit 0 et 1 exact ????
Parce que ca ne fonctionne pas
Merci
Mon soucis est que je ne récupére pas ma valeur de $droit
Parce que si je fait
echo "Ton droit est : ".$droit;
et je déclare ma variable dans index (fichier de connexion) comme ceci
$droit= $data['droit'];
J'ai rien
alors que si je fait
echo "Bonjour, ".$_SESSION['name'];
J'ai bien le nom

Donc ma question comment je fait pour pouvoir récupérée les données (droit) de la session en cours ?
Merci
Posté : 02 févr. 2007, 17:31
par Ryle
Tu n'es pas obligé de citer le texte à chaque fois, surtout lorsque tu réponds au message qui est juste au dessus
Quand tu fais $data['droit'], c'est quoi $data ? où se trouve la valeur des droits ? si c'est en session, il suffit de lire la session comme tu l'as défini ($_SESSION['droit'], si c'est en base il te faut l'interroger, etc.
Tu dis ne pas retrouvé la valeur de $droit, mais où t'attends tu à la retrouver ? comment l'y mets tu ?
Posté : 02 févr. 2007, 18:35
par dunbar
Je la place comme ceci :
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: ../../index.php');
exit();
}
//include "../../connect/fc-phpconnect_tvc.php";
include "../../Administrator/stat.php";
include "../../libs/dec_var.php";
echo "Bonjour, ".$_SESSION['name'];
echo "Ton grade ".$_SESSION['droit'];
if ($droit == 0 || $droit == 1);
Et ceci :
echo "Ton grade ".$_SESSION['droit'];
pour être certain que je l'apelle bien mais je ne reçois rien alors que je reçois bien de nom de la session en cours
"droit" correspond à un champ de la TABLE membre
Posté : 02 févr. 2007, 18:39
par Ryle
A aucun moment tu n'affecte $_SESSION['droit'] à $droit, ca me parait normal que celui-ci ne le contienne pas
As-tu vérifié le contenu de ta session en faisant un print_r($_SESSION) pour savoir ce qui était renseigné et avec quoi ?
Ps : Pas de point virgule après un if
if ($droit == 0 || $droit == 1);
Posté : 02 févr. 2007, 18:42
par dunbar
A aucun moment tu n'affecte $_SESSION['droit'] à $droit, ca me parait normal que celui-ci ne le contienne pas
As-tu vérifié le contenu de ta session en faisant un print_r($_SESSION) pour savoir ce qui était renseigné et avec quoi ?
Ps : Pas de point virgule après un if
if ($droit == 0 || $droit == 1);
Excuse moi ma $variable est déclarer dans le fichier dec_var.php.
$droit = $_SESSION['droit'];
Je trouvais plus propre d'avoir toutes mes $variable dans un seule fichier

Posté : 02 févr. 2007, 18:48
par Ryle
Je t'avais pas dit que tu n'étais pas obligé de toujours citer le texte ?
Et ton fichier dec_var.php il est bien inclu avant que tu ne faces appelle à $droit mais après que tu ais démarré la session avec session_start() ?

Posté : 02 févr. 2007, 19:24
par dunbar
Cela ne change rien je n'arrive pas à faire passer la $variable en $_SESSION
Voici mon fichier index.php (connexion)
Verais tu une erreur de ma part
<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion'){
if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
include "connect/fc-phpconnect_tvc.php";
// on teste si une entrée de la base contient ce couple login / pass
$sql = 'SELECT * FROM membre WHERE login="'.addslashes($_POST['login']).'" AND pass_md5="'.md5(addslashes($_POST['pass'])).'"';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
$name = $data['name'];
$url = $data['url'];
$droit = $data['droit'];
mysql_close();
// si on obtient une réponse, alors l'utilisateur est un membre
if (mysql_num_rows($req) == 1){
session_start();
$_SESSION['login'] = $_POST['login'];
$_SESSION['name'] = $_POST['name'];
//'url' = adresse du champ "nom" correspondant au login de session de la TABLE membre
header('Location:'.$url);
exit();
}
// si on ne trouve aucune réponse, le visiteur s'est trompé soit dans son login, soit dans son mot de passe
elseif ($data[0] == 0) {
$erreur = 'Compte non reconnu.';
}
// sinon, alors la, il y a un gros problème
else {
$erreur = 'Probléme dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
?>
D'avance merci
Posté : 02 févr. 2007, 22:21
par dunbar
Re,
Pour récupéré ma variable de session c'est quand même bien
$_SESSION['droit'];
droit est le nom du champ de ma table ou se trouve les droit de 0 à 3
Merci
Posté : 03 févr. 2007, 01:02
par Ryle
Je te vois bien mettre le login en session :
$_SESSION['login'] = $_POST['login'];
Je te vois bien mettre le nom en session :
$_SESSION['name'] = $_POST['name'];
Mais à aucun moment je ne te vois mettre quoi que ce soit d'autre qui pourrait s'apparenté de près ou de loin à $droit ou $data['droit'] en session.
En faisant le print_r($_SESSION) comme je te l'ai suggéré plus haut, tu aurais pu constaté par toi même que le tableau de session ne contenait que ces deux valeurs, et qu'il était fort probable que tu n'y retrouve pas tes droits, c'est sans doute que tu ne les y avais pas mis

Posté : 03 févr. 2007, 11:24
par dunbar
Effectivement mon erreur venait de là
ça fonctionne.
$_SESSION['login'] = $_POST['login'];
$_SESSION['name'] = $_POST['name'];
$_SESSION['droit'] = $_SESSION['droit'];
Alors me vient une autre question mais j'ouvre un autre poste.
Merci du coup de main