Créer un Espace Membre avec administration en PHP et MySQL
Dans ce tutoriel nous allons créer un espace pour des administrateurs et des utilisateurs normaux. Les utilisateurs normaux de notre application ne sont pas autorisés à accéder aux pages d’administration. Tous les utilisateurs (administrateurs et utilisateurs normaux) utilisent le même formulaire pour se connecter. Après la connexion, les utilisateurs normaux sont redirigés vers la page d’index tandis que les utilisateurs admin sont redirigés vers la page d’administration.
Voici l’arborescence du dossier de notre projet:
La première chose à faire est de mettre en place notre base de données.
Créer une base de données appelée « registration ». Dans la base de données « registration », ajoutez une table appelée « users ». La table users prendra les cinq champs suivants.
- id
- username
- type (admin | user)
- password
Vous pouvez créer ceci en utilisant un client MySQL comme PHPMyAdmin.
Ou vous pouvez le créer sur l’invite de commande MySQL en utilisant le script SQL suivant :
CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, `username` varchar(100) NOT NULL, `email` varchar(100) NOT NULL, `type` varchar(100) NOT NULL, `password` varchar(100) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Créer un formulaire d’inscription
Dans cette partie, nous allons créer un formulaire d’inscription qui permet aux utilisateurs de créer un nouveau compte en remplissant un formulaire web.
Créez maintenant un dossier appelé « registration » dans un répertoire accessible à notre serveur. Créez le dossier à l’intérieur de htdocs (si vous utilisez le serveur XAMPP) ou à l’intérieur de www (si vous utilisez le serveur wampp).
Après avoir créé la table, nous devons créer un script PHP afin de nous connecter au serveur de base de données MySQL. Créons un fichier nommé « config.php » et mettons le code suivant à l’intérieur.
<?php // Informations d'identification define('DB_SERVER', 'localhost'); define('DB_USERNAME', 'root'); define('DB_PASSWORD', ''); define('DB_NAME', 'registration'); // Connexion à la base de données MySQL $conn = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME); // Vérifier la connexion if($conn === false){ die("ERREUR : Impossible de se connecter. " . mysqli_connect_error()); } ?>
Créons un autre fichier PHP appelé « register.php » et y mettons le code d’exemple suivant. Cet exemple de code va créer un formulaire web qui permet aux utilisateurs de s’inscrire.
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css" /> </head> <body> <?php require('config.php'); if (isset($_REQUEST['username'], $_REQUEST['email'], $_REQUEST['password'])){ // récupérer le nom d'utilisateur $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); // récupérer l'email $email = stripslashes($_REQUEST['email']); $email = mysqli_real_escape_string($conn, $email); // récupérer le mot de passe $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); $query = "INSERT into `users` (username, email, type, password) VALUES ('$username', '$email', 'user', '".hash('sha256', $password)."')"; $res = mysqli_query($conn, $query); if($res){ echo "<div class='sucess'> <h3>Vous êtes inscrit avec succès.</h3> <p>Cliquez ici pour vous <a href='login.php'>connecter</a></p> </div>"; } }else{ ?> <form class="box" action="" method="post"> <h1 class="box-logo box-title"> <a href="https://waytolearnx.com/">WayToLearnX.com</a> </h1> <h1 class="box-title">S'inscrire</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur" required /> <input type="text" class="box-input" name="email" placeholder="Email" required /> <input type="password" class="box-input" name="password" placeholder="Mot de passe" required /> <input type="submit" name="submit" value="S'inscrire" class="box-button" /> <p class="box-register">Déjà inscrit? <a href="login.php">Connectez-vous ici</a></p> </form> <?php } ?> </body> </html>

