Nadine Couture 2000 – 2002 · Fabrice Depaulis 2003 – 2004 · Guillaume Rivière 2005 – 2017

Le logo de la CCI Bayonne Pays Basque

Informatisation du Système d'Information

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

Figure 1.1.1 : Environnement WAMP.
  1. Pour lancer les serveurs sur votre ordinateur portable, allez dans le menu Windows et écrivez "wamp" pour retrouver WampServer64.
  2. 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.
  3. 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.
L'icône W est rouge lorsque les serveurs sont éteints     L'icône W est verte lorsque les serveurs sont allumés
Figure 1.1.2 : L'icône W est rouge lorsque les serveurs sont éteints. L'icône W est verte lorsque les serveurs sont allumés.
Question 1.2 : "Hello World"
  1. 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
  2. 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 somme 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 ?

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
  1. 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ée bienvenue.php, que nous construirons plus tard.
    Figure 2.1.1 : La page de formulaire avec un champ de saisie de l'identifiant.
  2. 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 page login.html.
  3. Testez l'enchaînement entre la page login.html et le script bienvenue.php.
Question 2.2 : Traitement
  1. Modifiez le formulaire de la page login.html en ajoutant un champ de type "password".
    Figure 2.2.1 : La page de formulaire avec un nouveau champ de saisie pour le mot de passe.
  2. Modifiez également le script bienvenue.php de façon à ce que la page affiche un message d'erreur, et un lien de retour vers login.html, si le mot de passe saisi est différent de jimjarmush128, et continue à afficher "Bienvenue ..." sinon.
    Figure 2.2.2 : La page affiche un message en cas d'échec.
    Figure 2.2.3 : La page affiche un autre message en cas de réussite.
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:
nadine:12fds4:
guillaume:cbr954:
alex:DR12ze:
  1. Créez le fichier passwd.txt
  2. 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.
  3. 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 fichier passwd.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 »).

  1. Modifiez le script du fichier bienvenue.php afin qu'à chaque appel, il ajoute à un fichier log.txt les informations relatives à la tentative de connexion. Remarques :
    • Le mode d'ouverture "a+" de la fonction fopen() permet d'ouvrir un fichier en mode écriture tout en positionnant le curseur à la fin du fichier.
    • La fonction fputs() permet d'écrire dans un fichier.
    • La fonction date() permet de récupérer la date et l'heure.
  2. 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 vaudra TRUE pour signaler la réussite de connexion et FALSE pour signaler un échec, et fera l'ouverture et les écritures nécessaires dans le fichier log.txt.