Configuration de sessions dans mon site internet en php

Fermé
HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 - 14 déc. 2022 à 10:44
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 - 14 déc. 2022 à 15:17

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'];
?>
A voir également:

3 réponses

HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 1
14 déc. 2022 à 11:24

J'oubliais, presque, voici aussi ma table sql si ça peut aider :

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 déc. 2022 à 11:31

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>

0
HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 1
Modifié le 14 déc. 2022 à 12:33

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

0
jordane45 Messages postés 38145 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 25 avril 2024 4 650
14 déc. 2022 à 15:17

Commence par faire un var_dump de la variable $_SESSION ....   tu verras ce qu'elle contient et sous quelle forme elle se présente. ça t'évitera d'inventer des noms de variable qui n'existent pas :-)

0