Ajouter une authentification à n’importe quelle application PHP à l’aide de MySQL

PHP est un langage de script côté serveur open source qui peut être intégré au HTML pour créer des applications Web. Il est utilisé pour développer des applications Web dynamiques et connecter l'application à une base de données.

Dans ce guide, vous apprendrez à créer un système d'authentification à l'aide de bases de données PHP et MySQL. Nous attendons de vous que vous connaissiez les bases de PHP et MySQL avant de vous lancer.

Construire la mise en page à l'aide de HTML et Bulma CSS

Le front-end de ce projet est construit en utilisant HTML et Bulma CSS . Bulma CSS est l'un des frameworks CSS les plus utilisés pour la conception de pages Web. Vous pouvez utiliser Bulma CSS en important le CSS minifié du CDN dans votre fichier PHP.

 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/css/bulma.min.css">

Intégration de la base de données MySQL

MySQL est un système de gestion de base de données relationnelle SQL utilisé pour effectuer des opérations CRUD sur les données. Cette application Web utilisera phpMyAdmin pour gérer la base de données.

phpMyAdmin est un outil logiciel gratuit écrit en PHP, destiné à gérer l'administration de MySQL sur le Web.

Vous pouvez installer phpMyAdmin en configurant un serveur WAMP sur votre machine Windows (ou XAMPP sous Linux ) et visiter l'URL suivante

 http://localhost/phpmyadmin

L'écran ressemblera à ceci :

Création de la base de données

Vous pouvez créer la base de données soit en utilisant des requêtes SQL, soit via l'interface graphique fournie par phpMyAdmin . Dans cette application, le nom de la base de données est auth et le nom de la table est également users. Les attributs de la table sont id, username, email et password.

Voici comment créer la base de données et la table à l'aide de commandes SQL :

En savoir plus : les commandes SQL les plus importantes que tout programmeur devrait connaître

 CREATE DATABASE auth;
CREATE TABLE users(
id int,
username varchar(255),
email varchar(255),
password varchar(500),
);

Connexion de l'application à la base de données

Créez un fichier nommé db.php dans votre dossier de projet, où vous connecterez votre base de données et importerez ce fichier dans d'autres fichiers PHP pour l'utiliser.

La connexion est établie à l'aide de la méthode mysqli_connect() . Cette méthode accepte quatre arguments : le nom du serveur, l'utilisateur, le mot de passe et le nom de la base de données.

Vous pouvez utiliser la variable $connection lors de l'exécution de requêtes en important le fichier db.php dans d'autres fichiers PHP.

 <?php
$connection = mysqli_connect("localhost", "root", "", "auth") ;
?>

Inscrivez-vous en utilisant PHP

La première phase de la construction d'un système d'authentification implique l'enregistrement ou l'inscription. La disposition frontale de la page d'inscription a un formulaire avec une action qui effectue une requête POST sur la page. Il comporte quatre champs de saisie : nom d'utilisateur, e-mail, mot de passe et confirmation du mot de passe.

 <form class="card m-3 p-6 m-5 container mx-auto" action="./register.php" method="POST">

