Séance n°4

Formulaires

Présentation

Les formulaires sont utilisés par les sites Web pour recueillir des informations de l'utilisateur. Ils permettent à l'utilisateur d'envoyer des données au site web. La plupart du temps, ces données sont envoyées à des serveurs web.

Un formulaire est formé par un ou plusieurs composants. Parmi ceux-ci on cite :

  • les champs de texte :
  • les listes déroulantes :
  • les boutons :
  • les case à cocher : Je veux :
  • les boutons radio : Je suis :

Exemple 1 : Login

On désire créer le formulaire suivant :

Le code HTML correspondant est comme suit :

<form id="example01" action="#" method="post">
  <input type="text" name="login" placeholder="Login">
  <input type="password" name="pass" placeholder="Password" autocomplete="new-password">
  <label><input type="checkbox" name="rememberme" checked="true"> Remember me</label>
  <button>Log me in</button>
</form>

Le code CSS correspondant est disponible ici : code CSS du formulaire de login.

Exploration du code

On remarque que ce formulaire :

  • commence par la balise <form> et se termine par </form>.
  • contient un champ de texte (text field) : <input type="text" name="login" placeholder="Login">
  • contient un champ de mot de passe (password field) : <input type="password" name="pass" placeholder="Password" autocomplete="new-password">
  • contient une case à cocher (checkbox) : <input type="checkbox" name="rememberme" checked="true">
  • contient une étiquette (label) : <label><input ...> Remember me</label>
  • contient un bouton de soumission (submit button) : <button>Log me in</button>

Travail demandé

  1. Créer un fichier HTML nommé : login.html
  2. Copier le code HTML du formulaire, ci-dessus.
  3. Ajouter la mise en forme CSS disponible à travers le lien hypertexte, précédent.

Balise form

Le formulaire est délimité par <form action="..." method="...">...</form>.

Cette balise admet deux attributs principaux :

  • action="..." indique l'URL qui traite les données récupérées provenant du formulaire.
  • method="..." indique la méthode HTTP qui sera utilisée pour envoyer les données au serveur.

    Les méthodes HTTP usuelles sont :

    • GET : les données sont ajoutées à l'adresse URL indiquée dans action, elles sont visibles à l'utilisateur.
    • POST : les données sont envoyées dans le corps de la requête, donc invisibles à l'utilisateur.

Exemple 2 : méthodes GET et HTTP

On va comparer les deux méthodes HTTP (GET et POST) à l'aide des formulaires suivants.

Méthode POST

Ouvrir l'outil de développement F12 du navigateur sur l'onglet réseau. Puis, cliquer sur le bouton Login du formulaire qui utilise la méthode POST.

Dans l'onglet Headers on observe bien que la méthode utilisée est POST
Dans l'onglet Headers on observe bien que la méthode utilisée est POST
L'adresse URL affichée lorsqu'on utilise une méthode POST pour récupérer les données
L'adresse URL affichée lorsqu'on utilise une méthode POST pour récupérer les données
Les données du formulaire sont disponibles dans la partie 'Request'
Les données du formulaire sont disponibles dans la partie 'Request'

Méthode GET

Utiliser le lien "return to course..." pour retourner à la page des formulaires. Puis, cliquer sur le bouton login du formulaire qui utilise la méthode GET.

Dans l'onglet Headers on vérifie, bien, que la méthode utilisée est GET
Dans l'onglet Headers on vérifie, bien, que la méthode utilisée est GET
L'adresse URL affichée lorsqu'on utilise une méthode GET contient les données du formulaire
L'adresse URL affichée lorsqu'on utilise une méthode GET contient les données du formulaire
La partie 'Request' est vide
La partie 'Request' est vide

Composants standards

Composant / Forme Code HTML

Bouton radio (radio button)



<label>
  <input type="radio" name="se" value="x86"> Windows 32bits
</label><br>
<label>
  <input type="radio" name="se" value="x64" checked> Windows 64bits
</label><br>
<label>
  <input type="radio" name="se" value="Linux"> Linux distribution
</label>

Case à cocher (checkbox)




<label>
  <input type="checkbox" name="media" value="Livre" checked> Livre
</label><br>
<label>
  <input type="checkbox" name="media" value="Magazine" checked> Magazine
</label><br>
<label>
  <input type="checkbox" name="media" value="Roman"> Roman
</label><br>
<label>
  <input type="checkbox" name="media" value="Encyclopédie"> Encyclopédie
</label>

Champ de texte (text field)

<input type="text" name="np" value="Mariem" placeholder="Nom & Prénom">

Zone de texte (text area)

<textarea name="histoire" cols="20" rows="4" 
          placeholder="Raconter votre histoire"></textarea>

Champ de mot de passe (password field)

<input type="password" name="pwd" value="secret" placeholder="Mot de passe">

Champ nombre (number field)

<input type="number" name="note" value="10.0" 
       min="0.0" max="20.0" step="0.25">

Champ email (email field)

<input type="email" name="mail" placeholder="Votre adresse mail">

Champ téléphone (tel field)

<input type="tel" name="phone" pattern="[2459][0-9] [0-9]{3} [0-9]{3}" 
       placeholder="Votre téléphone">

Champ date (date field)

<input type="date" name="voyage" value="2022-10-01" 
       min="2022-01-01" max="2022-12-31">

Champ heure (time field)

<input type="time" name="appt" 
       min="08:00" max="18:00" step="900" value="14:00">

Champ date et heure (datetime field)

