TD 5 : PHP - Fonctions & Gestion d'accès
Prérequis : TD HTML + TD CSS + TD PHP/MySQL 1 & 2
Objectif : Amélioration du site :
- Création de fonctions PHP pouvant être réutilisées
- Insertion de fonctions PHP particulières (date)
- Gestion des variables de SESSION pour la restriction d'accès à certaines pages du site.
1. Création d'une boite à outils (fichier "outils.php")
Afin d'optimiser le code source produit et d'éviter ainsi de répéter des lignes identiques dans tous les fichiers (la connexion à la base de données, l'affichage du menu, l'affichage du pied de page, ...), nous allons créer une boite à outils servant de bibliothèque de fonctions pouvant être utilisée dans tous les fichiers du site.
- A l'aide de l'éditeur, créer le fichier outils.php dans le répertoire pages
- Dans ce fichier, créer la fonction cnxDB() dans laquelle vous mettez le code permettant la connexion à la base de données et le test si la connexion n'a pas réussie. Cette fonction retournera l'identifiant de connexion par le mot clé return
- Dans ce fichier, créer la fonction afficheFooter() dont le rôle est d'afficher un pied de page identique sur toutes les pages. Cette fonction affichera :
- une ligne horizontale de 80% de large
- le mot HEI en lien avec le site de l'école
- la date du jour (aidez-vous de l'annexe PHP qui vous montre comment inclure le code permettant d'afficher la date)
- Dans ce fichier, créer une fonction afficheMenu() qui permet d'afficher le menu commun à toutes les pages du site
2. Standardisation des pages du site
(utilisation de la bibliothèque de fonctions PHP)
Après avoir créé la bibliothèque de fonctions, nous allons maintenant modifier chacune des pages du site pour que celles-ci utilisent les fonctions créées.
Etant donnée que toutes les pages vont maintenant contenir du code PHP, il est nécessaire de renommer toutes les pages statiques HTML (.html) en pages dynamiques PHP (.php)
- Renommer toutes les pages statiques HTML (.html) en pages dynamiques PHP (.php)
- Dans chacune des pages, inclure un appel au fichier "outils.php" en utilisant la fonction include() ou require() : Cherchez la différence de ces deux fonctions sur Internet !
- Dans chacune des pages PHP du site où se trouve une connexion à la base de données, remplacer les lignes permettant de faire la connexion par la fonction créée cnxDB()
- Mettre également un pied de page identique sur chaque page du site en faisant appel à la fonction afficheFooter()
- Enlever le code HTML concernant le menu de chaque page créée; ajouter à la place un appel à la fonction PHP afficheMenu().
- Ne pas oublier de renommer les liens correspondants (.html en .php)
- Tester le site
3. Gestion des droits d'accès
On doit faire en sorte que l'accès à la rubrique "ajouter une annonce" ou "supprimer une annonce" doit être réservé uniquement aux personnes authentifiées.
Il faut alors créer un formulaire permettant à un utilisateur de s'authentifier (login + mot de passe)
La gestion de l'authentification se fera par l'utilisation des variables de sessions en PHP.
Il faudra également protéger les pages "réservées" en vérifiant l'existence de variables de sessions suite à l'authentification
- Créer, à l'aide du fichier modele.php, un fichier "formulaire.php" avec les 2 champs nécessaires à l'authentification (login + mot de passe)
- Créer, à l'aide du fichier modele.php, un fichier "authentification.php" qui récupère les valeurs postées (méthode POST) par le formulaire pour vérifier les droits d'accès. On mettra "en dur" le login et mot de passe dans ce fichier. Par facilité, on prendra pour login et mot de passe le mot "hei"
- Ne pas oublier de mettre la fonction nécessaire permettant de gérer les sessions dans le fichier "authentification.php"
- Si l'authentification est réussie, créer les variables suivantes :
$_SESSION["auth"] = 1 et $_SESSION["nom"] = "HEI"
- Si l'authentification a échoué, créer les variables suivantes :
$_SESSION["auth"] = 0 et $_SESSION["nom"] = "inconnu"
<?php
// Démarre une nouvelle session ou reprend une session existante
session_start();
// recuperation des valeurs du formulaire d'authentifcation
$login = $_POST["login"] ;
$mdp = $_POST["mdp"] ;
// test
if ($login == "hei" && $mdp == "hei" )
{
// authentification réussie
// création des variables de sessions
// auth et nom avec les "bonnes valeurs"
$_SESSION["auth"] = 1 ;
$_SESSION["nom"] = "HEI" ;
}
else
{
// echec à l'authentification
// création des variables de sessions
// auth et nom avec les "mauvaises valeurs"
$_SESSION["auth"] = 0 ;
$_SESSION["nom"] = "" ;
}
// bibliothèque
require('outils.php') ;
?>
- Sur toutes les pages sensibles, vérifier l'existence de la variable de session $_SESSION["auth"] et de sa valeur ; si ce n'est pas le cas, faites un appel automatique à "formulaire.php" avec la fonction PHP header
<?php
// Démarre une nouvelle session ou reprend une session existante
session_start();
// test d'existence de la variable de session auth
if ( !isset($_SESSION["auth"]) || $_SESSION["auth"] == 0 )
{
// redirection
header("location:formulaire.php");
}
// bibliothèque
require('outils.php') ;
?>
- Créer dans le menu un bouton de libellé "Connexion" et un bouton de libellé "Déconnexion".
- Faire en sorte que le "bon" bouton apparaisse dans le menu suivant le cas (authentification pas encore faite ou authentification réussie)
- Le bouton "Connexion" permettra à l'utilisateur de faire apparaitre le formulaire d'authentification
- Le bouton "Déconnexion" amènera l'utilisateur sur une page (à créer) l'informant qu'il n'est plus authentifié (le bouton "Connexion" devra réapparaitre dans le menu). Utiliser les fonctions PHP permettant de tuer les variables de session et la session
<?php
// Démarre une nouvelle session ou reprend une session existante
session_start();
// destruction des variables de session
unset($_SESSION["auth"]);
unset($_SESSION["nom"]);
// destruction de la session
session_destroy();
// bibliothèque
require('outils.php') ;
?>