Problème session, admin/membre
Posté : 22 oct. 2016, 11:03
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
admin/index.php
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é';
}
?>