Objectifs de la séance ¶
- Se familiariser avec le langage
PHP
en mode Web - Utiliser le serveur Web intégré à
PHP
- Produire un contenu
HTML
avec le langagePHP
en mode Web - Renforcer la compréhension de la mécanique d'échange
HTTP
- Observer des requêtes et réponses
HTTP
grâce aux outils de développement du navigateur - Utiliser les formulaires et en traiter les données avec
PHP
- Contrôler la présence de données normalement issues de formulaires
- Utiliser des fonctions
PHP
- Utiliser la structure de contrôle
foreach(...)
- Écrire des fonctions
Consignes ¶
Ce sujet complémentaire est la suite du TP « Premiers pas en PHP
Web ». Les questions seront logiquement traitées dans le même dépôt Git que le sujet principal.
Calendrier ¶
Nous souhaitons obtenir un programme qui produit l'affichage des jours du mois.
- Prenez connaissance des fonctionnalités suivantes qui vous aideront dans votre réalisation :
- Écrivez un programme «
calendrier1.php
» qui produit l'affichage des jours du moisInformationVous pouvez utiliser la commande shell
ncal
afin de vérifier la génération de vos calendriers.La commande
ncal -b -M 3 2022
donne le résultat suivant :ncal -b -M 3 2022 Mars 2022 lu ma me je ve sa di 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire
Fonction calendrier ¶
En partant du programme que vous venez de réaliser, vous allez extraire le code vous permettant de définir une fonction de création du calendrier d'un mois.
- Créez un fichier «
calendrier.function.php
» dans lequel vous écrirez la fonction suivante :function calendrier(int $mois, int $annee, bool $afficheAnnee=true): string
- Écrivez le code de la fonction afin qu'elle retourne le calendrier du mois «
$mois
» (de 1 à 12) de l'année «$annee
» (entier quelconque) dans lequel l'année est insérée ou non en fonction de la valeur de «$afficherAnnee
» - Copiez votre programme «
calendrier1.php
» en «calendrier2.php
» - Modifiez «
calendrier2.php
» pour qu'il utilise votre nouvelle fonction «calendrier()
» - Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire
Formulaire ¶
Votre calendrier du mois serait plus intéressant s'il permettait de choisir le mois et l'année d'intérêt.
- Concevez un programme
PHP
«choisir-mois-annee.php
» qui produit un formulaire de choix d'un mois et d'une année :- les données sont transmises selon la méthode
GET
un programmePHP
«calendrier3.php
» - la liste déroulante des mois, nommée «
mois
», propose à l'utilisateur les mois en toutes lettres en français mais gère des valeurs numériques de 1 à 12 - la liste déroulante des années, nommée «
annee
», propose les années par ordre chronologique inverse, de l'année prochaine à 1900 - la saisie de l'utilisateur est rendue obligatoire
- les données sont transmises selon la méthode
- Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire - Copiez votre programme «
calendrier2.php
» en «calendrier3.php
» - Modifiez «
calendrier3.php
» pour qu'il utilise fasse usage des données transmises par le formulaire selon la méthodeGET
:- la présence des données transmises est vérifiée avec «
isset()
» - la forme des données transmises est vérifiée avec les fonctions «
Ctype
» - les valeurs admissibles des données transmises sont scrupuleusement vérifiées
- en cas de valeurs incohérentes, les valeurs par défaut du mois courant et de l'année courante sont utilisées
- le calendrier est généré à l'aide de la fonction «
calendrier()
»
- la présence des données transmises est vérifiée avec «
- Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire
Formulaire et paramètres d'URL, (re)découverte ¶
Votre nouveau calendrier du mois peut être interrogé par un formulaire qui permet de choisir le mois et l'année. Revenons sur les détails du principe.
- Observez les paramètres d'URL produits par votre précédent formulaire lorsque «
calendrier3.php
» est demandé au serveur :calendrier3.php?mois=8&annee=2000
- Modifiez manuellement ces paramètres afin de modifier le mois ou l'année. Vous constatez l'inutilité de votre contrôle de formulaire pour ce type de modification…
- Modifiez à présent manuellement les paramètres afin de donner des valeurs invalides pour le mois et/ou l'année
- Vérifiez que le contrôle des paramètres est suffisamment robuste
Formulaire et paramètres d'URL, mise en pratique ¶
Vos observations ont mis en évidence que l'utilisation d'un formulaire utilisant la methode GET
conduit à la construction d'une URL comportant une « query string » contenant la saisie de l'utilisateur. Vous allez exploiter ce principe et construire vous-même des URL avec une « query string » contenant des paramètres pour proposer des hyperliens vers le mois précédent et le mois suivant.
- Copiez votre programme «
calendrier3.php
» en «calendrier4.php
» - Modifiez «
calendrier4.php
» pour construire des hyperliens permettant de conduire au mois précédent et suivant - Placez ces hyperliens de part et d'autre de votre calendrier en utilisant vos connaissances du modèle « flexbox »
- Vérifiez que le bon fonctionnement de l'ensemble
Calendrier de l'année ¶
Votre fonction de création du calendrier d'un mois est réutilisable et vous allez en profiter pour construire le calendrier de l'année en cours.
- Copiez votre programme «
calendrier2.php
» en «calendrier-annee1.php
» - Modifiez «
calendrier-annee1.php
» pour qu'il produise le calendrier de l'année en coursInformationVous pouvez utiliser la commande shell
ncal -b -M 2022
afin de vérifier la génération de votre calendrier de l'année. - Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire
Calendrier de l'année et des jours fériés ¶
Votre calendrier serait bien plus utile s'il comportait les jours fériés français.
- Copiez votre programme «
calendrier-annee1.php
» en «calendrier-annee2.php
» - Copiez votre programme «
calendrier.function.php
» en «calendrier2.function.php
» - Modifiez «
calendrier-annee2.php
» pour qu'il utilise «calendrier2.function.php
» - Dans «
calendrier2.function.php
», créez la fonction «jourFerie(int $jour, int $mois, int $annee): bool
» retourne vrai pour :InformationVous pouvez déterminer la date de Pâques manuellement ou utiliser la fonction «
easter_date()
» dePHP
. - Modifiez votre fonction «
calendrier()
» afin qu'elle utilise la fonction «jourFerie()
» - Vérifiez la validité du code
HTML
produit et corrigez-le si nécessaire