<input type="datetime-local" name="exam" 
       min="2022-09-15" max="2023-06-30" value="2022-09-15T08:00">

Champ intervalle (range field)

<input type="range" name="volume" min="0" max="100" step="5" list="ticks">
<!-- afficher les ticks -->
<datalist id="ticks">
  <option value="0" label="0%"></option>
  <option value="25" label="25%"></option>
  <option value="50" label="50%"></option>
  <option value="75" label="75%"></option>
  <option value="100" label="100%"></option>
</datalist>

Liste déroulante

<select name="fruit">
  <optgroup label="Fruits locaux">
    <option value="pomme">Pomme</option>
    <option value="fraise" selected>Fraise</option>
    <option value="orange">Orange</option>
    <option value="raisin">Raisin</option>
  </optgroup>
  <optgroup label="Fruits importés">
    <option value="banane">Banane</option>
    <option value="avocat">Avocat</option>
    <option value="kiwi">Kiwi</option>
  </optgroup>
</select>

Liste à choix multiples

<select name="fruits" size="8" multiple>
  <optgroup label="Fruits locaux">
    <option value="pomme">Pomme</option>
    <option value="fraise" selected>Fraise</option>
    <option value="orange">Orange</option>
    <option value="raisin">Raisin</option>
  </optgroup>
  <optgroup label="Fruits importés">
    <option value="banane" selected>Banane</option>
    <option value="avocat">Avocat</option>
    <option value="kiwi" selected>Kiwi</option>
  </optgroup>
</select>

Boutons (buttons)

<button type="button">Rien</button>
<button type="submit">Envoi</button>
<button type="reset">RAZ</button>

Regroupement de champs (fieldset & legend)

Identité
<fieldset>
  <legend>Identité</legend>
  <label for="cin">CIN :</label> <input type="text" id="cin" name="cin"><br>
  <label for="nom">Nom :</label> <input type="text" id="nom" name="nom">
</fieldset>

Attributs d'état (disabled & readonly)



<!-- Lecture seule (valeur envoyée lors du submit) -->
<input type="text" value="Code fixe" readonly>
<!-- Désactivé (valeur NON envoyée lors du submit) -->
<input type="text" value="Non modifiable" disabled>
<textarea disabled>Inactif</textarea>

Structure complète d'un tableau HTML (<caption> et <tfoot>)

En plus de <thead> (en-tête) et <tbody> (corps), un tableau HTML peut comporter une légende descriptive avec <caption> et un pied de tableau récapitulatif avec <tfoot> (idéal pour les totaux et bilans) :

Facture récapitulative
ArticleQtéPrix U.Total
Clavier USB225 DT50 DT
Souris optique315 DT45 DT
Total général95 DT
<table border="1">
  <caption>Facture récapitulative</caption>
  <thead>
    <tr><th>Article</th><th>Qté</th><th>Prix U.</th><th>Total</th></tr>
  </thead>
  <tbody>
    <tr><td>Clavier USB</td><td>2</td><td>25 DT</td><td>50 DT</td></tr>
    <tr><td>Souris optique</td><td>3</td><td>15 DT</td><td>45 DT</td></tr>
  </tbody>
  <tfoot>
    <tr><th colspan="3">Total général</th><th>95 DT</th></tr>
  </tfoot>
</table>

Application 7 : Formulaire de contact

Créer le formulaire de contact suivant :

Formulaire de contacts développeur
Formulaire de contacts développeur

Les champs obligatoires sont suivis par un astérisque (*).

Les postes actuels disponibles sont :

  • Web
    • Frontend developer
    • Backend developer
    • Fullstack developer
  • Data science
    • Datascience engineer
  • Autres
    • Python developer
    • C++ developer

Utiliser le CSS pour mettre en forme le formulaire.

Application 8 : Personnages de bandes dessinées

Réaliser un formulaire de personnages de bandes dessinées composé de cinq questions.

Télécharger les images

Question 1

Question 1
Question 1
  1. Les images des personnages sont des étiquettes (labels) qui permettent de sélectionner la zone de liste en dessous de chaque image.
  2. Les éléments de la zone de liste sont montrés dans la figure suivante :

    Options disponibles dans la zone de liste

  3. L'utilisateur doit obligatoirement remplir chacune des listes.

Question 2

Question 2
Question 2
  1. Les images des personnages sont des étiquettes (labels) qui permettent de sélectionner le bouton radio au dessus de chaque image.
  2. La valeur respective de chaque bouton radio est : a, b et c.
  3. L'utilisateur doit obligatoirement choisir une réponse parmi les trois propositions.

Question 3

Question 3
Question 3
  1. Le champ de texte est lié à une datalist qui contient les valeurs suivantes :
    • Spiderman
    • Superman
    • Batman
    • Megaman
    • Catman
  2. L'utilisateur doit obligatoirement répondre à cette question.

Question 4

Question 4
Question 4
  1. Les images des personnages sont des étiquettes (labels) qui permettent de sélectionner la case à cocher (checkbox) en dessous de chaque image.
  2. La valeur respective de chaque bouton radio est : a, b, c et d.
  3. La réponse n'est pas obligatoire à cette question.

Question 5

Question 5
Question 5
  1. Le champ affiché est de type numérique (number).
  2. Les valeurs acceptées dans ce champ sont comprises entre 1 et 20. Le champ affiche la valeur 5, par défaut.
  3. La réponse à cette question est obligatoire.

Le formulaire fournit deux boutons : submit et reset