Oui c'est pour ça que j'essaye de cogiter sur le problème car j'essaye
d'adapter le script à mes besoins lol
Forum
Accueil du forum » PHP » PHP débutant
Envoyer par courrier électronique le sujet
Aperçu avant impression
Notifications
Problème session, admin/membre
Résolu ?
13 messages • Page 1 sur 1
Outils Du Sujet
flolegueu
Bonjour, je continu toujours mon espace membre et j'ai ce problème qui se présente.
En tant qu'admin, je me connecte et j'arrive sur ma page admin/index.php
en tant que membre, je me connecte et j'arrive sur membre/index.php mais si depuis ma session membre, je veux accéder à l'espace admin il n'y à pas de problème, je peux le faire alors que je devrais directement être reconduit sur mon espace membre.
Pour info dans ma table j'ai un champ level en int qui est par défaut null, donc 1 = Admin.
Merci de votre aide .
Voici les codes
login.php
<?php
/* Indique le bon format des entêtes (par défaut apache risque de les envoyer au standard ISO-8859-1)*/
header('Content-type: text/html; charset=UTF-8');
/* Initialisation de la variable du message de réponse*/
$message = null;
/* Récupération des variables issues du formulaire par la méthode post*/
$mail = filter_input(INPUT_POST, 'mail');
$mdp = filter_input(INPUT_POST, 'mdp');
/* Si le formulaire est envoyé*/
if (isset($mail,$mdp))
{
/* Teste que les valeurs ne sont pas vides ou composées uniquement d'espaces */
$mail = trim($mail) != '' ? $mail : null;
$mdp = trim($mdp) != '' ? $mdp : null;
/* Si $mail et $pass différents de null */
if(isset($mail,$mdp))
{
/* Connexion au serveur : dans cet exemple, en local sur le serveur d'évaluation
A MODIFIER avec vos valeurs */
$hostname = "localhost";
$database = "prendrerdv";
$username = "root";
$password = "";
/* Configuration des options de connexion */
/* Désactive l'éumlateur de requêtes préparées (hautement recommandé) */
$pdo_options[PDO::ATTR_EMULATE_PREPARES] = false;
/* Active le mode exception */
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
/* Indique le charset */
$pdo_options[PDO::MYSQL_ATTR_INIT_COMMAND] = "SET NAMES utf8";
/* Connexion */
try
{
$connect = new PDO('mysql:host='.$hostname.';dbname='.$database, $username, $password, $pdo_options);
}
catch (PDOException $e)
{
exit('problème de connexion à la base');
}
/* Requête pour récupérer les enregistrements répondant à la clause : champ du mail et champ du mdp de la table = mail et mdp posté dans le formulaire */
$requete = "SELECT * FROM clients WHERE mail = :mail AND mdp = :mdp AND level = :level";
try
{
/* Préparation de la requête*/
$req_prep = $connect->prepare($requete);
/* Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau*/
$req_prep->execute(array(':mail'=>$mail,':mdp'=>$mdp, ':level'=>1));
/* Création du tableau du résultat avec fetchAll qui récupère tout le tableau en une seule fois*/
$resultat = $req_prep->fetchColumn();
$nb_result = count($resultat);
if ($nb_result == 1)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le mail dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $mail;
$_SESSION['level'] = $resultat;
$message = 'Bonjour '.htmlspecialchars($_SESSION['login']).', vous êtes connecté';
if($resultat ==1) {
header('Location: admin/index.php');
}else {
header('Location: membre/index.php');
}
}
else if ($nb_result > 1)
{
/* Par sécurité si plusieurs réponses de la requête mais si la table est bien construite on ne devrait jamais rentrer dans cette condition */
$message = 'Problème de d\'unicité dans la table';
}
else
{ /* Le mail ou le mot de passe sont incorrect */
$message = 'Le mail ou le mot de passe sont incorrect';
}
}
catch (PDOException $e)
{
$message = 'Problème dans la requête de sélection';
}
}
else
{/*au moins un des deux champs "mail" ou "mot de passe" n'a pas été rempli*/
$message = 'Les champs mail et Mot de passe doivent être remplis.';
}
}
?>
admin/index.php
<?php
session_start();
if (!isset($_SESSION['login'])) {
header('Location: ../login.php');
if(!empty($_SESSION['level'])) {
if ($level ==1) {
header('Location: admin/index.php');
}
else {
header('Location: membre/index.php');
}
}
exit;
} else {
$bdd = new PDO('mysql:host=localhost;dbname=prendrerdv;charset=utf8', 'root', '');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $bdd->prepare('SELECT * FROM clients WHERE mail = :mail');
$stmt->bindParam('mail', $_SESSION['mail'], PDO::PARAM_INT);
$stmt->execute();
$user = $stmt->fetch();
echo'Bonjour '.htmlspecialchars($_SESSION['login']).', vous êtes connecté';
}
?>
Bernard_2102
Bonjour,
tu as vérifié la valeur de $level avec un echo
flolegueu
Bonsoir et merci de ta réponse, je n'ai rien qui apparait avec echo, et si au lieu de level, je remplaçais pour me faciliter la vie par mon adresse mail, si $mail=monadresse mail, alors je peux accéder à l'espace admin sinon espace membre.
C'est possible à faire, j'ai déjà fais des tests mais rien de concluant... si quelqu'un peut m'aider ce serait cool

Bernard_2102
essayes:
echo"<pre>";
print_r($level) ;
echo"</pre>";
pour voir si la variable correspond à un tableau.
flolegueu
Bon alors je me suis servis de ce code, qui était déjà présent. Si je me connecte avec ma session admin, la phrase affiche, Bonjour 1 ,vous êtes connecté, sur la page admin, si je me connecte avec la session membre, la phrase affiche Bonjour , vous êtes connecté
echo'Bonjour '.htmlspecialchars($_SESSION['level']).', vous êtes connecté';
une idée ?
Bernard_2102
dans admin/index.php
exit;
au milieu des accolades
flolegueu
Merci de ton aide, mais ça ne change rien du tout lol
sinon tu penses pas que le problème vient du $level dans la page login ? car j'ai l'impression qu'uon donne à $level, la valeur de $ resultat alors que c'est 2 choses différentes non ?
$requete = "SELECT * FROM clients WHERE mail = :mail AND mdp = :mdp AND level = :level";
try
{
/* Préparation de la requête*/
$req_prep = $connect->prepare($requete);
/* Exécution de la requête en passant les marqueurs et leur variables associées dans un tableau*/
$req_prep->execute(array(':mail'=>$mail,':mdp'=>$mdp, ':level'=>$level));
/* Création du tableau du résultat avec fetchAll qui récupère tout le tableau en une seule fois*/
$resultat = $req_prep->fetchColumn();
$nb_result = count($resultat);
if ($nb_result == 1)
{
/* Démarre une session si aucune n'est déjà existante et enregistre le mail dans la variable de session $_SESSION['login'] qui donne au visiteur la possibilité de se connecter. */
if (!session_id()) session_start();
$_SESSION['login'] = $mail;
$_SESSION['level'] = $resultat;
Regarde je prend la valeur level et je dis qu'elle est égale à $level et ensuite je si $mail et $mdp sont égaux au valeur rentré dans le.formulaire donc $resultat=1 et ensuite je fais comment ? J'ouvre la session je récupère l'adresse mail et je verifie si $level que j'ai récupéré plus haut dans ma base est égale ou diffèrent de 1 ?