TP4 : Recueil, Traitement, et Restitution d'Information
BUTS PÉDAGOGIQUES
- Génération de pages web avec PHP
- Création d'un formulaire HTML
- Récupération des données et traitement par un script PHP
Ce TP propose de mettre en application le recueil et le traitement d'information à partir de la mise en place d'un formulaire d'authentification.
Exercice 1 • Première page web PHP (30 min)
Question 1.1 : L'environnement : démarrer le serveur web
Rappel : pour générer des pages web avec des scripts PHP, nous avons besoin : d'un serveur HTTP, d'un interpréteur PHP et d'un client HTTP. Ces trois éléments peuvent être installés sur des machines différentes (c'est d'ordinaire le cas, au moins pour le client), mais ils peuvent également se trouver sur un seul ordinateur. Dans le cadre de cette série de TP, nous utiliserons un paquetage (WAMP) qui comprend le serveur web Apache et un interpréteur PHP.
WAMP = Windows · Apache · MySQL · PHP
- Pour lancer les serveurs sur votre ordinateur portable, allez dans le menu Windows et écrivez "wamp" pour retrouver WampServer64.
- Une fois cette opération réalisée, une icône blanche doit apparaître en bas à droite de l'écran. Quand le sigle "W" est vert, cela signifie que les serveurs sont en route.
- En cas de problème de démarrage du serveur (le sigle reste orange ou rouge), vérifiez qu'aucun programme utilisant le réseau (p. ex. Skype, Tchat, Jeu vidéo, Streaming …) n'est démarré sur votre machine. Puis, faîtes un clic gauche sur le sigle "W" et cliquez sur Restart All Services.
Question 1.2 : "Hello World"
- Créer un fichier nommé
helloworld.html
- Attention, vous devez l'enregistrer dans le répertoire racine du serveur http
C:\wamp\www
- Éditez-le (avec BlocNote ou NotePad++ par exemple) pour qu'il représente une page Web affichant simplement un titre de niveau 1 "Hello World".
- Ouvrez-le dans un navigateur web en saisissant l'URL suivante :
http://127.0.0.1/helloworld.html
- Attention, vous devez l'enregistrer dans le répertoire racine du serveur http
- Modifiez l'extension du fichier pour le nommer
helloworld.php
, puis :- Ajoutez un bloc de code PHP qui déclarera les trois variables ci-dessous et affichera le contenu de la troisième en dessous du message "Hello World" :
$aujourdhui = date('d-m-Y') ;
$maintenant = date('H:i:s') ;
$phrase = '<p>Bonjour, nous sommes le '.$aujourdhui.' et il est '.$maintenant.'</p>' ; - Ouvrez-le dans un navigateur web en saisissant l'URL suivante :
http://127.0.0.1/helloworld.php
- Faîtes un clic droit sur la page et dans le menu choisissez, selon le navigateur utilisé, "Afficher la source", "Code source de la page" ou encore "Code source". Que constatez-vous ?
- Ajoutez un bloc de code PHP qui déclarera les trois variables ci-dessous et affichera le contenu de la troisième en dessous du message "Hello World" :
Exercice 2 • Accès sécurisé par formulaire (1 h 30 min)
Nous souhaitons restreindre l'accès de certaines pages à certains utilisateurs, authentifiés par mot de passe. Cette série de questions va vous amener en plusieurs étapes à réaliser un script PHP permettant de remplir cette fonction.
Dans l'entreprise, le SI est utilisé par de nombre de personnes. Toutes n'ont pas le droit d'accéder à, ou de modifier, certaines informations. Par exemple, les données comptables n'intéressent que les dirigeants et leurs agents financiers. Ou encore, les fichiers des clients ne doivent pas être à disposition d'un individu extérieur à l'entreprise.
Il faut savoir contrôler et gérer l'accès à l'information.
Pour cela nous mettons en place une authentification par nom d'utilisateur et mot de passe. La liste des utilisateurs autorisés est stockée dans un fichier. Toutes les connexions au SI, et tentatives de connexion, sont enregistrées dans un fichier de log (c.-à-d. un fichier journal ou encore fichier de traces).
Question 2.1 : Saisie et Restitution
- Créez une page HTML nommée
login.html
comportant un formulaire. Celui-ci comprend un champ "text" permettant à un utilisateur de saisir son "login", et un bouton de type "submit" permettant de valider les informations. Ce formulaire doit appeler la page PHP nomméebienvenue.php
, que nous construirons plus tard. - Créez un fichier nommé
bienvenue.php
. Celui-ci représente une page Web qui affiche le message "Bienvenue XXXX", où XXXX est la valeur saisie par un utilisateur dans le formulaire de la pagelogin.html
. - Testez l'enchaînement entre la page
login.html
et le scriptbienvenue.php
.
Question 2.2 : Traitement
- Modifiez le formulaire de la page
login.html
en ajoutant un champ de type "password".
- Modifiez également le script
bienvenue.php
de façon à ce que la page affiche un message d'erreur, et un lien de retour verslogin.html
, si le mot de passe saisi est différent dejimjarmush128
, et continue à afficher "Bienvenue ..." sinon.
Question 2.3 : Récupération d'informations par lecture d'un fichier
Nous souhaitons désormais stocker des mots de passe différents pour plusieurs utilisateurs. Pour cela, nous allons utiliser un fichier passwd.txt
contenant les logins et mots de passe de tous les utilisateurs : chaque ligne contient un login et un mot de passe séparés par deux points ":". Chaque fin de ligne contient le caractère ":".
Par exemple :
passwd.txt |
fabrice:jim342: |
- Créez le fichier
passwd.txt
- Modifiez le script du fichier
bienvenue.php
afin qu'il réalise l'authentification d'un utilisateur grâce à ce fichier.- Le but est donc de regarder si le login de l'utilisateur est présent dans le fichier
passwd.txt
- Vous aurez besoin de lire le fichier ligne par ligne, et d'analyser chaque ligne avec la fonction
explode()
pour vérifier si le login est celui recherché. (Pour ce travail, inspirez-vous de la correction du TP précédent). - Remarque : il se peut que le login demandé n'existe pas dans le fichier ! Il faudra donc gérer le cas où la fin de fichier est atteinte sans avoir trouvé le login dans le fichier.
- Le but est donc de regarder si le login de l'utilisateur est présent dans le fichier
- Pour faire les choses proprement, modifiez votre code de manière à ce que la recherche du login dans le fichier soit effectuée par la fonction suivante (que vous allez créer) :
function getPasswd ($login) {
...
}
Cette fonction recevra en paramètre une chaîne de caractères représentant le login de l'utilisateur recherché, fera la recherche du login dans le fichierpasswd.txt
, et retournera comme résultat le mot de passe associé à $login ou bien une chaîne vide dans le cas où le login de l'utilisateur recherché n'est pas présent dans le fichier.
Question 2.4 : Stockage d'information par écriture d'un fichier
À chaque connexion ou tentative ratée de connexion, nous souhaitons enregistrer : le login, la date et l'heure, ainsi que le statut (réussie ou échouée) dans un fichier journal (aussi appelé fichier de « log »).
- Modifiez le script du fichier
bienvenue.php
afin qu'à chaque appel, il ajoute à un fichierlog.txt
les informations relatives à la tentative de connexion. Remarques : - Pour faire les choses proprement, modifiez votre code de manière à ce que l'écriture dans le fichier journal soit effectuée par la fonction suivante (que vous devez créer) :
function addLog ($login, $reussie) {
...
}
Cette fonction recevra en paramètre une chaîne de caractères $login, représentant le login de l'utilisateur qui tente de se connecter, et un booléen $reussie, qui vaudraTRUE
pour signaler la réussite de connexion etFALSE
pour signaler un échec, et fera l'ouverture et les écritures nécessaires dans le fichierlog.txt
.