Authentifier une session correctement
chrisCL974
Messages postés
63
Date d'inscription
Statut
Membre
Dernière intervention
-
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
J'ai un projet sur mon projet : lorsque je me connecte avec un compte A, il se connecte bien mais lorsqu'il entre dans la page, il devient le compte B.
Ceci est mon code qui permet d'inscrire et de se connecter, model.php :
J'ai un projet sur mon projet : lorsque je me connecte avec un compte A, il se connecte bien mais lorsqu'il entre dans la page, il devient le compte B.
Ceci est mon code qui permet d'inscrire et de se connecter, model.php :
<?php class model{ private $server = "localhost"; private $username = "root"; private $password = ""; private $db = "formation_db"; private $conn; public function __construct() { try { $this->conn = new mysqli( $this->server, $this->username, $this->password, $this->db ); } catch(Exception $e) { echo "Erreur de connexion" . $e->getMessage(); } } function connexionUser(){ session_start(); if(isset($_POST['email']) && isset($_POST['userPassword'])) { $email = $_POST['email']; $userPassword = $_POST['userPassword']; if(empty($email)){ header("Location: index.php?error=Email requis"); exit(); } else if(empty($userPassword)) { header("Location: index.php?error=Mot de passe requis"); exit(); } else { $query = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'"; $sql = $this->conn->query($query); if(mysqli_num_rows($sql) === 1) { $row = mysqli_fetch_assoc($sql); if($row['email'] === $email && $row['userPassword'] === $userPassword) { // SI l'admin se connecte if($row['adminRole'] == 1) { header("Location: admin/index_admin.php"); exit(); }else{ header("Location: demandeur/index_demandeur.php"); exit(); } $_SESSION['email'] = $row['email']; $_SESSION['nom'] = $row['nom']; $_SESSION['prenom'] = $row['prenom']; $_SESSION['userService'] = $row['userService']; $_SESSION['userFonction'] = $row['userFonction']; $_SESSION['userID'] = $row['userID']; exit(); } else { header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } } else { header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } } } if(isset($_POST['adminRole']) && $_POST['adminRole'] == 1) { header('Location: index_admin.php'); } } function registerUser(){ if(isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])){ $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $userService = $_POST['userService']; $userFonction = $_POST['userFonction']; $adminRole = $_POST['adminRole']; $userPassword = $_POST['userPassword']; if(empty($nom)) { echo("Nom requis"); exit(); } else if(empty($email)) { echo("Adresse mail requis"); exit(); } else if(empty($userPassword)) { echo("Mot de passe requis"); exit(); } else { $verifyQuery = "SELECT * FROM users WHERE email = '$email'"; $sql = $this->conn->query($verifyQuery); if(mysqli_num_rows($sql) === 1) { $row = mysqli_fetch_assoc($sql); if($row['email'] === $email) { echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>L'adresse mail ". $_POST['email']. " </q> a déjà été utilisé</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; exit(); } else { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; if($sql = $this->conn->query($insertQuery)) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b><q>". $_POST['nom']. " ". $_POST['prennom']. "</q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div> <br><br>"; } else { echo "err"; } } } else { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; if($sql = $this->conn->query($insertQuery)) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b> <q>". $_POST['nom']. " ". $_POST['prenom']. " </q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; }else { echo "err"; } } } } }
A voir également:
- Authentifier une session correctement
- Teamviewer code de session expiré ✓ - Forum Logiciels
- Votre pc n'a pas démarré correctement - Forum Windows 10
- Veuillez ouvrir une session avec les privilèges du gestionnaire ✓ - Forum Windows
- Vérifier si une phrase est correcte - Accueil - Google
- Veuillez ouvrir une session avec les privilèges de gestionnaire - Forum Windows 10
4 réponses
Bonjour
As-tu bien un session start sur chacune de tes pages ?
Comment vas-tu de la page 1 à la page 2 ?
À quel moment appels tu les diverses fonctions que tu nous montres ?
Pourquoi as-tu deux fois une fonction d'insert dans ton code ?
As-tu bien un session start sur chacune de tes pages ?
Comment vas-tu de la page 1 à la page 2 ?
À quel moment appels tu les diverses fonctions que tu nous montres ?
Pourquoi as-tu deux fois une fonction d'insert dans ton code ?
J'ai une session start dans seulement un fichier que je l'inclus dans d'autres.
Pour aller de la page 1 à 2, c'est au moment de la connexion. Il prend le compte le plus récemment créé. Pour la fonction connexionUser c'est au moment de la connexion, et registerUSer au moment de la création de compte pour les user.
C'est l'admin qui créé les comptes.
Pour aller de la page 1 à 2, c'est au moment de la connexion. Il prend le compte le plus récemment créé. Pour la fonction connexionUser c'est au moment de la connexion, et registerUSer au moment de la création de compte pour les user.
C'est l'admin qui créé les comptes.
Bon.. il y aurait beaucoup de choses à dire sur ton code....
par exemple, qu'on ne doit pas stocker un mot de passe en clair dans la bdd mais le "hasher"
(pour ça, regarde la fonction php password_hash et password_verify )
Et puis.. en le découpant un peu mieux ça serait plus simple à lire et à maintenir.
sans compter que tu fais tes redirections AVANT d'avoir renseigné les variables de session.
Pour le coup, j'en ai profité pour lui faire un rapide lifting (sans le hash du password..ça je te laisse faire)
et j'ai structuré ta variable de session un peu mieux..
En gros
par exemple, qu'on ne doit pas stocker un mot de passe en clair dans la bdd mais le "hasher"
(pour ça, regarde la fonction php password_hash et password_verify )
Et puis.. en le découpant un peu mieux ça serait plus simple à lire et à maintenir.
sans compter que tu fais tes redirections AVANT d'avoir renseigné les variables de session.
Pour le coup, j'en ai profité pour lui faire un rapide lifting (sans le hash du password..ça je te laisse faire)
et j'ai structuré ta variable de session un peu mieux..
En gros
<?php //démarrage SESSION AVANT TOUT LE RESTE session_start(); class model { private $server = "localhost"; private $username = "root"; private $password = ""; private $db = "formation_db"; private $conn; function __construct(){ try { $this->conn = new mysqli( $this->server, $this->username, $this->password, $this->db ); } catch (Exception $e) { echo "Erreur de connexion" . $e->getMessage(); } } private function getUserByMailAndPassword($email, $userPassword) { $verifyQuery = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function getUserByMail($email) { $verifyQuery = "SELECT * FROM users WHERE email = '$email'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword) { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; return $this->conn->query($insertQuery); } public function connexionUser(){ if (isset($_POST['email']) && isset($_POST['userPassword'])) { $email = $_POST['email']; $userPassword = $_POST['userPassword']; if (empty($email)) { header("Location: index.php?error=Email requis"); exit(); } else if (empty($userPassword)) { header("Location: index.php?error=Mot de passe requis"); exit(); } else { $user = $this->getUserByMailAndPassword($email, $userPassword); if (!empty($user)) { $_SESSION['USER']['email'] = $row['email']; $_SESSION['USER']['nom'] = $row['nom']; $_SESSION['USER']['prenom'] = $row['prenom']; $_SESSION['USER']['userService'] = $row['userService']; $_SESSION['USER']['userFonction'] = $row['userFonction']; $_SESSION['USER']['userID'] = $row['userID']; // SI l'admin se connecte if ($row['adminRole'] == 1) { header("Location: admin/index_admin.php"); exit(); } else { header("Location: demandeur/index_demandeur.php"); exit(); } exit(); } else { //on vide les variables de session $_SESSION['USER'] = null; } } } else { header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } if (isset($_POST['adminRole']) && $_POST['adminRole'] == 1) { header('Location: index_admin.php'); } } public function registerUser(){ if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $userService = $_POST['userService']; $userFonction = $_POST['userFonction']; $adminRole = $_POST['adminRole']; $userPassword = $_POST['userPassword']; if (empty($nom)) { echo("Nom requis"); exit(); } else if (empty($email)) { echo("Adresse mail requis"); exit(); } else if (empty($userPassword)) { echo("Mot de passe requis"); exit(); } else { $user = $this->getUserByMail($email); if (!empty($user)) { echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>L'adresse mail " . $_POST['email'] . " </q> a déjà été utilisé</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; exit(); } else { $insert = $this->inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword); if ($insert) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b><q>" . $_POST['nom'] . " " . $_POST['prennom'] . "</q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div> <br><br>"; } else { echo "err"; exit; } } } } } }
C'est au niveau de la ligne 81
Tu veux dire que c'est cette redirection qui fou le bazar ?
Tu entres dans le ELSE si tu n'as pas envoyé l'identifiant et le mot de passe via le formulaire.... donc.. as tu bien envoyé les données depuis ton formulaire ??
A noter qu'on ne sait toujours rien du code de ton formulaire.. ni à quel(s) moment(s) tu fais appel aux fonctions qui se trouvent dans cette class...
Je te rappel également que nous partager une IMAGE de ton code.. ne nous permet pas de copier/coller si besoin et qu'au lieu de faire ça, il faut que tu prennes l'habitude d'utiliser les BALISES DE CODE.
Le fichier model.php, qui contient la connexion, l'inscription, edit etc... :
Celui ci c'est le code où on doit se trouver en premier lieu pour se connecter index.php :
<?php session_start(); class model { private $server = "localhost"; private $username = "root"; private $password = ""; private $db = "formation_db"; private $conn; function __construct(){ try { $this->conn = new mysqli( $this->server, $this->username, $this->password, $this->db ); } catch (Exception $e) { echo "Erreur de connexion" . $e->getMessage(); } } private function getUserByMailAndPassword($email, $userPassword) { $verifyQuery = "SELECT * FROM users WHERE email = '$email' AND userPassword = '$userPassword'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function getUserByMail($email) { $verifyQuery = "SELECT * FROM users WHERE email = '$email'"; $sql = $this->conn->query($verifyQuery); return mysqli_fetch_assoc($sql); } private function inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword) { $insertQuery = "INSERT INTO users (nom, prenom, email, userService, userFonction, adminRole, userPassword) VALUES ('$nom','$prenom', '$email','$userService','$userFonction','$adminRole', '$userPassword')"; return $this->conn->query($insertQuery); } public function connexionUser(){ if (isset($_POST['email']) && isset($_POST['userPassword'])) { $email = $_POST['email']; $userPassword = $_POST['userPassword']; if (empty($email)) { header("Location: index.php?error=Email requis"); exit(); } else if (empty($userPassword)) { header("Location: index.php?error=Mot de passe requis"); exit(); } else { $user = $this->getUserByMailAndPassword($email, $userPassword); if (!empty($user)) { $_SESSION['USER']['email'] = $row['email']; $_SESSION['USER']['nom'] = $row['nom']; $_SESSION['USER']['prenom'] = $row['prenom']; $_SESSION['USER']['userService'] = $row['userService']; $_SESSION['USER']['userFonction'] = $row['userFonction']; $_SESSION['USER']['userID'] = $row['userID']; // SI l'admin se connecte if ($row['adminRole'] == 1) { header("Location: admin/index_admin.php"); exit(); } else { header("Location: demandeur/index_demandeur.php"); exit(); } exit(); } else { //on vide les variables de session $_SESSION['USER'] = null; } } } else { //header("Location: index.php?error=Email ou mot de passe incorrect."); exit(); } if (isset($_POST['adminRole']) && $_POST['adminRole'] == 1) { header('Location: index_admin.php'); } } public function registerUser(){ if (isset($_POST['nom']) && isset($_POST['prenom']) && isset($_POST['email']) && isset($_POST['userService']) && isset($_POST['userFonction']) && isset($_POST['adminRole']) && isset($_POST['userPassword'])) { $nom = $_POST['nom']; $prenom = $_POST['prenom']; $email = $_POST['email']; $userService = $_POST['userService']; $userFonction = $_POST['userFonction']; $adminRole = $_POST['adminRole']; $userPassword = $_POST['userPassword']; if (empty($nom)) { echo("Nom requis"); exit(); } else if (empty($email)) { echo("Adresse mail requis"); exit(); } else if (empty($userPassword)) { echo("Mot de passe requis"); exit(); } else { $user = $this->getUserByMail($email); if (!empty($user)) { echo "<div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>L'adresse mail " . $_POST['email'] . " </q> a déjà été utilisé</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div>"; exit(); } else { $insert = $this->inserUser($nom, $prenom, $email, $userService, $userFonction, $adminRole, $userPassword); if ($insert) { echo "<div class='card w-25' style='padding:20px;color: #45509E; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b><q>" . $_POST['nom'] . " " . $_POST['prennom'] . "</q> a été ajouté</b></h5> <a href='../admin/index_admin.php' style='color:grey;text-align:center'>Retour vers la page d'accueil</a> </div> <br><br>"; } else { echo "err"; exit; } } } } } function edit($id) { $data = null; $query = "SELECT userID, nom, prenom, email, userService, userFonction FROM users WHERE userID = " .$id; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function update($data) { $query = "UPDATE users SET nom = '$data[nom]' , prenom = '$data[prenom]' , email = '$data[email]' , userService = '$data[userService]' , userFonction = '$data[userFonction]' , userPassword = '$data[userPassword]' WHERE userID = '$data[userID]'"; if($sql = $this->conn->query($query)) { echo "<br><br><div class='card w-25 text-warning' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b> Vos informations ont bien été modifié</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour vers la page d'accueil pour rafraichir</a> </div>"; } else { echo "<br><br> <div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>Vos données n'ont pas pu être modifiées</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a> </div>"; } } function updateAdmin($data) { $query = "UPDATE users SET nom = '$data[nom]' , prenom = '$data[prenom]' , email = '$data[email]' , userService = '$data[userService]' , userFonction = '$data[userFonction]' , userPassword = '$data[userPassword]' WHERE userID = '$data[userID]'"; if($sql = $this->conn->query($query)) { echo "<br><br><div class='card w-25 text-warning' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-check-circle'></i> <b> Vos informations ont bien été modifié</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour vers la page d'accueil pour rafraichir</a> </div>"; } else { echo "<br><br> <div class='card w-25 text-danger' style='padding:20px; margin:auto;'> <h5 style='text-align:center'> <i class='fas fa-exclamation-triangle'></i> <b>Vos données n'ont pas pu être modifiées</b></h5> <a href='../demandeur/index_demandeur.php' style='color:grey;text-align:center'>Retour </a> </div>"; } } function viewProfile(){ $data = null; $query = "SELECT * FROM users WHERE userID "; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)){ $data[] = $row; } } return $data; } function getAllUtilisateur(){ $data = null; $query = "SELECT userID, nom, prenom, userFonction, userService FROM users WHERE adminRole = '0' ORDER BY nom ASC " ; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function getAllAdministrateur(){ $data = null; $query = "SELECT userID, nom, prenom, userFonction, userService FROM users WHERE adminRole = '1' ORDER BY nom ASC " ; if($sql = $this->conn->query($query)) { while($row = mysqli_fetch_assoc($sql)) { $data[] = $row; } } return $data; } function deleteUser($user) { $query = "DELETE FROM users WHERE userID = " . $user; if($sql = $this->conn->query($query)) { header("Location: index_admin.php"); } else { return false; } } } ?>
Celui ci c'est le code où on doit se trouver en premier lieu pour se connecter index.php :
<?php include "model/model.php"; $model = new model; $login = $model->connexionUser(); ?> <!DOCTYPE html> <html lang="fr"> <header> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Form&nou - Connexion</title> <link href='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css'> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous"> <script src='https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.bundle.min.js'></script> <script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script> <script src="https://kit.fontawesome.com/6c1ecc43dd.js" crossorigin="anonymous"></script> <link rel="stylesheet" href="Public/css/style.css"> <link rel="stylesheet" href="Public/css/header.css"> <link rel="stylesheet" href="Public/css/header_inscription.css"> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap" rel="stylesheet"> <link rel="shortcut icon" type="image/png" href="Public/img/bg2.png"/> </header> <!--BODY --> <body> <!-- Header Inscription--> <div class="header__otherpage"> <div class="header__texture"></div> <div class="container__1"> <div class="header__navbar"> <div class="header__navbar--logo"> <a style="text-decoration:none" href="#" class="header__navbar--logo-title">Form&Nou</a> </div> <div class="header__navbar-toggle"> <span class="header__navbar-toggle-icons"></span> </div> </div> <div class="login-form"> <br><br> <!-- Formulaire --> <div class="form__title">Espace de connexion</div> <div class="login__form "> <div class="container__login"> <div class="main"> <div class="content__login"> <h2>Connexion</h2> <form action="" method="POST"> <?php if(isset($_GET['error'])) { ?> <div class="alert alert-danger"><img style="width:15px;margin-top:-2px" src="Public/img/warning.png"> <?php echo $_GET['error']; ?></div> <?php } ?> <input type="email" name="email" id="inputtest" placeholder="Adresse mail" required autofocus=""> <input type="password" name="userPassword" id="inputtest" placeholder="Mot de passe" required autofocus=""> <button class="btn" type="submit">Se connecter</button> <p class="account">Pas encore de compte? Veillez contacter les administrateurs : <b style="color: #FFBC42;">form&nou@alf.re</b> </p> </form> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php } ?> </div> <div class="form__img"> <img src="Public/img/login.svg"> </div> </div> </div> </div> </div> </div> </body> </html>