TP HTML & CSS #4
S1 2026-2027 - IUT - Université de Lille, BUT2 SD
TP 4 — Les formulaires
Objectif : créer un formulaire de prise de rendez-vous complet (date et heure), le mettre en forme avec CSS et comprendre GET vs POST.
4.1 Contexte
On veut réaliser le formulaire de prise de rendez-vous d'un cabinet médical. Les patients choisissent une date et une heure, indiquent le médecin/specialité souhaité·e et peuvent préciser un motif ; la prise de rendez-vous nécessite de s'identifier (nom, prénom, e-mail, téléphone).
- Créez le dossier
code/tp4et dedans un dossiercss.
4.2 La structure du formulaire
- Écrivez la page
formulaire.htmlavec :- Un titre « Prise de rendez-vous — Cabinet médical ».
- Un texte d'introduction présentant le cabinet, les horaires de consultation et les modalités de prise de rendez-vous.
- Un formulaire de rendez-vous avec la méthode
post. L'attributactionpeut pointer vers n'importe quel fichier (reserver.php, ou simplement#) : il n'y a pas de serveur, on n'observera que la requête envoyée (voir 4.7).
Vos trois parties (informations personnelles, rendez-vous, soumission) seront placées à l'intérieur de ce <form>.
4.3 Partie 1 : informations personnelles
Le formulaire utilise <fieldset> et <legend> pour regrouper et titrer les parties.
- Ajoutez la première partie. Créez un
<fieldset>avec pour légende « Informations personnelles », contenant les champs suivants (chaque champ dans un<div>, chaque<label>associé à son champ viafor/id) :- un titre (
<select>) : « Mr » (pré-coché par défaut), « Mme », « Mlle » ; - Nom, Prénom : champs texte ;
- E-mail : champ de type
email; - Téléphone : champ de type
tel; - Date de naissance : champ de type
date.
- un titre (
*: champs obligatoires. L'attributrequiredforce la saisie ; l'option de titre « Mr » est pré-cochée (selected).
4.4 Partie 2 : informations sur le rendez-vous
- Ajoutez la seconde partie. Créez un second
<fieldset>avec pour légende « Informations sur le rendez-vous », contenant :- la date du rendez-vous : champ de type
date(obligatoire) ; - l'heure du rendez-vous : champ de type
time(obligatoire) ; - le médecin / spécialité (
<select>) : généraliste, pédiatre, dentiste, cardiologue ; - le motif de consultation en cases à cocher (
checkbox, mêmenamemotif) : consultation, renouvellement d'ordonnance, vaccin, autre.
- la date du rendez-vous : champ de type
4.5 Partie 3 : soumission
- Ajoutez la partie soumission, placée dans un
<div>de classeboutons, avec deux boutons : « Confirmer le rendez-vous » (typesubmit) et « Annuler » (typereset).
4.6 La mise en forme CSS
- Écrivez la feuille de style
css/formulaire.csset reliez-la àformulaire.htmlpour :- mettre en forme le titre, le texte d'introduction et le formulaire (choisissez couleurs, polices, largeurs, bordures et
border-radius) ; - aligner les champs : libellés à droite (largeur fixe), saisies à droite de même largeur (
input[type="text"],email,tel,date,time,select) ; - mettre en valeur la légende (
legend) : couleur, gras, taille légèrement augmentée ; - afficher les parties 1 et 2 côte à côte (flex) ;
- placer la partie 3 en dessous, centrée.
- mettre en forme le titre, le texte d'introduction et le formulaire (choisissez couleurs, polices, largeurs, bordures et
- Adaptez le HTML pour utiliser
form > .colonnesautour des deux premiersfieldset. - Vérifiez : libellés alignés à droite, saisies alignées, légendes en couleur, parties côte à côte, boutons centrés.
À retenir :
<fieldset>+<legend>regroupent et titrent les parties d'un formulaire. Un mêmenamepour desradioles rend exclusifs ;checked/selectedpré-cochent ;requiredrend un champ obligatoire.label[for]est lié au champ[id].
4.7 GET vs POST : observer la requête avec l'inspecteur
Aucun serveur PHP n'est nécessaire : les Dev Tools du navigateur permettent de voir la requête envoyée et ses données, même si le formulaire n'est pas réellement traité. Avec action="#", la requête est simplement renvoyée vers la page courante (qui se recharge) sans traitement : le # sert uniquement à cela — c'est idéal pour observer la requête sans qu'aucune donnée soit enregistrée.
⚠️ Condition préalable : servir la page via HTTP
Pour voir une requête POST, la page ne doit pas être ouverte en double-clic (protocole file://) : dans ce cas le navigateur ignore l'envoi POST (rien n'apparaît dans l'onglet Réseau). Pour GET, il se contente de réécrire l'URL (visible dans la barre d'adresse). Il faut donc servir la page avec un petit serveur HTTP local.
Le plus simple, sans ligne de commande, avec Visual Studio Code :
- Installez l'extension Live Server (marché VS Code).
- Ouvrez votre dossier
code/tp4dans VS Code, puis cliquez sur Go Live (en bas à droite). - Le navigateur s'ouvre via
http://localhost:5500/...: votre page est alors servie en HTTP.
(Alternative en ligne de commande en utilisant python : python3 -m http.server 8000 dans le dossier, puis http://localhost:8000/formulaire.html.)
Observer la requête
- Ouvrez les Dev Tools (F12) puis l'onglet Réseau (Network). S'il le faut, gardez l'historique des requêtes coché (Preserve log) et décochez Disable cache.
- Avec
method="POST", validez le formulaire. Dans l'onglet Réseau, repérez la requête envoyée : sa méthode est POST. Ouvrez-la (onglet Payload ou En-têtes) : les données du formulaire (Form Data) sont dans le corps de la requête, pas dans l'URL. - Changez la méthode en
method="GET"puis revalidez. La nouvelle requête est en GET : les données figurent cette fois dans l'URL, après?(par exemple...?nom=Dupont&date=2026-09-15&heure=09:30&medecin=generaliste), visibles dans la barre d'adresse comme dans les en-têtes. - Notez la différence : GET envoie les données dans l'URL (visible, mémorisable, limité en taille), POST les envoie dans le corps de la requête (masqué, illimité).
À retenir : la méthode
postenvoie les données dans le corps de la requête ; la méthodegetles place dans l'URL. Pour une prise de rendez-vous, on utilise POST. Une requête POST n'est envoyée que si la page est servie via HTTP (pas enfile://). L'onglet Réseau des Dev Tools permet d'inspecter la requête envoyée et ses données.
Vérification finale
- Validateur W3C : validez toutes vos pages (
index.html,perso.html,interet.html,exo2.html,page.html,formulaire.html) avec le validateur du W3C. Corrigez toutes les erreurs et avertissements. - Inspecteur (F12) :
- Examinez le HTML et les règles CSS appliquées à un élément.
- Modifiez en direct une propriété CSS sans toucher au fichier.
- Repérez les règles héritées et leur origine.
- Navigation : vérifiez que tous les liens fonctionnent (relatifs, absolus, internes
#id, zones réactives). - Accessibilité : toutes les images ont un
alt, leslabelsont associés aux champs (for/id), un seulh1par page, navigation possible au clavier. - Organisation : l'arborescence de
Web/codeest propre et chaque répertoire contient unindex.htmlcomme point d'entrée.
Exercice final (pour tout rassembler)
Construisez une page galerie.html qui rassemble tout ce que vous avez appris :
- un
<header>avec<nav>(menu horizontal, survol stylé) et des liens vers l'accueil ; - une galerie de 4 à 6 images (
<figure>+<figcaption>) redimensionnées automatiquement sur mobile (via@media) ; - chaque image est un lien interne vers un paragraphe de description (ancres
id) ; - un tableau « Fiche technique » avec
<caption>,<thead>,<tfoot>,colspanetrowspan, bordurescollapse, lignes paires stylées et survol ; - une image avec une zone réactive (au moins deux formes :
rectetcircle) ; - le tout stylé par un fichier CSS externe, sans aucune balise
<style>ni attributstyledans le HTML ; - un
footeravec signature (copyright, nom, prénom, mail, date de mise à jour).
Mettez le tout sur votre page Github.