Formation à PHP - TP1
Licence Professionnelle, Université Lyon 1, Bourg-en-Bresse
Le but de ce TP est de se familiariser avec le langage PHP, de présenter les instructions de base (structure de contrôle, manipulation de fichier) et d'étudier l'interaction PHP-HTML.
On se reportera en cas de besoin à la documentation officielle de PHP. Les transparents du cours sont également disponibles.
On utilisera de préférence un navigateur de type Netscape ou Mozilla pour tester les différents scripts. En effet, les navigateurs de type Internet Explorer, en cas de rappel de page, délivrent souvent une version cached, masquant ainsi une éventuelle modification de script.
Un compte-rendu au format HTML est demandé individuellement pour chaque étudiant. Il comportera des extraits pertinents de code PHP, ainsi que des commentaires sur ce code (validité, limitation, améliorations, etc...)
Activité 1 - Premiers pas
- Afin de vérifier que Apache et PHP sont correctement installés et configurés sur votre machine, écrire un script PHP, inclus dans une page HTML, qui affiche "Hello World!". Appeler ce script par un browser et vérifier qu'il s'exécute correctement.
- Pour l'instant, PHP ne nous aide pas particulièrement: il aurait été plus rapide d'afficher directement le texte "Hello World" en HTML.
Ecrire maintenant un script PHP qui affiche la date du jour (jour, mois, année). A quel référentiel cette date correspond-elle (serveur ou client)?
- Ecrire un script PHP qui affiche le navigateur utilisé par le client pour soumettre la requête (on utilisera la variable $_SERVER["HTTP_USER_AGENT"] pour les versions récentes de PHP ou bien la variable deprecated $HTTP_SERVER_VARS['REMOTE_ADDR'] ). Puis, écrire un script qui affiche un message à l'écran demandant de changer de navigateur si celui-ci est de type Internet Explorer.
Remarquer qu'il existe plusieurs manières d'inclure le code PHP du dernier script dans la page HTML. Quelle méthode vous semble la plus satisfaisante? Pourquoi?
Vous avez utilisé la variable $_SERVER["HTTP_USER_AGENT"] (ou $HTTP_SERVER_VARS['REMOTE_ADDR']) dans la question précédente. PHP dispose en fait d'un certains nombre de variables prédéfinies, sous formes de tableaux associatifs, visibles automatiquement sans avoir à les déclarer en tant que global. Pour cette raison, elles sont appelées auto globales. Ces variables portent différents types d'informations liées au serveur ($_SERVER), aux requêtes ($_GET, $_POST, $_REQUEST), à l'environnement ($_ENV), etc... Ces variables ont été introduites à partir de la version 4.1.0 et remplacent les variables de type $HTTP_*_VARS (qui existent toujours néanmoins). Nous verrons plus tard dans le TP comment utiliser certaines de ces variables.
- En utilisant la commande php_info(), visualiser le contenu de certaines variables auto-globales.
- Parcourir la variable $_SERVER manuellement à l'aide de l'instruction foreach et afficher son contenu à l'écran.
Activité 2 - Traitement des formulaires
PHP se révèle être particulièrement efficace dans le traitement des formulaires. Nous allons étudier ici un exemple de formulaire d'inscription: la personne est censée fournir ses noms, prénoms (obligatoires), sexe, âge et une liste de centre d'intérêt, afin de s'inscrire à un service quelconque.
- Ecrire dans une page form.html le formulaire HTML correspondant, sachant que les champs "noms" et "prénom" sont de type texte, "sexe" est un boutton radio (choix exclusif), "âge" est un menu déroulant select (tranches d'âge de 10 ans) et les centres d'intérêt sont de type checkbox (choix multiples).
Quel méthode HTTP (GET, POST, etc...) utilisez-vous pour soumettre le formulaire? Pourquoi?
- Ecrire un script PHP inscription.php qui sera appelé par le formulaire, et qui effectuera le traitement des données soumises. Deux cas doivent être traité par le script: si le nom ou le prénom n'a pas été saisi, un message d'erreur doit être affiché, ainsi qu'un lien pointant vers le formulaire. Dans le cas contraire, un récapitulatif des données saisies doit être affiché à l'utilisateur.
Plusieurs possibilités existent pour récupérer les données soumises par le formulaire. La plus élégante consiste à passer par les variables $_POST, $_GET ou $_REQUEST, suivant la requête. Par exemple, si le champ nom était décrit dans le formulaire par une balise du type <input type="text" name="nom">, la valeur saisie se trouve dans $REQUEST['nom'].
Une autre possibilité consiste à utiliser directement $nom_de_variable (par exemple $nom dans l'exemple précédent). Ceci ne fonctionne que si l'option register_globals est positionné à on dans le script php.ini. Mais cette manière de faire est déconseillée pour des raisons de sécurité. Voir le chapitre sur la sécurité de la documentation PHP à ce sujet. Notez que par défaut, register_globals est positionné à off.
- Modifier le script inscription.php, de manière à automatiquement rediriger l'utilisateur vers le formulaire si les champs nom ou prénom n'ont pas été saisi. Quelle fonction utilisez-vous? Quelle est sa particularité?
- Quelles modifications faudrait-il apporter au script et au formulaire pour pouvoir, en cas de redirection vers le formulaire, pré-remplir les champs par les informations déjà saisies par l'utilisateur? Qu'en pensez-vous?
Activité 3- Création d'un compteur
Nous allons maintenant créer un compteur "intelligent" d'accès de pages, en utilisant divers mécanismes. Il s'agit donc de pouvoir être capable de comptabiliser le nombre de fois qu'une page est appelée.
- Ecrivez un script PHP compteur.php qui, à chaque appel, incrémente le nombre d'appel de la page. Ce nombre sera stocké dans un fichier texte valeur_compteur.txt.
- Pour l'instant, le compteur est incrémenté à chaque appel de la page. Si l'on souhaite comptabiliser le nombre de nouveaux visiteurs, il ne faut pas incrémenter le compteur si le même utilisateur appelle deux fois la page. Pour ceci, modifier le script PHP en stockant en plus de la valeur actuelle du compteur, les adresses IP des machines qui appellent la page. Incrémenter le compteur que si la page est appelé d'une nouvelle machine.
Cette méthode permet-elle vraiment de comptabiliser le nombre des nouveaux visiteurs? Voyez-vous une amélioration? Laquelle?
TP du 5/02/2004 - nicolas.zlatoff@liris.cnrs.fr