A voir également:
- 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