Configuration de sessions dans mon site internet en php
jordane45 Messages postés 38486 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour, j'ai récemment fait un post sur ce même site, une réponse à su m'aider, mais je rencontre divers problème sur lesquels j'y ai passé la nuit (en vain), c'est donc assez fatigué que je vous demande de l'aide afin de comprendre ce qui ne va pas.
Voici mes soucis:
- Lorsque j'essaye de récupérer les variables issues des colonnes de ma table 'password' (qui en faîte est plus une table user je ne sais pas trop moi-même pourquoi je l'ai nommée ainsi) cela reste vain avant j'obtenais des données qui n'étaient pas forcément en lien avec l'utilisateur connecté, maintenant je ne récupère plus rien du tout
-Mon bouton de déconnexion est totalement inutile
-Comme vous allez sûrement le remarquer, je n'arrive pas vraiment à savoir ou ranger mon code, session.php devrait me servir à récupérer ma bdd et stocker toutes les infos de l'utilisateur connecté dans une variable, verification.php devrait me servir juste à connecter l'utilisateur et connexion.php comme son nom l'indique est ma page avec un formulaire de connexion
De ses faits, je me demande si ma page connexion fait vraiment quelque chose ou si elle fait juste semblant et j'y ai passé tellement de temps qui me semble avoir été vain que cela me dépite. Pouvez-vous s'il vous plaît m'aider?
Voici les pages concernées :
index.php
<?php include 'session.php' ?> <!DOCTYPE html> <head> <title>Hôtel Neptune</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <!--viewport=zone de la fenêtre dans laquelle le contenu web peut être vu, device-width= largeur de l'écran en pixels CSS à une échelle de 100% --> <meta charset= UTF8> <link rel="stylesheet" href="Style.css"> <link rel="stylesheet" href="bootstrap.min.css"> <script type="text/javascript" src="bootstrap.bundle.js"></script> <meta name="description" content="Bienvenue sur le site de l'hôtel Neptune à Carnon 34280 (Hérault), venez découvrir notre établissement et réserver vos vacances."> </head> <body> <div> <?php include 'navbar.php'; include 'verification.php';?> <?php if (isset($_SESSION['email'])):?> <?php $email = $_SESSION['email'];?> <div class="end"> Bienvenue <?php echo $user['first_name'];?> <a href="logout.php"><button class="btn btn-outline-primary">Se déconnecter</button></a> </div> <?php endif; ?> <div>...Reste du code HTML...</div>
session.php
<?php session_start(); error_reporting(E_ALL); // activer tous les niveaux de rapport d'erreur ini_set('display_errors', 'on'); //-----------------------------------------------------------// // Connexion à la bdd //-----------------------------------------------------------// $mysqlClient = null; try{ $mysqlClient = new PDO('mysql:host=localhost;dbname=neptune;charset=utf8', 'root', 'root'); // Activation des erreurs PDO $mysqlClient->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $mysqlClient->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } if (isset($_SESSION['email'])){ $sqlQuery = 'SELECT * FROM password WHERE email= :email'; $stmt = $mysqlClient->prepare($sqlQuery); $loggedUser = $stmt->fetch(); echo 'Bonjour '. $loggedUser['first_name']; }
connexion.php
<?php // Activation de l'affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', 'on'); include 'cookie.php'; include 'navbar.php'; include 'session.php'?> <!DOCTYPE html> <head> <title>Hôtel Neptune</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <!--viewport=zone de la fenêtre dans laquelle le contenu web peut être vu, device-width= largeur de l'écran en pixels CSS à une échelle de 100% --> <meta charset= UTF8> <link rel="stylesheet" href="Style.css"> <link rel="stylesheet" href="bootstrap.min.css"> <script type="text/javascript" src="bootstrap.bundle.js"></script> <meta name="description" content="Bienvenue sur le site de l'hôtel Neptune à Carnon 34280 (Hérault), venez découvrir notre établissement et réserver vos vacances."> </head> <body> <?php // Récupération de la variable de session 'error' s'il y en a une $errorMessage = !empty($_SESSION['error']) ? !empty($_SESSION['error']) : NULL; ?> <div class="BoxRésérvations"> <div class="reserve">Se connecter</div> <form action="verification.php" method="POST"> <?php if($errorMessage) { echo '<div class="alert alert-danger" role="alert">'; echo $errorMessage; echo "</div>"; } ?> <p> Adresse mail <input class="champ1" type="email" name="email" placeholder="***@***"> Mot de passe <input class="champ1" type="password" name="pswd" placeholder="password"> </p> <input type="submit" value="Valider" class="btn btn-light"> </form> <div class="content"> </div> <div class="BoxRésérvations"> <div> <p class="reserve"> Pas encore de compte?</p> <a href="inscription.php"><button class="btn btn-light">S'inscrire</button><a> </div> </div> </div> </body>
verification.php
<?php include 'session.php'; //-----------------------------------------------------------// // Validation du formulaire //-----------------------------------------------------------// //Récupéaration propre des variables AVANT de les utiliser // pour ça, tu peux utilisr l'écriture ternaire (sorte de if/else) $email = !empty($_POST['email']) ? trim($_POST['email']) : NULL; $pswd = !empty($_POST['pswd']) ? trim($_POST['pswd']) : NULL; if ($email && $pswd) { //-----------------------------------------------------------// // On récupère les infos de l'utilisateur en fonction de son email //-----------------------------------------------------------// $sqlQuery = 'SELECT * FROM password WHERE email =:email'; $pswStmt = $mysqlClient->prepare($sqlQuery ); //prépare la requête en évitant les injonctions sql $pswStmt->execute(['email' => $email]); //vérifie si l'utiisateur existe bien $user[] = $pswStmt->fetch(); // ajoute les résultats de la colonne au tableau $user $bddPswd = $user['pswd']; // NB : On ne doit pas stocker le mot de passe en clair dans la bdd... il faut le "crypter" ( renseignes toi sur les fonctions password_hash et password_verify if (password_verify($pswd, $bddPswd)){ $_SESSION['user']= $user['email']; echo $_SESSION['email']; header("Location:index.php"); exit; } else { $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', $email, $pswd ); $_SESSION['error']=$errorMessage; echo $errorMessage; exit; } } echo $user['pswd']; ?>
- Configuration de sessions dans mon site internet en php
- Ethernet n'a pas de configuration ip valide - Guide
- Site de telechargement - Accueil - Outils
- Site comme coco - Accueil - Réseaux sociaux
- Panneau de configuration - Guide
- Quel site remplace coco - Accueil - Réseaux sociaux
3 réponses
Bonjour,
Plusieurs choses à corriger
verifications.php
<?php session_start(); error_reporting(E_ALL); // activer tous les niveaux de rapport d'erreur ini_set('display_errors', 'on'); //-----------------------------------------------------------// // Connexion à la bdd // A déplacer dans un fichier à part et à require dans les pages // où tu en as besoin !! //-----------------------------------------------------------// try{ $bdd = new PDO('mysql:host=localhost;dbname=neptune;charset=utf8', 'root', 'root'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //-----------------------------------------------------------// // Validation du formulaire //-----------------------------------------------------------// //Récupéaration propre des variables AVANT de les utiliser // pour ça, tu peux utilisr l'écriture ternaire (sorte de if/else) $email = !empty($_POST['email']) ? trim($_POST['email']) : NULL; $pswd = !empty($_POST['pswd']) ? trim($_POST['pswd']) : NULL; if ($email && $pswd) { //-----------------------------------------------------------// // On récupère les infos de l'utilisateur en fonction de son email //-----------------------------------------------------------// $sql = 'SELECT * FROM password WHERE email =:email'; $stmt = $bdd->prepare($sql ); //prépare la requête en évitant les injonctions sql $stmt->execute(['email' => $email]); //vérifie si l'utiisateur existe bien $user = $stmt->fetch(); // ajoute les résultats de la colonne au tableau $user $bddPswd = $user['pswd']; // NB : On ne doit pas stocker le mot de passe en clair dans la bdd... il faut le "crypter" ( renseignes toi sur les fonctions password_hash et password_verify if (password_verify($pswd, $bddPswd)){ $_SESSION['user'] = ['email'=>$user['email'],'id'=>$user['id']]; header("Location:index.php"); exit; } else { $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)', $email, $pswd ); $_SESSION['error']=$errorMessage; echo $errorMessage; exit; } } ?>
Session.php
<?php //session.php error_reporting(E_ALL); // activer tous les niveaux de rapport d'erreur ini_set('display_errors', 'on'); //-----------------------------------------------------------// // Connexion à la bdd // A déplacer dans un fichier à part et à require dans les pages // où tu en as besoin !! //-----------------------------------------------------------// try{ $bdd = new PDO('mysql:host=localhost;dbname=neptune;charset=utf8', 'root', 'root'); // Activation des erreurs PDO $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); } //Récupéaration propre des variables AVANT de les utiliser $email = !empty($_SESSION['user']['email']) ? trim($_SESSION['user']['email']) : NULL; if ($email){ $sql = 'SELECT * FROM password WHERE email= :email'; $stmt = $bdd->prepare($sql); $tmt->execute(['email' => $email]); // $loggedUser = $stmt->fetch(); echo 'Bonjour '. $loggedUser['first_name']; }
connexion.php
<?php //connexion.php // Activation de l'affichage des erreurs PHP session_start(); error_reporting(E_ALL); ini_set('display_errors', 'on'); include 'cookie.php'; include 'navbar.php'; include 'session.php' // Récupération de la variable de session 'error' s'il y en a une $errorMessage = !empty($_SESSION['error']) ? !empty($_SESSION['error']) : NULL; ?> <!DOCTYPE html> <html> <head> <title>Hôtel Neptune</title> <meta name="viewport" content="width=device-width, initial-scale=1"> <!--viewport=zone de la fenêtre dans laquelle le contenu web peut être vu, device-width= largeur de l'écran en pixels CSS à une échelle de 100% --> <meta charset= UTF8> <link rel="stylesheet" href="Style.css"> <link rel="stylesheet" href="bootstrap.min.css"> <script type="text/javascript" src="bootstrap.bundle.js"></script> <meta name="description" content="Bienvenue sur le site de l'hôtel Neptune à Carnon 34280 (Hérault), venez découvrir notre établissement et réserver vos vacances."> </head> <body> <div class="BoxRésérvations"> <div class="reserve">Se connecter</div> <form action="verification.php" method="POST"> <?php if($errorMessage) { echo '<div class="alert alert-danger" role="alert">'; echo $errorMessage; echo "</div>"; } ?> <p> Adresse mail <input class="champ1" type="email" name="email" placeholder="***@***"> Mot de passe <input class="champ1" type="password" name="pswd" placeholder="password"> </p> <input type="submit" value="Valider" class="btn btn-light"> </form> <div class="content"> </div> <div class="BoxRésérvations"> <div> <p class="reserve"> Pas encore de compte?</p> <a href="inscription.php"><button class="btn btn-light">S'inscrire</button><a> </div> </div> </div> </body> </html>
Merci beaucoup, pour cette aide, cela semble bien mieux marcher, cependant, j'ai un toujours du mal à déconnecter l'utilisateur, j'ai une page d'accueil, qui a ce code afin d'afficher un petit message personnel s'il l'utilisateur est connecté :
<?php if (isset($_SESSION['email'])):?> <div class="end"> Bienvenue <?php echo $loggedUser['first_name'];?> <a href="logout.php"><button class="btn btn-outline-primary">Se déconnecter</button></a> </div> <?php endif; ?>
, grâce à ton aide précieuse, cela affiche bien le bon résultat sur la page d'accueil, cependant, impossible de me déconnecter et tester cela avec d'autres comptes, voici mon court code pour logout.php :
<?php session_destroy(); unset($_SESSION['SESSION_VAR'] ); setcookie(session_name(), "", time() - 3600); header('Location: index.php'); ?>
à la base il n'y avait que la première et la dernière ligne mais j'ai ajouté celles du milieu en espérant que cela puisse marcher, ce n'est pas le cas