Connexion à un espace membre en PHP et MySQL

Fermé
TitouanPrs Messages postés 47 Date d'inscription dimanche 30 juillet 2017 Statut Membre Dernière intervention 27 juin 2019 - Modifié le 11 juil. 2018 à 13:04
jordane45 Messages postés 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 - 11 juil. 2018 à 14:26
Bonjour,

Je suis actuellement entrain de concevoir un site web avec un espace membre à l'aide de PHP et MySQL.
J'ai réussi à réaliser :
- L'inscription des utilisateurs au site,
- L'envoi de mail pour confirmer leur inscription : lorsque les utilisateurs cliquent sur le lien envoyé par mail, il sont redirigés vers leur espace membre. Le "header" change alors pour afficher un bouton Déconnexion au lieu du formulaire de connexion.
- La connexion des utilisateurs au site. Mais lorsque les utilisateurs se connectent au site, le "header" ne se change pas. Je souhaiterez donc qu'il se modifie afin qu'il affiche un bouton Déconnexion à la place du formulaire de connexion.

Pouvez-vous m'aider à résoudre ce problème svp ?

Mon code :
- index.php (Page d'accueil) :

<?php
session_start();
require_once('includes/functions.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="description" content="Burger Quiz"/>
<meta name="author" content="Titouan Paris"/>
<link rel="stylesheet" href="style.css"/>
<link rel="icon" href="img/icon.png"/>
<title>Burger Quiz - Accueil</title>
</head>
<body>
<?php
if(!empty($_POST) && !empty($_POST['username']) && !empty($_POST['password'])) {
require('includes/database.php');
$req = $pdo->prepare('SELECT * FROM users WHERE (username = :username) AND confirmed_at IS NOT NULL');
$req->execute(['username' => $_POST['username']]);
$user = $req->fetch();
if(password_verify($_POST['password'], $user->password)) {
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = "Vous êtes maintenant connecté !";
header('Location: dashboard.php');
exit();
} else {
$_SESSION['flash']['danger'] = "Pseudonyme ou mot de passe incorrect.";
}
}
?>
<?php
include_once('includes/header.php');
?>
<?php
include_once('includes/footer.php');
?>
</body>
</html>

- register.php (Page d'inscription) :

<?php
session_start();
require_once('includes/functions.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="description" content="Burger Quiz"/>
<meta name="author" content="Titouan Paris"/>
<link rel="stylesheet" href="style.css"/>
<link rel="icon" href="img/icon.png"/>
<title>Burger Quiz - Inscription</title>
</head>
<body>
<?php
include_once('includes/header.php');

if(!empty($_POST)) {

$errors = array();
require_once('includes/database.php');

if(empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) {
$errors['username'] = "Le pseudonyme que vous avez indiqué n'est pas valide.";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE username = ?');
$req->execute([$_POST['username']]);
$user = $req->fetch();
if($user) {
$errors['username'] = "Ce pseudo est déjà utilisé.";
}
}

if(empty($_POST['email']) || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
$errors['email'] = "L'email que vous avez indiqué n'est pas valide.";
} else {
$req = $pdo->prepare('SELECT id FROM users WHERE email = ?');
$req->execute([$_POST['email']]);
$user = $req->fetch();
if($user) {
$errors['email'] = "Cet email est déjà utilisé.";
}
}

if(empty($_POST['password']) || $_POST['password'] == $_POST['username']) {
$errors['password'] = "Le mot de passe que vous avez indiqué n'est pas valide.";
}

if(empty($errors)) {
$req = $pdo->prepare('INSERT INTO users SET username = ?, email = ?, password = ?, confirmation_token = ?');
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$token = str_random(60);
$req->execute([$_POST['username'], $_POST['email'], $password, $token]);
$user_id = $pdo->lastInsertId();
mail($_POST['email'], "Confirmation de votre compte Burger Quiz", "Afin de valider votre compte, veuillez cliquez sur le lien suivant :\n\nhttp://localhost/Tutoriel_Grafikart/confirm.php?id=$user_id&token=$token");
$_SESSION['flash']['success'] = "Un email de confirmation vous a été envoyé afin de valider votre compte.";
header('Location: index.php');
exit();
}

}
?>
<div class="register_container">
<h1>S'inscrire</h1>

<?php if(!empty($errors)): ?>
<div class="alert alert-danger">
<p>Vous n'avez pas rempli le formulaire correctement :</p>
<ul>
<?php foreach($errors as $error): ?>
<li><?= $error; ?></li>
<?php endforeach ?>
</ul>
</div>
<?php endif ?>

<form class="register_form" action="" method="post">
<input type="text" name="username" placeholder="Pseudonyme"/>
<input type="email" name="email" placeholder="Adresse email"/>
<input type="password" name="password" placeholder="Mot de passe"/>
<input type="submit" name="submit" value="Inscription"/>
</form>
</div>
<?php
include_once('includes/footer.php');
?>
</body>
</html>

- confirm.php : (Page de confirmation par email) :

<?php
$user_id = $_GET['id'];
$token = $_GET['token'];
require('includes/database.php');
$req = $pdo->prepare('SELECT * FROM users WHERE id = ?');
$req->execute([$user_id]);
$user = $req->fetch();
session_start();

if($user && $user->confirmation_token == $token) {
$pdo->prepare('UPDATE users SET confirmation_token = NULL, confirmed_at = NOW() WHERE id =?')->execute([$user_id]);
$_SESSION['auth'] = $user;
$_SESSION['flash']['success'] = "Votre compte a bien été validé !";
header('Location: dashboard.php');
} else {
$_SESSION['flash']['danger'] = "Ce token n'est plus valide.";
header('Location: index.php');
}
?>

- header.php (Le header que je souhaiterais moddifier à la connexion d'un utilisateur) :

<header>
<div class="login_container">
<?php if(isset($_SESSION['auth'])): ?>
<a href="logout.php">Déconnexion</a>
<?php else: ?>
<form class="login_form" action="dashboard.php" method="post">
<input type="text" name="username" placeholder="Pseudonyme"/>
<input type="password" name="password" placeholder="Mot de passe"/>
<input type="submit" name="submit" value="Connexion">
</form>
<?php endif; ?>
</div>
</header>
<section>
<?php if(isset($_SESSION['flash'])): ?>
<?php foreach($_SESSION['flash'] as $type => $message): ?>
<div class="alert alert-<?= $type; ?>">
<?= $message ?>
</div>
<?php endforeach ?>
<?php unset($_SESSION['flash']); ?>
<?php endif ?>

- dashboard.php (Espace membre) :

<?php
session_start();
require_once('includes/functions.php');
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
<meta name="description" content="Burger Quiz"/>
<meta name="author" content="Titouan Paris"/>
<link rel="stylesheet" href="style.css"/>
<link rel="icon" href="img/icon.png"/>
<title>Burger Quiz - Mon compte</title>
</head>
<body>
<?php
include_once('includes/header.php');
?>
<h1>Mon compte Burger Quiz</h1>
<?php
include_once('includes/footer.php');
?>
</body>
</html>

- logout.php (Script de déconnexion du site) :

<?php
session_start();
unset($_SESSION['auth']);
$_SESSION['flash']['success'] = "Vous êtes maintenant déconnecté !";
header('Location: index.php');
?>


Pouvez-vous m'aider svp ?

Merci d'avance :)
A voir également:

1 réponse

jordane45 Messages postés 38430 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 février 2025 4 735
11 juil. 2018 à 14:26
Bonjour


Lorsque les utilisateurs se connectent au site, le "header" ne se change pas. Je souhaiterez donc qu'il se modifie afin qu'il affiche un bouton Déconnexion à la place du formulaire de connexion.


As tu vérifié si ta variable de session contenait bien quelque chose ,
print_r($_SESSION);


NB: A l'avenir, lorsque tu postes du code, merci d'y préciser le LANGAGE afin d'avoir la coloration syntaxique et l'indentation.




0