Easy-Micro

ESPACEMEMBRE PHP-MySQL
Un accès privé

Réaliser un accès privé

Bibliothèque PDO

Exemple recommandé qui implique la création d'une table clients avec id_clients, civilite_clients nom_clients, prenom_clients ... email_clients et mdp_clients. Ne pas oublier d'utiliser une fonction de cryptage (hachage cryptographique) comme MD5(), SHA1() côté SQL, ou crypt() ou password_hash() côté PHP, lors de la création des mots de passe dans la base. Et attention, ces fonctions génèrent un code d'une soixantaine de signes: donnez-lui donc un type VARCHAR d'au moins 100 caractères.

Pour tester cet exemple, créez un formulaire avec un champ 'email", un champ 'mdp' et un bouton submit. Si les champs existent dans la base, on redirige vers une page de bienvenue, sinon retour au formulaire connexion.php

Le fichier "traitement_connexion.php" (appelé par le formulaire connexion.php)
<?php

// Les deux champs email_clients et mdp_clients sont dans la table clients
if(isset($_POST['mdp'])) { $mdp = $_POST['mdp'];}
if(isset($_POST['email'])) { $email = $_POST['email'];}

// la variable $bdd est dans le fichier login.php
require('public/config/login.php');

$requete = 'SELECT * FROM '.$table.' WHERE email_clients = "'.$email.'" AND mdp_clients = SHA1("'.$mdp.'")';

$resultat = $bdd -> prepare($requete);
$resultat -> execute();
$ligne = $resultat -> fetch();

if($ligne) {
    $_SESSION['login'] = $ligne['prenom_clients'].' '.$ligne['nom_clients'];

    // la page bienvenue fait un echo 'Bonjour '.$_SESSION['login'];
    echo '<script>window.document.location="index.php?page=public/equipe/bienvenue.php";</script>';
}
else {
    echo '<script>window.document.location="index.php?page=public/contact/connexion.php";</script>';
}
?>

Hachage cryptographique en PHP

Exemple avec la fonction recommandée PHP password_hash()
<?php
echo password_hash($pass, PASSWORD_BCRYPT);
?>
PASSWORD_BCRYPT : Utilisation de l'algorithme CRYPT_BLOWFISH pour créer la clé de hachage (sinon PASSWORD_DEFAULT)

Exemple avec la fonction PHP crypt()
<?php
echo crypt($pass, '$2a$07$'.md5($pass).'$');
?>
Le $2a$ ... $ indique qu'on utilise le blowfish. Le chiffre qui se trouve après $2a$ (07 dans ce cas) est en quelque sorte le temps de cryptage du mot de passe. Plus ce chiffre est haut, plus il met du temps à générer le hash.

Bibliothèque Mysqli

Exemple aujourd'hui déconseillé qui implique la création d'une table "utilisateurs" avec 3 champs (id, login et mdp). Ne pas oublier de sélectionner la fonction PASSWORD lors de la création des mots de passe dans la base. Et attention, cette fonction PASSWORD génère un code d'une quarantaine de signe: donnez-lui donc un type VARCHAR d'au moins 50 caractères.

Pour tester cet exemple, créez un formulaire avec un champ 'login", un champ 'mdp' et un bouton submit. Si les champs existent dans la base, on redirige vers une page de bienvenue, sinon retour au formulaire.

Le fichier "traitement_login.php"
<?php
// le contenu du formulaire est vérifié en ammont avec du javascript
 
// Récupération du contenu des champs et affectation à la variable login
if(isset($_POST['login']) && !empty($_POST['login'])) { $login = $_POST['login'];}
if(isset($_POST['mdp'])) { $mdp = $_POST['mdp'];}
 
// Récupération des variables d'identification:
require("config.php");
 
// Connexion au serveur MYSQL
$connexion = mysql_connect($serveur,$user,$pass) or die("Pas de connexion: ".mysql_error());
mysql_select_db($base); // sélection de la base

if($login && $mdp) {
// Requête qui vérifie si l'email - le login - et le mot de passe sont dans la table
// Attention, MySQL respecte la casse
 
// Ne pas oublier de sélectionner la fonction PASSWORD lors de la création des mots de passe dans la base.
$requete = "SELECT * FROM utilisateurs WHERE login='".$login."' AND mdp = PASSWORD('".$mdp."')";
 
$resultat = mysql_query($requete);
 
// "mysql_fetch_assoc" lit une ligne de résultat et retourne un tableau, cette fonction renvoie uniquement
// le contenu des champs avec le nom de la colonne (pas le numéro d'indice, voir "mysql_fetch_array")
// On aurait pu utiliser ici un  if (mysql_num_rows($resultat) > 0) {... 
$verif = mysql_fetch_assoc($resultat);
 

 
// Si le résultat n'est pas vide
if($verif != "") {
 
// Redirection vers la page de bienvenue (bienvenue.php)
header("Location: bienvenue.php");

}
 
// Sinon, redirection vers le formulaire (index.php)
else { header("Location: index.php");

}
}
// Fermeture de la connexion MySQL (facultatif)
mysql_close($connexion);
?>

Note: Ne pas oublier de sélectionner la fonction PASSWORD lors de la création des mots de passe dans la base.


< Page précédente PHP-MYSQL Page suivante >