<h1 class="title is-1 has-text-center">Register Here</h1>
<input class="input is-primary mt-4" type="text" name="username" placeholder="Username">
<?php if ($usernameErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$usernameErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="email" name="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$emailErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="password" name="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$passwordErrorMsg</p>" ?>

<input class="input is-primary mt-4" type="password" name="confirm-password" placeholder="Confirm Password">
<?php if ($confirmPasswordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$confirmPasswordErrorMsg</p>" ?>

<button type="submit" name="submit" class="button is-primary mt-4">Register</button>
<p class="mt-2 text-center">Already have an account ? <a href="./login.php">Login</a></p>
</form>

La méthode isset() vérifie si le bouton est cliqué ou non, car elle peut accéder au bouton Enregistrer en utilisant le superglobal $_POST[] .

Avant tout cela, vous devez importer le fichier db.php dans le fichier register.php . Il y a quelques variables déclarées pour la validation d'entrée. Découvrez le code ci-dessous.

 include "./db.php";
$error = "";
$emailErrorMsg = "";
$usernameErrorMsg = "";
$passwordErrorMsg = "";
$confirmPasswordErrorMsg = "";

Validation d'entrée sur la page d'inscription

Avant de procéder à la validation des entrées, vous devez accéder aux valeurs des éléments d'entrée à l'aide de $_POST[] .

La méthode mysqli_real_escape_string() permet de supprimer les caractères spéciaux de la chaîne car ils peuvent provoquer des actions malveillantes lors de l'exécution d'opérations de requête.

Connexe: Comment implémenter la validation de formulaire côté client avec JavaScript

 $username = mysqli_real_escape_string($connection, $_POST["username"]);
$email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
$confirmPassword = mysqli_real_escape_string($connection, $_POST["confirm-password"]);
if($username == ""){
$usernameErrorMsg = "Please enter your username";
}
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}
if($confirmPassword == ""){
$confirmPasswordErrorMsg = "Enter confirm password";
}
if(strlen($password) < 6){
$passwordErrorMsg = "Enter a password greater than 6 characters";
}else if($password!=$confirmPassword){
$confirmPasswordErrorMsg = "Password and Confirm Password field should be same";
}

Tout d'abord, vous vérifiez si les champs sont vides ou non. Pour le champ de saisie de l'e-mail, vous devez vérifier si l'utilisateur a saisi un e-mail valide ou non à l'aide de la méthode filter_var() . La longueur du champ de mot de passe doit être supérieure à 6. Ce sont les validations de base dont vous devez vous occuper lors de la création d'une application.

S'il n'y a pas d'erreurs, vous pouvez continuer à exécuter des commandes de requête sur le fichier register.php .

 if($error == "" && $emailErrorMsg == "" && $passwordErrorMsg == "" && $confirmPasswordErrorMsg == ""){
$query = "SELECT * FROM auth WHERE email = '$email'";
$findUser = mysqli_query($connection, $query);
$resultantUser = mysqli_fetch_assoc($findUser);

if($resultantUser){
$error = "User already exists";
}
$password = md5($password);
$query = "INSERT INTO auth (username, email, password) VALUES('$username', '$email', '$password')";
$insertUser = mysqli_query($connection, $query);

$_SESSION['username'] = $username;
$_SESSION['email'] = $email;
header("location: home.php");
}

Vous devez exécuter une requête qui vérifie si l'e-mail existe déjà dans la base de données ou non. La méthode mysqli_query() est utilisée pour effectuer toutes les opérations de requête. Vous devez passer le résultat de la requête dans la méthode mysqli_query_assoc() . Cette méthode convertit le résultat en un tableau associatif de chaînes.

Si l'utilisateur existe déjà, vous devez afficher une erreur avec le message : L'utilisateur existe déjà. Sinon, vous devez insérer les champs dans la base de données. Comme ce n'est pas une bonne pratique de stocker les chaînes de mot de passe en clair, la méthode md5() convertira le mot de passe en un hachage, puis l'enregistrera.

Une fois l'utilisateur enregistré dans la base de données, vous devez charger le nom d'utilisateur ou l'e-mail dans le superglobal $_SESSION[] et rediriger l'utilisateur vers la page d'accueil.

Un regard sur l'écran d'accueil

L'utilisateur ne peut accéder à la page d'accueil que s'il est connecté. Sur la page d'accueil, vous devez vérifier si la SESSION existe ou non. Si aucune SESSION n'est définie, vous devez rediriger l'utilisateur vers la page de connexion.

Se connecter avec PHP

Dans cette application, l'utilisateur se connectera à l'aide d'un e-mail et d'un mot de passe. La mise en page HTML pour login.php :

 <form class="card m-3 p-6 m-5 container mx-auto" action="./login.php" method="POST">
<h1 class="title is-1 has-text-center has-text-black">Login Here</h1>
<?php if ($error != "") echo " <div class='button is-danger is-light'>$error</div>" ?>
<input class="input is-primary mt-4" name="email" type="email" placeholder="Email">
<?php if ($emailErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$emailErrorMsg</p>" ?>

<input class="input is-primary mt-4" name="password" type="password" placeholder="Password">
<?php if ($passwordErrorMsg != "") echo "<p class='is-size-6 is-danger is-light has-text-danger'>$passwordErrorMsg</p>" ?>
<button class="button is-primary mt-4" type="submit" name="submit">Login</button>
<p>Don't have an account? <a href="./register.php">Register here</a></p>
</form>

Authentification de l'utilisateur

Vous devez valider les entrées de la même manière que lors de l'enregistrement de l'utilisateur.

 $email = mysqli_real_escape_string($connection, $_POST["email"]);
$password = mysqli_real_escape_string($connection, $_POST["password"]);
if($email == ""){
$emailErrorMsg = "Please enter the email";
}else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailErrorMsg = "Please enter a valid email";
}
if($password == ""){
$passwordErrorMsg = "Enter your password";
}

Une fois qu'il n'y a plus d'erreurs de validation, les valeurs des champs de saisie seront exécutées dans la requête SQL. Pour obtenir la valeur hachée du mot de passe, passez le mot de passe dans la méthode md5() .

 if($emailErrorMsg == "" && $passwordErrorMsg == ""){
$password = md5($password);
$query = "SELECT * FROM users WHERE email = '$email' AND password='$password'";
$find_user = mysqli_query($connection, $query);
if(mysqli_num_rows($find_user) == 1){
$_SESSION["email"] = $email;
while($row = mysqli_fetch_assoc($find_user)){
$_SESSION["username"] = $row["username"];
}

header("location:home.php");
}else{
$error = "Invalid credentials";
}
}

Après avoir récupéré le mot de passe haché, transmettez l'e-mail et le mot de passe haché dans la requête SQL et exécutez-la à l'aide de la méthode mysqli_query() .

A l'obtention du résultat, il faut le passer dans la méthode mysqli_num_rows() . Si la méthode mysqli_num_rows() renvoie la valeur 1, alors vous pouvez authentifier l'utilisateur.

Stockez l'e-mail et le nom d'utilisateur dans $_SESSION[] et redirigez l'utilisateur vers la page d'accueil.

Déconnecter l'utilisateur

L'authentification de l'utilisateur se fait à l'aide du superglobal $_SESSION[] . Pour déconnecter l'utilisateur, vous devez détruire la SESSION et rediriger l'utilisateur vers login.php .

 session_start();
$_SESSION = array();
session_destroy();
header("Location: login.php");
exit;

Un système d'authentification sécurisé est important

Vous avez déjà appris à ajouter un système d'authentification en utilisant PHP et MySQL. Vous pouvez faire passer ce projet au niveau supérieur en y ajoutant des fonctionnalités plus avancées ou bien intégrer ce système dans un projet à grande échelle comme une application de médias sociaux, une page de blog ou tout autre projet majeur. Continuez à apprendre et à créer de nouvelles choses autant que vous le pouvez.

Vous voulez en savoir plus sur PHP ? Il existe de nombreuses manipulations que vous pouvez faire avec le bon savoir-faire PHP.