Lorsque l’utilisateur remplisse le formulaire et appuie sur le bouton « S’inscrire », les informations seront enregistrées dans la base de données. Il est évident que l’utilisateur qui va s’inscrire sera enregistré en tant qu’utilisateur normal et non administrateur.
Dans le code ci-dessus, nous avons utilisé la fonction PHP hash() pour hacher le mot de passe entrée par l’utilisateur. Cette fonction hache le mot de passe en utilisant l’algorithme de hachage sha256. Elle génère et applique aussi une chaîne aléatoire (le sel) automatiquement lors du hachage du mot de passe; cela signifie que même si deux utilisateurs ont les mêmes mots de passe, leurs hachages de mots de passe seront différents.
Nous passons donc à l’étape suivante.
Créer la page de connexion PHP
Dans cette partie, nous allons créer une page de connexion où l’utilisateur peut entrer son nom d’utilisateur et son mot de passe. Lorsque l’utilisateur soumettra le formulaire, ces entrées seront vérifiées par rapport aux informations d’identification stockées dans la base de données. Si le nom d’utilisateur et le mot de passe correspondent, l’utilisateur est autorisé et se voit accorder l’accès au site, sinon la tentative de connexion sera rejetée.
Créons un fichier nommé « login.php » et plaçons le code suivant à l’intérieur.
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css" /> </head> <body> <?php require('config.php'); session_start(); if (isset($_POST['username'])){ $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); $_SESSION['username'] = $username; $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); $query = "SELECT * FROM `users` WHERE username='$username' and password='".hash('sha256', $password)."'"; $result = mysqli_query($conn,$query) or die(mysql_error()); if (mysqli_num_rows($result) == 1) { $user = mysqli_fetch_assoc($result); // vérifier si l'utilisateur est un administrateur ou un utilisateur if ($user['type'] == 'admin') { header('location: admin/home.php'); }else{ header('location: index.php'); } }else{ $message = "Le nom d'utilisateur ou le mot de passe est incorrect."; } } ?> <form class="box" action="" method="post" name="login"> <h1 class="box-logo box-title"> <a href="https://waytolearnx.com/">WayToLearnX.com</a> </h1> <h1 class="box-title">Connexion</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur"> <input type="password" class="box-input" name="password" placeholder="Mot de passe"> <input type="submit" value="Connexion " name="submit" class="box-button"> <p class="box-register">Vous êtes nouveau ici? <a href="register.php">S'inscrire</a> </p> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php } ?> </form> </body> </html>

