Problème de récupération d'une varaible en ph

Fermé
alexbigfoug - 23 avril 2009 à 21:50
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 - 25 avril 2009 à 16:09
Bonjour,


J'ai un petit soucis que je n'arrive pas à résoudre...

Voilà mon code

1 <?
2 mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
3 mysql_select_db("site web") OR die('Erreur de sélection de la base');
4
5 $sql = 'SELECT catégorie FROM membre WHERE catégorie="administrateur"';
6 $donnees = mysql_fetch_array($sql)
7
8
9 If (empty($_SESSION['login'])) and (($donnees['catégorie']) != "administrateur"))
10 {
11 echo '<a href="connexion_interdite.php">'; echo '</a>';
12 }
13 Endif
14 ?>

Mon problème est à la ligne 9 (sans doute...), je n'arrives pas à empêcher l'ouverture de la page aux utilisateurs (inscrit).
Je voudrais que cette page soit réservé uniquement aux admins.

Avec mon code, les sessions fonctionnent, c'est à dire que si un utilisateur (non inscrit) essaie d'ouvrir la page il ne pourras pas.


Mais comment, réservé la page uniquement aux admins.


Info: Dans ma requête sql on peux voir catégorie = administrateur, il y a deux sortes de catégories
- utilisateur
- administrateur

voilà j'espere que vous avez compris mes explications...et que vous allez pouvoir me donner un coup de pouce^^

Bonne soirée
A voir également:

15 réponses

Voilà le code au final

Merci de votre aide à tous et particulièrement borracho^^

Voici la solution final


<?php
session_start();

mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
mysql_select_db("site web") OR die('Erreur de sélection de la base');

$sql = mysql_query("
SELECT login, categorie FROM membre WHERE login = '".mysql_real_escape_string($_SESSION['login'])."'
");
$tab = mysql_fetch_array($sql);

if(isset($_SESSION['login']) && $tab['categorie'] == "administrateur")
{

}
else
{
header('location: connexion_interdite.php');
}
?>
1
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
25 avril 2009 à 13:49
Y'a toujours un problème de logique dans ton code.

Tu fais ta requête avec $_SESSION['login'], et après tu vérifies que cette variable existe...
1
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
23 avril 2009 à 21:58
L'algo serait un truc du genre :
if !admin then
  afficher "Interdit"
else
  afficher page
fi

Toi tu fais (à ce qu'il me semble puisque je n'ai pas la suite du code) :
if !admin then
  afficher "Interdit"
fi
afficher page

Et puis il faudrait mettre du contenu entre tes balises <a> et </a> sinon difficile de cliquer sur le lien ;-p
0
Mais !admin correspondrait à quoi?
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
23 avril 2009 à 22:31
C'est pour tester que ce n'est pas un administrateur.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cela ne fait pas longtemps que je pratique le php, et je n'es jamais utlisé le !mot, c'est une sorte de variable?
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
23 avril 2009 à 23:27
C'était un pseudo-langage, pas du PHP à proprement parler, mais en PHP comme dans la plupart des langages, le ! signifie la négation !vrai=faux par exemple.

En gros if ( !$admin ) équivaut à if ( $admin == false ) (tout comme if ( $admin ) équivaut à if ( $admin == true ) ) où admin serait une variable qui contient vrai si l'utilisateur est un administrateur, faux sinon.
0
OK^^

Bon j'ai retesté un truc mais bon c'est toujours pareil...

0 <?
1 mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
2 mysql_select_db("site web") OR die('Erreur de sélection de la base');
3
4 $_SESSION = $login
5
6 $sql = 'SELECT catégorie FROM membre WHERE login=$login';
7 $donnees = mysql_fetch_array($sql)
8
9
10 If (empty($_SESSION['login'])) and $donnees != administrateur
11 {
12 echo '<a href="connexion_interdite.php">'; echo 'impossible d\'établir la connection'; echo '</a>';
13 }
14 Endif
15?>


A mon avis ce que j'ai fait ligne 4 ne dois pas fonctionné...
Et du coup ce que j'ai fait dans la requete (login=$login') ne dois pas fonctionner...

Pourtant je n'es toujours pas d'erreur

Tu vois ce que j'ai voulus faire???

Je veux savoir le login de la personne qui est sur la session à l'arrivée sur la page, je la mets sous forme de variable

Puis je le cherche la ligne qui correspond au login , et sur cette ligne je regarde la catégorie, et si celle ci est differente de administrateur la page ne se s'ouvre pas...


Je te remercie déjà d'avoir consacré un peu de temps à m'écouter, c'est gentil^^
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
24 avril 2009 à 22:18
Il faudrait plutôt faire
$_SESSION['login'] = $login
(pas trop sûr de la syntaxe mais l'idée est là)

Ensuite $donnees est un tableau donc faire $donnees != 'administrateur' n'a pas de sens, il faudrait faire le test suivant
$donnees['role'] != 'administrateur'
ou tu remplaces role par le nom du champ qui contient le rôle de l'utilisateur dans ta base de données.
0
login08 Messages postés 32 Date d'inscription vendredi 24 avril 2009 Statut Membre Dernière intervention 5 juin 2009 3
24 avril 2009 à 11:11
Bonjour,

Quelque problèmes dans ton code.

Déjà pour pouvoir utiliser les SESSIONS, il te faut un session_start() au debut de ton code.
De plus en ce qui concerne ta variable SESSION, si j'ai bien compris tu veux mettre le login dans la variable donc
$_SESSION['login'] = $login;

Et pour ce morceau de code :
If (empty($_SESSION['login'])) and (($donnees['catégorie']) != "administrateur")) 


