Compte Rendu - TP4: Système d'authentification en PHP et MySQL

Partie 2 - Authentification avec base de données

Exercice 4 : Création des tables dans la base de données

Objectif : Créer deux tables dans la base de données pour gérer les administrateurs et les utilisateurs.
Approche de réalisation :
  • Utilisation de phpMyAdmin pour créer les tables
  • Structure des tables avec les champs requis
  • Insertion de données de test
Structure des tables : Capture d'écran de la structure des tables :
Structure des tables

Exercice 5 : Fichier de connexion à la base de données

Objectif : Créer un fichier de connexion contenant les paramètres de connexion à la base de données.
Approche de réalisation :
  • Utilisation de define() pour les constantes de connexion
  • Connexion à la base avec mysqli_connect()
  • Gestion des erreurs de connexion
Code connexion.php :
<?php
define('DB_HOST', 'localhost');
define('DB_USER', 'guewennmennegaut_AJAX');
define('DB_PASS', 'MDP');
define('DB_NAME', 'guewennmennegaut_PHP');

$bdd = mysqli_connect(DB_HOST, DB_USER, DB_PASS, DB_NAME);

if (!$bdd) {
    die("Erreur de connexion : " . mysqli_connect_error());
}
?>
Explication du fonctionnement : Ce fichier définit les constantes de connexion à la base de données et établit la connexion avec mysqli_connect(). Si la connexion échoue, le script s'arrête avec un message d'erreur.

Exercice 6 : Page de connexion avec authentification

Objectif : Créer une page de connexion qui vérifie les identifiants et crée les sessions appropriées.
Approche de réalisation :
  • Démarrage de session et vérification des sessions existantes
  • Traitement du formulaire POST
  • Vérification des identifiants dans la base de données
  • Création des variables de session et redirection
Code PHP de login.php :
<?php
// 1/ Démarrage du système de sessions
session_start();

// 2/ Test de l'existence de sessions actives
if (isset($_SESSION['id_admin'])) {
    header('Location: admin_page.php');
    exit();
}

if (isset($_SESSION['id_user'])) {
    header('Location: user_page.php');
    exit();
}

// 3/ Vérification du mot de passe
if ($_POST) {
    require_once 'connexion.php';
    extract($_POST);
    
    if ($type_user == "admin") {
        $sql = "SELECT * FROM admins WHERE login_admin = '$user_name' AND pwd_admin = '$password'";
    } else {
        $sql = "SELECT * FROM users WHERE login_user = '$user_name' AND pwd_user = '$password'";
    }
    
    $resultat = mysqli_query($bdd, $sql);
    
    if ($resultat) {
        if (mysqli_num_rows($resultat) == 0) {
            echo 'Utilisateur ou mot de passe incorrecte !!';
        } else if ($type_user == "admin") {
            $row = mysqli_fetch_assoc($resultat);
            $_SESSION['id_admin'] = $row['id_admin'];
            $_SESSION['login_admin'] = $row['login_admin'];
            header('Location: admin_page.php');
        } else {
            $row = mysqli_fetch_assoc($resultat);
            $_SESSION['id_user'] = $row['id_user'];
            $_SESSION['login_user'] = $row['login_user'];
            header('Location: user_page.php');
        }
        
        mysqli_free_result($resultat);
        mysqli_close($bdd);
    }
}
?>
Formulaire HTML de login.php :
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Connexion</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <div class="card">
            <h1>Connexion</h1>
            
            <!-- 4/ Formulaire HTML -->
            <form method="POST" class="login-form">
                <div class="form-group">
                    <input type="text" name="user_name" placeholder="Nom d'utilisateur" required class="input-field">
                </div>
                
                <div class="form-group">
                    <input type="password" name="password" placeholder="Mot de passe" required class="input-field">
                </div>
                
                <div class="form-group">
                    <select name="type_user" required class="input-field">
                        <option value="admin">Admin</option>
                        <option value="user">User</option>
                    </select>
                </div>
                
                <button type="submit" name="submit" class="btn btn-primary">Se connecter</button>
            </form>
        </div>
    </div>
</body>
</html>
Capture d'écran du formulaire de connexion :
Formulaire de connexion
Explication du fonctionnement : La page vérifie d'abord si l'utilisateur est déjà connecté. Le formulaire envoie les données en POST, le script vérifie les identifiants dans la base de données selon le type d'utilisateur et crée les variables de session appropriées avant la redirection.

Exercice 7 : Pages des utilisateurs et administrateurs

Objectif : Créer les pages spécifiques pour chaque type d'utilisateur avec contrôle d'accès.
Approche de réalisation :
  • Vérification de la session avant accès
  • Affichage personnalisé selon le type d'utilisateur
  • Lien de déconnexion
Code admin_page.php :
<?php
session_start();

if (!isset($_SESSION['id_admin'])) {
    header('Location: login.php');
    exit();
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Espace Administrateur</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <div class="dashboard-card">
            <div class="nav-bar">
                <div class="user-info">
                    Connecté en tant que : <?php echo $_SESSION['login_admin']; ?>
                </div>
            </div>
            
            <div class="welcome-section">
                <h1>Espace Administrateur</h1>
                <p>Bienvenue <?php echo $_SESSION['login_admin']; ?></p>
            </div>
            
            <a href="logout.php" class="btn btn-secondary">Déconnexion</a>
        </div>
    </div>
</body>
</html>
Capture d'écran de l'espace administrateur :
Espace administrateur Code user_page.php :
<?php
session_start();

if (!isset($_SESSION['id_user'])) {
    header('Location: login.php');
    exit();
}
?>
<!DOCTYPE html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Espace Utilisateur</title>
    <link rel="stylesheet" href="style.css">
</head>
<body>
    <div class="container">
        <div class="dashboard-card">
            <div class="nav-bar">
                <div class="user-info">
                    Connecté en tant que : <?php echo $_SESSION['login_user']; ?>
                </div>
            </div>
            
            <div class="welcome-section">
                <h1>Espace Utilisateur</h1>
                <p>Bienvenue <?php echo $_SESSION['login_user']; ?></p>
            </div>
            
            <a href="logout.php" class="btn btn-secondary">Déconnexion</a>
        </div>
    </div>
</body>
</html>
Capture d'écran de l'espace utilisateur :
Espace utilisateur
Explication du fonctionnement : Ces pages vérifient l'existence de la session appropriée avant d'autoriser l'accès. Elles affichent les informations de l'utilisateur connecté et proposent un lien de déconnexion.

Exercice 8 : Déconnexion

Objectif : Créer une page de déconnexion qui détruit la session.
Approche de réalisation :
  • Destruction de la session avec session_destroy()
  • Redirection vers la page de connexion
Code logout.php :
<link rel="stylesheet" href="style.css">
<?php
session_start();
session_destroy();
header('Location: login.php');
exit();
?>
Explication du fonctionnement : Ce script détruit toutes les données de session et redirige l'utilisateur vers la page de connexion.

Autre capture d'écran

Capture d'écran du message d'erreur en cas d'identifiants incorrects :
Message d'erreur