Notez que lorsque l’utilisateur est connecté, on vérifie également: si l’utilisateur est un administrateur ou un utilisateur normal, si il est une un administrateur, il sera redirigé vers la page « admin/home.php ». Si, c’est juste un utilisateur normal, il sera redirigé vers la page « index.php ».
Créer la page index.php
Voici le code de notre fichier « index.php », où l’utilisateur est redirigé après une connexion réussie.
<?php // Initialiser la session session_start(); // Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de connexion if(!isset($_SESSION["username"])){ header("Location: login.php"); exit(); } ?> <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css" /> </head> <body> <div class="sucess"> <h1>Bienvenue <?php echo $_SESSION['username']; ?>!</h1> <p>C'est votre espace utilisateur.</p> <a href="logout.php">Déconnexion</a> </div> </body> </html>
La partie administration
Maintenant, nous allons travailler sur le dossier « admin ». Nous allons créer les fichiers (add_user.php et home.php) dans le dossier « admin ». Ces fichiers sont disponibles uniquement pour les administrateurs, ce qui signifie que seul un administrateur peut créer un autre administrateur.
Ouvrez le fichier add_user.php et collez le code suivant:
<!DOCTYPE html> <html> <head> <link rel="stylesheet" href="../style.css" /> </head> <body> <?php require('../config.php'); if (isset($_REQUEST['username'], $_REQUEST['email'], $_REQUEST['type'], $_REQUEST['password'])){ // récupérer le nom d'utilisateur $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); // récupérer l'email $email = stripslashes($_REQUEST['email']); $email = mysqli_real_escape_string($conn, $email); // récupérer le mot de passe $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); // récupérer le type (user | admin) $type = stripslashes($_REQUEST['type']); $type = mysqli_real_escape_string($conn, $type); $query = "INSERT into `users` (username, email, type, password) VALUES ('$username', '$email', '$type', '".hash('sha256', $password)."')"; $res = mysqli_query($conn, $query); if($res){ echo "<div class='sucess'> <h3>L'utilisateur a été créée avec succés.</h3> <p>Cliquez <a href='home.php'>ici</a> pour retourner à la page d'accueil</p> </div>"; } }else{ ?> <form class="box" action="" method="post"> <h1 class="box-logo box-title"> <a href="https://waytolearnx.com/">WayToLearnX.com</a> </h1> <h1 class="box-title">Add user</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur" required /> <input type="text" class="box-input" name="email" placeholder="Email" required /> <div> <select class="box-input" name="type" id="type" > <option value="" disabled selected>Type</option> <option value="admin">Admin</option> <option value="user">User</option> </select> </div> <input type="password" class="box-input" name="password" placeholder="Mot de passe" required /> <input type="submit" name="submit" value="+ Add" class="box-button" /> </form> <?php } ?> </body> </html>
La principale différence entre cette page et la page d’inscription est le champ de sélection dans la page add_user.php qui permet à l’administrateur de spécifier le type de l’utilisateur. Par conséquent, un administrateur peut créer un utilisateur normal ainsi qu’un administrateur.
Maintenant, nous allons créer le fichier « home.php »
<?php // Initialiser la session session_start(); // Vérifiez si l'utilisateur est connecté, sinon redirigez-le vers la page de connexion if(!isset($_SESSION["username"])){ header("Location: login.php"); exit(); } ?> <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="../style.css" /> </head> <body> <div class="sucess"> <h1>Bienvenue <?php echo $_SESSION['username']; ?>!</h1> <p>C'est votre espace admin.</p> <a href="add_user.php">Add user</a> | <a href="#">Update user</a> | <a href="#">Delete user</a> | <a href="../logout.php">Déconnexion</a> </ul> </div> </body> </html>
Maintenant, vous pourriez dire que si seulement un administrateur peut créer un autre administrateur, alors qui crée le premier administrateur. Eh bien, pour créer le premier administrateur, vous pouvez créer un utilisateur normal en utilisant le formulaire d’inscription, puis utiliser n’importe quel client mysql comme phpmyadmin ou l’invite de commande mysql et changer le type d’utilisateur en admin. De cette façon, vous pourrez vous connecter en tant qu’administrateur et créer d’autres administrateurs.
UPDATE users SET type = 'admin' WHERE username = 'thomas';
Aussi simple que cela, nous avons fini de construire un espace membre avec administration en PHP et MySQL.
C’est une bonne unitiative!
salut; j ai eu cette erreur la je cherche une reponse svp
Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at C:\wamp\www\registration\index.php:3) in C:\wamp\www\registration\index.php on line 5.
L’erreur ‘headers already sent‘ est une erreur très courante,il suffit de suivre les règles décrites dans ce tuto.
Tien mois au courant 😉
merci beaucoup pour m’avoir faciliter le travail
La redirection vers la page login si le membre n’est pas connecté ne fonctionne pas pour moi. Il reste sur la page index vide
Pareil pour la page connexion. je me connecte mais quand je valide je reviens sur cette même page..
Je t’invite a regarder ce commentaire.
Bon courage 🙂
Merci pour l’aide ! Mais j’ai beau chercher sur ce sujet, tous ce qui est dit est fait et rien ne change..
Bonjour très bon tuto ou est la partie modifier et supprimer un profil
Ça sera probablement dans le prochain tutoriel.
Bonjour , ça marche très bien chez moi sauf que je suis maintenant limité !
Comment je peux faire pour mon utilisateur puisse voir son profil ?
Je parle de son id , username et mail depuis son profil
Il suffit de créer une page par exemple profil.php.
récupérer username à partie de la session pour l’utiliser dans la condition du requête SQL comme suit:
Je suis content de votre aide. Comment récupérer les sessions dans plusieurs tables sql à partir de la page login.php
Vous êtes le bienvenu 🙂
En fait les sessions ne se récupèrent pas à partir de la base de données. Je vous recommande de lire ce tuto sur les sessions en PHP. C’est très intéressant.
Bonsoir , ça marche parfaitement bien chez moi sauf que je suis maintenant limité !
j’ai 5 tables sql comment peut faire sortir des informations dans chacune de mes tables pour mon utilisateur ?
Regardez ce tutoriel Afficher les données d’une table MySQL avec PHP PDO.
Bonjour, j’ai 5 tables sql et je veux stocké les éléments de ces 5 tables en session a partir de ma page login.php
Par exemple
$_SESSION[‘cours’] = $cours; qui vient de la table cours.
$_SESSION[‘credit’] = $credit; qui vient de la table cours.
$_SESSION[‘cotes’] = $cotes; qui vient de la table cote.
$_SESSION[‘matricule’] = $matricule; qui vient de la table étudiant.
$_SESSION[‘nom’] = $nom; qui vient de la table étudiant.
$_SESSION[‘faculé’] = $faculté; qui vient de la table faculte.
$_SESSION[‘promotion’] = $promotion; qui vient de la table promotion…?
C’est un peu ça que je besoin
Bonjour, je peux avoir une solution
Bonjour Moise,
Vous avez déjà la solution, il suffit de :
1- Démarrer une session session_start();
2- Récupérer les données a partir de la base de données (je vous ai déjà montré ça dans mes derniers commentaires).
3- Détruire la session session_destroy()
Bon courage 🙂