Il y a juste un problème de parenthèse

if ( empty($_SESSION['login']) && ($donnees['catégorie']) != "administrateur") )


Il doit surement y avoir encore des erreurs.
J'essaye quand j'ai le temps de réécrire ton morceau de code.
0
login08 Messages postés 32 Date d'inscription vendredi 24 avril 2009 Statut Membre Dernière intervention 5 juin 2009 3
24 avril 2009 à 11:15
Plutôt un truc du genre :

<?php
session_start();
mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
mysql_select_db("site web") OR die('Erreur de sélection de la base');

$_SESSION['login']=$login;

$sql = "SELECT catégorie FROM membre WHERE catégorie='administrateur'";
$donnees = mysql_fetch_array($sql)

If (empty($_SESSION['login']) && ($donnees['catégorie'] != "administrateur"))
{
	echo "<a href='connexion_interdite.php'></a>";
}
else
{
	echo "OK !";
}
?> 
0
Le session start était déjà en haut de ma page^^

(avec le code ci-dessous il me met une erreur à cette ligne:
If (empty($_SESSION['login']) && ($donnees['catégorie'] != "administrateur"))

Je vais vous montrer tous le code entier, mais ce ne seras pas utile,enfin...


<?php
session_start();
if (!isset($_SESSION['login'])) {
header ('Location: index.php');
exit();
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Stric//EN"
"http://www.w3.org/TR/xhtml1-transtional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">

<head>
<title>administration</title>
<!-- Table de caractères -->
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
<link rel="stylesheet" media="screen" type="text/css" title="Mon design" href="design.css" />
</head>

<body style="background-image:url('images/fond_admin.jpg');">

<h4 style="text-align:center; font-weight:bolder;">Panneau d'administration</h4> <br /> <br />

<h2 style="text-decoration: underline;">Administration des news</h2> <br />
<a href="liste_news.php" style="color:red;"> Modifier et supprimer des news</a> <br />
<a href="rediger_news.php" style="color:red;"> Ajouter des news</a> <br /> <br />

<h2 style="text-decoration: underline;">Administration des membres</h2> <br />
<a href="index.php" style="color:red;">lien mort</a> <br />
<a href="index.php" style="color:red;">lien mort (Bannir membres)</a> <br /> <br />

<h2 style="text-decoration: underline;">Administration des produits</h2> <br />
<a href="liste_boitiers.php" style="color:red;">modifier un produit à la page boîtiers</a> <br />
<a href="ajouter_boitiers.php" style="color:red;">ajouter un produit à la page boîtiers</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page carte mère)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page carte mère)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page processeurs)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page processeurs)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page barrettes mémoire)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page barrettes mémoire)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page carte graphique)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page carte graphique)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page disque dur)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page disque dur)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page alimentation)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page alimentation)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page lecteur DVD/CD)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page lecteur DVD/CD)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page écrans)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page écrans)</a> <br /><br />

<a href="index.php" style="color:red;">lien mort: modifier (page accessoires)</a> <br />
<a href="index.php" style="color:red;">lien mort: ajouter (page accessoires)</a> <br /><br />

<h2 style="text-decoration: underline;">Vos messages</h2> <br />
<a href="index.php" style="color:red;">lien mort (lire message)</a> <br /> <br />


<a href="index.php"> Retourner à la page d'acceuil</a>

</body>

</html>

<?php
mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
mysql_select_db("site web") OR die('Erreur de sélection de la base');

$_SESSION['login']=$login;

$sql = "SELECT catégorie FROM membre WHERE catégorie='administrateur'";
$donnees = mysql_fetch_array($sql)

If (empty($_SESSION['login']) && ($donnees['catégorie'] != "administrateur"))
{
echo "<a href='connexion_interdite.php'></a>";
}
else
{
echo "OK !";
}
?>
0
P@t@ch0n Messages postés 565 Date d'inscription mercredi 15 avril 2009 Statut Membre Dernière intervention 28 décembre 2009 85
24 avril 2009 à 22:34
$sql = 'SELECT catégorie FROM membre WHERE catégorie="administrateur"';
$donnees = mysql_fetch_array($sql) 
Tu sélectionnes la catégorie où la catégorie vaut administrateur.
Ça sert à quoi ?
C'est comme si on disait prends le pull rouge dans l'armoire seulement si c'est un pull rouge.

If (empty($_SESSION['login']) && $donnees['catégorie'] != "administrateur") ) 
Si $_SESSION['login'] vide ou inexistante ET $donnees['catégorie'] DIFFÉRENT DE "administrateur"

