Créer une page de membres en php protégée par un nom d'utilisateur et un mot de passe

Créer une page de membres en php protégée par un nom d'utilisateur et un mot de passe

2019-05-10 Niveau: Avancé

Pour commencer nous allons avoir besoin d'une base de données pour stocker nos utilisateurs qui auront accès à la page des membres.

 

*Pour les besoins nous allons garder ça le plus simple possible.

 

1. Créer une base de données.

Donc en MySQL, vous devez avoir une base de données et dans l'onglet SQL de phpMyAdmin par example vous copier/coller ceci

CREATE TABLE utilisateurs
(
utilisateurs_ID int NOT NULL AUTO_INCREMENT,
courriel varchar(150) NOT NULL,
utilisateur varchar(75) NOT NULL,
motDePasse varchar(250) NOT NULL,
PRIMARY KEY (`utilisateurs_ID)
)

 

2. Créer le fichier de connection db_connect.inc.php

Et à l'intérieur de ce fichier coller ce code :

<?php
$conn=mysqli_connect("localhost","votre_utilisateur","votre_mot de passe","Le nom de votre base de données");
if (mysqli_connect_errno()) {
	echo "Failed to connect:" . mysqli_connect_error();
}

mysqli_set_charset($conn, 'utf8');

?>

 

J'explique :

Premièrement on ouvre le code Php:

<?php

 

On se connecte à la base de données, si ça fonctionne pas on affiche l'erreur:

$conn=mysqli_connect("localhost","votre_utilisateur","votre_mot de passe","Le nom de votre base de données");
if (mysqli_connect_errno()) {
	echo "Erreur:" . mysqli_connect_error();
}

 

On définie le jeu de caractères du client par défaut

mysqli_set_charset($conn, 'utf8');

 

 

 

3. Créer la page index.php

Ensuite on va créer une page avec un formulaire pour ajouter des utilisateurs à cette base de données (les utilisateurs qui auront accès à la page des membres).

formulaire inscription

Voici le code de la page index.php sans aucun style ni aucune validation du formulaire, je vous explique le code ensuite:

<?php
require_once ('db_connect.inc.php');

if(isset($_POST['submited'])){

  $utilisateur = mysqli_real_escape_string($conn,$_POST['utilisateur']);
  $courriel = mysqli_real_escape_string($conn,$_POST['courriel']);
  $motdepasse = mysqli_real_escape_string($conn,$_POST['motdepasse']);

  $passwordhashed = password_hash($motdepasse, PASSWORD_BCRYPT);

  $result = mysqli_query($conn,"SELECT utilisateur, motDePasse, courriel FROM utilisateurs WHERE courriel ='".$courriel."'" )
  or die("SELECT Error: ".mysqli_error($conn));
  $num_rows = mysqli_num_rows($result);
    if ($num_rows != "0") {

      echo "Cet usager existe déjà.";

    } else {

      $sql = "INSERT INTO utilisateurs (utilisateur,courriel, motDePasse)
           VALUES
           ('".$utilisateur."','".$courriel."','".$passwordhashed."')";
      if (!mysqli_query($conn,$sql))
           {die('Error: ' . mysqli_error($conn));}
    }
}
?>
<!DOCTYPE html>
<html>

                          <form id="signUpForm" method="post">

                              <input type="text" id="courriel" name="courriel" placeholder="Courriel" maxlength="150">

                              <input type="text" id="utilisateur" name="utilisateur" placeholder="Nom d'utilisateur" maxlength="75">

                                <input type="password" id="motdepasse" name="motdepasse" placeholder="Mot de passe" maxlength="150">

                                <button type="submit" name="submited" id="submited">ENREGISTRER</button>

                            </form>                         

</html>

 

On se connecte à la base de données en incluant le fichier créé plus haut (assurez-vous qu'il soit dans le même répertoire que votre index.php:

require_once ('db_connect.inc.php');

 

Si on clique sur le bouton "submited"

if(isset($_POST['submited'])){

 

On déclare nos variables qui proviennent du "post" du formulaire,

$utilisateur = mysqli_real_escape_string($conn,$_POST['utilisateur']);
$courriel = mysqli_real_escape_string($conn,$_POST['courriel']);
$motdepasse = mysqli_real_escape_string($conn,$_POST['motdepasse']);

mysqli_real_escape_string = Retourne une chaîne échappée, bref previent les injections SQL.

$conn = Réfère à notre connection à la base de données.

$_POST = Le post du formulaire avec le nom du champ ex: ['utilisateur']

 

Ici nous allons encrypter notre mot de passe pour le stocker dans la BD au cas ou un comique aurait accès à la BD au moins il n'aura pas de mots de passe.

$passwordhashed = password_hash($motdepasseregister, PASSWORD_BCRYPT);

 

On va faire une petite recherche dans la BD pour voir si le courriel existe déjà :

$result = mysqli_query($conn,"SELECT utilisateur, motDePasse, courriel FROM utilisateurs WHERE courriel ='".$courriel."'" )
or die("SELECT Error: ".mysqli_error($conn));
$num_rows = mysqli_num_rows($result);

 

Si $num_rows (lui il compte les résultats de la requête) n'est pas équal à 0, alors on envoie un message disant que cet usager existe déjà:

if ($num_rows != "0") {

      echo "Cet usager existe déjà.";

    }

 

Si on trouve rien alors on ajoute le tout dans la BD:

else {

      $sql = "INSERT INTO utilisateurs (utilisateur,courriel, motDePasse)
           VALUES
           ('".$utilisateur."','".$courriel."','".$passwordhashed."')";
      if (!mysqli_query($conn,$sql))
           {die('Error: ' . mysqli_error($conn));}


    }

 

Ensuite il y a le formulaire qui se passe de commentaire.

<!DOCTYPE html>
<html>

                          <form id="signUpForm" method="post">

                              <input type="text" id="courriel" name="courriel" placeholder="Courriel" maxlength="150">

                              <input type="text" id="utilisateur" name="utilisateur" placeholder="Nom d'utilisateur" maxlength="75">

                                <input type="password" id="motdepasse" name="motdepasse" placeholder="Mot de passe" maxlength="150">

                                <button type="submit" name="submited" id="submited">ENREGISTRER</button>

                            </form>                         

</html>

 

Donc pour l'instant nous avons notre base de données , notre fichier de connection, notre formulaire et nous pouvons ajouter des utilisateurs.

 

4. Créer la page membres.php

<?php
session_start();
if( !isset( $_SESSION['user']) ){
	header('Location:index.php');
	}
?>

Ceci est ma page des membres super secrete!

 

Je vous explique la page des membres qui est plutôt simple.

 

On démarre une session (qu'on va créer dans la page de "connection" lorsqu'on se connecte).

session_start();

 

On vérifie si la session au nom de "user" est bien ouverte et si non alors on redirige vers index.php (donc ça force l'usager à se connecter pour accèder à cette page)

if( !isset( $_SESSION['user']) )
{header('Location:index.php')
;}

 

5. Créer la page connection.php

Maintenant nous allons créer la page de connection pour vérifier si l'usager et le mot de passe sont valident et si oui nous diriger vers membres.php.

<?php
session_start();
require_once ('db_connect.inc.php');

if(isset($_POST['submited'])){
        $courriel = mysqli_real_escape_string($conn,$_POST['courriel']);
        $motdepasse = mysqli_real_escape_string($conn,$_POST['motdepasse']);
        $passwordhashed = password_hash($motdepasse, PASSWORD_BCRYPT);


        $result = mysqli_query($conn,"SELECT * FROM utilisateurs WHERE courriel ='".$courriel."'" )
        or die("SELECT Error: ".mysqli_error($conn));
        while($rows=mysqli_fetch_array($result)) {

            $passwordhashed = $rows['motDePasse'];

            if(password_verify($motdepasse, $passwordhashed)) {

              $_SESSION['user'] = $courriel;
              header('Location:membres.php');

            } else {
            echo "Le mot de passe est incorrect.";

          }
        }
}
?>

<!DOCTYPE html>
<html>

                          <form id="signUpForm" method="post">

                              <input type="text" id="courriel" name="courriel" class="form-control" placeholder="Courriel" maxlength="150">

                                <input type="password" id="motdepasse" name="motdepasse" class="form-control" placeholder="Mot de passe" maxlength="150">

                                <button type="submit" name="submited" id="submited" class="btn btn-info btn-block z-depth-1">Soumettre</button>

                            </form>


</html>

 

Je vous explique le code :

 

On démarre la session et on inclut notre fichier db_connect.inc.php

session_start();
require_once ('db_connect.inc.php');

 

Si on clique sur le bouton "submitted"

if(isset($_POST['submited'])){

 

On déclare nos variables encore une fois et on encrypt le mot de passe entré pour pouvoir le comparer avec celui dans la base de données.

$courriel = mysqli_real_escape_string($conn,$_POST['courriel']);
$motdepasse = mysqli_real_escape_string($conn,$_POST['motdepasse']);
 
$passwordhashed = password_hash($motdepasse, PASSWORD_BCRYPT);

 

On cherche dans la base de données si le courriel existe.

 $result = mysqli_query($conn,"SELECT * FROM utilisateurs WHERE courriel ='".$courriel."'" )
        or die("SELECT Error: ".mysqli_error($conn));

 

Si on trouve le courriel alors on crée une variable $passwordhashed avec se qu'il y a dans la ligne MotDePasse.

while($rows=mysqli_fetch_array($result)) {

            $passwordhashed = $rows['motDePasse'];

 

On compare le mot de passe entré $motdepasse à celui dans la BD $passwordhashed, si ils sont pareils alors on ouvre la session "user" en lui ajoutant le courriel dedans et on redirige vers la page des membres.

 if(password_verify($motdepasse, $passwordhashed)) {

              $_SESSION['user'] = $courriel;
              header('Location:membres.php');

            }

 

Si les mots de passe sont pas identiques alors on envoie un message.

else {
            echo "Le mot de passe est incorrect.";

          }

 

Donc voilà assez facile non ? bien sur on va mettre du style à notre formulaire et une validation en JQuery et/ou PHP.

Vous pouvez maintenant créer et protéger une page des membres en PHP.

 

 


Laissez nous un commentaire