Ça veut rien dire ça.

Je te conseille de suivre un tuto sur les sessions, sur la conception d'un espace d'administration, et sur la logique d'un script.
0
pyschopathe Messages postés 1974 Date d'inscription dimanche 2 mars 2008 Statut Membre Dernière intervention 22 mars 2010 135
24 avril 2009 à 22:44
Erf ! J'avais même pas fait gaffe à la requête, effectivement c'est du lourd !
J'imagine qu'il voulait faire un WHERE login=$login...
0
lewis34 Messages postés 2557 Date d'inscription samedi 21 juillet 2007 Statut Membre Dernière intervention 30 mai 2015 352
24 avril 2009 à 22:45
bonsoir rapidement voila une piste

$sql = "SELECT categorie FROM membre WHERE categorie=$_POST[tonchamp_categorie]"; //evite d'utiliser les accents

$donnees = mysql_fetch_array($sql); 
//tu retourne un tableau
$total=count($donnees); // nbr d'enregistrement dans ton tableau
for($i=0;$i<$total;$i++)
{
  if($donnees[$i]=="administrateur" )
   {
      header('location:tapage_admin');// tu peutaussi rediriger en javascript avec window.location.replace
   }
}
?>


c'est un p'tit code rapide qui parcours ton tableau $donné et si il trouve une valeur administrateur tu est redirigé vers la page de l'admin

mais ton script est effectivement pas logique
0
"Tu sélectionnes la catégorie où la catégorie vaut administrateur.
Ça sert à quoi ?
C'est comme si on disait prends le pull rouge dans l'armoire seulement si c'est un pull rouge. "

Je ne veux que les catégories qui ont pour valeur administrateur
J'ai des pulls rouge gris blanc noir mais je ne veux que les rouges.


"Si $_SESSION['login'] vide ou inexistante ET $donnees['catégorie'] DIFFÉRENT DE "administrateur" "

Session vide ou inexistante cela veux dire que l'utilisateur n'est pas inscrit sur le forum et donc qu'il n'a pas de session, c'est pourquoi elle est vide.

Pour le ET != admin c'est parceque l'utilisateur peux avoir une session mais sans la catégorie administrateur, c'est pour ça que je dois mettre les 2 conditions.

C'est pas de logique que je manque, c'est plutot un manque de rigueur et de connaissance...

En ce qui concerne la piste que tu m'as donné lewis34 voilà ce que j'ai fait... mais toujours le meme problème tous les utilisateurs avec une session n'ayant pas la catégorie administrateur on quand même accès à la page...

<?php
session_start();

mysql_connect("localhost", "root", "") OR die('Erreur de connexion');
mysql_select_db("site web") OR die('Erreur de sélection de la base');

$sql = "SELECT categorie FROM membre WHERE categorie=$_POST[categorie]";

$donnees = mysql_fetch_array($sql);
//tu retourne un tableau
$total=count($donnees); // nbr d'enregistrement dans ton tableau
for($i=0;$i<$total;$i++)
{
if($donnees[$i]=="administrateur" )
{
header('location:page_administration');// tu peutaussi rediriger en javascript avec window.location.replace
}
}


if (!isset($_SESSION['login']))
{
header ('Location: index.php');
exit();
}

?>
0
Bonsoir,

Je te suggère de passer par un systeme de droits utilisateurs via la base de données, rajoute un champs mysql que tu nomerais [ droit ] ou y serai assigné un lettre comme "a" = admin / u = "user"

ainsi tu pourrais faire un truc comme:

$sql = mysql_query("
SELECT login, droit
FROM membre
WHERE user = '".mysql_real_escape_string($_SESSION['login'])."'
");
$tab = mysql_fetch_array($sql);

if(isset($_SESSION['login']) && $tab['droit'] == "a")
header('location: page_admin.php');
else header('location: denied.html');

le champs "u" n'est pas utile ici, mais ce systeme s'avere bien pratique dans d'autres situations ;-)

et sur les pages (si plusieurs) admin, tu peux continuer en faisant un include('check_user.php'); voir si l'utilisateur est bien admin.

Bon je n'ai pas testé du tout, c'est vite fait mais c'est avant tout pour t'aiguiller et surtout pas te macher le travail :-)
0
Double post désolé, je dois réctifier une grossiere erreur dans la requete ^^

$sql = mysql_query("
SELECT login, droit
FROM membre
WHERE user = '".mysql_real_escape_string($_SESSION['login'])."'
"); 


Donne:

$sql = mysql_query("
SELECT login, droit
FROM membre
WHERE login = '".mysql_real_escape_string($_SESSION['login'])."'
"); 
0
Oui, mais je n'est pas le choix, il faut quand que je vérifie si la session existe...



(J'ai essayé sans vérifier mais le code ne fonctionne pas)
0
mype Messages postés 2435 Date d'inscription jeudi 1 novembre 2007 Statut Membre Dernière intervention 16 août 2010 436
25 avril 2009 à 16:09
dans ce cas tu peux faire ta verification avant ta requete ça serait plus logique...
0