Les formulaires

Les formulaires sont les ponts interactifs entre vos visiteurs et votre site web, permettant la collecte et l'échange d'informations.

Principales utilisations :

  • Contact : Permettre aux visiteurs de vous envoyer des messages
  • Authentification : Connexion et création de comptes utilisateurs
  • E-commerce : Passer des commandes et saisir des informations de paiement
  • Enquêtes & sondages : Recueillir des opinions et des feedbacks
  • Abonnements : S'inscrire à des newsletters ou services
  • Recherche : Permettre aux utilisateurs de filtrer et trouver du contenu

Exemple de formulaire de contact

Exemple de formulaire de connexion

Bonnes pratiques de conception

  • Gardez les formulaires aussi simples que possible
  • Groupez les champs liés logiquement
  • Utilisez des libellés clairs et concis
  • Placez les messages d'erreur près des champs concernés
  • Fournissez des exemples pour les formats complexes

La balise <form>

La balise <form> est le conteneur principal qui définit un formulaire HTML et comment les données seront traitées.

<form action="/traitement" method="post">
  <!-- Champs du formulaire ici -->
</form>

Attributs essentiels :

  • action : URL qui traitera les données du formulaire
  • method : Méthode HTTP (généralement get ou post)
  • enctype : Type d'encodage pour les fichiers (si upload)
  • target : Où afficher la réponse (_blank, _self, etc.)
  • autocomplete : Active/désactive l'autocomplétion du navigateur

GET vs POST

Méthode Utilisation Visibilité des données Limite de taille
GET Requêtes sans effet (recherche, filtres) Visible dans l'URL Limitée (~2048 caractères)
POST Envoi de données (formulaire de contact, login) Invisible dans l'URL Beaucoup plus élevée

Erreurs courantes

  • Oublier l'attribut action (le formulaire ne sait où envoyer les données)
  • Utiliser GET pour des données sensibles (elles apparaissent dans l'URL)
  • Négliger l'attribut enctype="multipart/form-data" pour les uploads de fichiers

Champs de texte

Les champs de texte (<input type="text">) sont les éléments de base pour saisir des informations courtes sur une seule ligne.

<input type="text" name="prenom" placeholder="Votre prénom">

Texte simple

<input type="text" name="nom">

Email

<input type="email" name="email">

Numéro de téléphone

<input type="tel" name="telephone">

URL

<input type="url" name="siteweb">

Types de champs texte HTML5 :

  • text : Texte simple (par défaut)
  • email : Adresse email avec validation basique
  • tel : Numéro de téléphone (format libre)
  • url : URL avec validation basique
  • search : Champ de recherche (style peut varier)
  • number : Nombre avec sélecteur de flèches
  • date : Sélecteur de date (navigateur dépendant)

Bonnes pratiques

  • Utilisez type="email" plutôt que type="text" pour les emails
  • Ajoutez des attributs pattern pour des validations complexes
  • Utilisez maxlength pour limiter la longueur des entrées
  • Fournissez toujours un name pour l'identification côté serveur

Champs de mot de passe

Les champs de mot de passe (<input type="password">) masquent les caractères saisis pour protéger les informations sensibles.

<input type="password" name="motdepasse" placeholder="Votre mot de passe">

Exemple de champ de mot de passe

Les caractères seront masqués lors de la saisie

Sécurité des mots de passe

  • Utilisez toujours type="password" pour les champs sensibles
  • Envisagez d'ajouter un bouton "Afficher/Masquer" le mot de passe
  • Pour les formulaires sensibles, utilisez HTTPS obligatoirement
  • Ne fournissez jamais de valeur par défaut pour les mots de passe
  • Ajoutez des règles de complexité côté client et serveur

Exemple avec affichage optionnel

<input type="password" id="password" placeholder="Mot de passe">
<input type="checkbox" id="showPassword"> 
<label for="showPassword">Afficher le mot de passe</label>

<script>
  document.getElementById('showPassword').addEventListener('change', function() {
    var password = document.getElementById('password');
    password.type = this.checked ? 'text' : 'password';
  });
</script>

Boutons de formulaire

Les boutons permettent aux utilisateurs d'interagir avec le formulaire, notamment pour soumettre ou réinitialiser les données.

Submit

<input type="submit" value="Envoyer">

Soumet le formulaire

Reset

<input type="reset" value="Effacer">

Réinitialise tous les champs

Button

<button type="button">Action</button>

Bouton générique (JS)

Différences entre <input> et <button>

  • <input type="submit"> : Plus limité en style, ne peut contenir que du texte
  • <button type="submit"> : Plus flexible, peut contenir HTML (icônes, images...)
  • <button> sans type : Par défaut type="submit" dans un formulaire
  • Pour des actions JavaScript, toujours spécifier type="button"

Attention aux boutons

  • Un formulaire sans bouton submit ne peut être envoyé
  • Les boutons reset peuvent effacer accidentellement des données
  • Les boutons sans type peuvent soumettre le formulaire par défaut
  • Évitez les boutons submit multiples dans un même formulaire

Zones de texte multilignes

La balise <textarea> permet de saisir du texte sur plusieurs lignes, idéal pour les commentaires ou messages longs.

<textarea name="message" rows="4" cols="50" placeholder="Votre message..."></textarea>

Exemple de textarea

Attributs utiles :

  • rows : Nombre de lignes visibles (hauteur)
  • cols : Nombre de caractères par ligne (largeur)
  • maxlength : Limite le nombre de caractères
  • wrap : Contrôle le retour à la ligne (soft/hard)
  • readonly : Rend la zone en lecture seule
  • resize : Contrôle la redimensionnement (CSS)

À savoir

  • Contrairement à <input>, <textarea> a une balise fermante
  • Le texte par défaut se place entre les balises, pas dans un attribut value
  • Les attributs rows et cols sont souvent remplacés par du CSS
  • Évitez les textarea trop grands qui peuvent intimider l'utilisateur

Listes déroulantes

Les balises <select> et <option> créent des listes déroulantes pour sélectionner une ou plusieurs options.

<select name="pays">
  <option value="fr">France</option>
  <option value="be">Belgique</option>
  <option value="ca" selected>Canada</option>
</select>

Liste simple

Liste multiple

Attributs clés :

  • multiple : Permet la sélection de plusieurs options
  • size : Nombre d'options visibles sans dérouler
  • selected : Option présélectionnée
  • disabled : Désactive une option
  • optgroup : Groupe d'options (pour catégoriser)

Exemple avec groupes

<select name="voiture">
  <optgroup label="Allemandes">
    <option value="bmw">BMW</option>
    <option value="audi">Audi</option>
  </optgroup>
  <optgroup label="Françaises">
    <option value="peugeot">Peugeot</option>
    <option value="renault">Renault</option>
  </optgroup>
</select>

Cases à cocher & boutons radio

Les cases à cocher (checkbox) et boutons radio (radio) permettent des sélections parmi des options prédéfinies.

Case à cocher

<input type="checkbox" name="newsletter">
<label>S'abonner à la newsletter</label>

Choix multiples possibles

Bouton radio

<input type="radio" name="genre" value="h">
<label>Homme</label>
<input type="radio" name="genre" value="f">
<label>Femme</label>

Un seul choix possible

Différences clés :

Checkbox Radio
Sélection multiple Oui Non
Attribut name Unique par case Identique pour le groupe
Valeur retournée Tableau des valeurs cochées Valeur unique sélectionnée

Bonnes pratiques

  • Toujours associer un <label> à chaque case/bouton
  • Utiliser fieldset et legend pour grouper les options liées
  • Prévoir une option sélectionnée par défaut quand cela a du sens
  • Ordonner les options logiquement (alphabétique, fréquente...)

Attributs utiles

Les attributs des éléments de formulaire permettent de contrôler leur comportement et leur apparence.

Attribut Description Exemple
name Identifiant du champ pour le traitement name="email"
placeholder Texte indicatif dans le champ vide placeholder="Votre email"
required Rend le champ obligatoire required
value Valeur par défaut du champ value="default"
checked Case/radio cochée par défaut checked
disabled Désactive le champ disabled
readonly Champ en lecture seule readonly
maxlength Nombre max de caractères maxlength="100"
pattern Expression régulière de validation pattern="[A-Za-z]{3}"
autocomplete Active/désactive l'autocomplétion autocomplete="off"

Validation HTML5

Les navigateurs modernes supportent la validation native :

  • required : Champ obligatoire
  • type="email" : Valide le format d'email
  • pattern : Valide contre une regex
  • min/max : Pour les nombres/dates
  • minlength/maxlength : Longueur du texte

Personnalisez les messages avec JavaScript si nécessaire.

Exemple complet

Voici un formulaire complet intégrant les différents éléments abordés dans ce chapitre.

<form action="/inscription" method="post">
  <fieldset>
    <legend>Informations personnelles</legend>
    
    <label>
      Nom complet *:
      <input type="text" name="nom" required placeholder="Jean Dupont">
    </label>
    
    <label>
      Email *:
      <input type="email" name="email" required placeholder="email@exemple.com">
    </label>
    
    <label>
      Mot de passe *:
      <input type="password" name="motdepasse" required minlength="8">
    </label>
    
    <label>
      Date de naissance:
      <input type="date" name="naissance">
    </label>
  </fieldset>
  
  <fieldset>
    <legend>Préférences</legend>
    
    <label>
      <input type="checkbox" name="newsletter" checked>
      Recevoir la newsletter
    </label>
    
    <label>Langue préférée:</label>
    <select name="langue">
      <option value="fr" selected>Français</option>
      <option value="en">Anglais</option>
      <option value="es">Espagnol</option>
    </select>
    
    <label>Comment nous avez-vous connu?</label>
    <textarea name="comment" rows="3" placeholder="Amis, publicité..."></textarea>
  </fieldset>
  
  <button type="submit">S'inscrire</button>
  <button type="reset">Effacer</button>
</form>

Résultat du formulaire

Informations personnelles
Préférences

Erreurs fréquentes

Oublier l'attribut name

<input type="text" placeholder="Nom">

Les données ne seront pas envoyées au serveur

Mauvais type d'input

<input type="text" name="email">

Préférer type="email" pour la validation native

Labels non associés

<label>Nom</label>
<input type="text" name="nom">

Mieux : <label>Nom: <input...></label>

Autres problèmes courants

  • Formulaires trop longs et complexes
  • Absence de messages d'erreur clairs
  • Validation uniquement côté client (toujours valider côté serveur)
  • Oublier le bouton submit
  • Ne pas tester avec des données réelles

Solutions

  • Utilisez des outils comme le validateur W3C
  • Testez sur différents appareils et navigateurs
  • Implémentez une validation côté serveur robuste
  • Fournissez des messages d'erreur clairs et précis
  • Optimisez pour l'accessibilité (ARIA, navigation au clavier)

En résumé

Balise <form>

Conteneur principal avec action et method

Champs texte

<input type="text|email|tel...">

Mot de passe

<input type="password">

Boutons

submit, reset et button

Les formulaires HTML sont des outils puissants pour interagir avec vos utilisateurs et collecter des informations. En maîtrisant les différentes balises (<input>, <select>, <textarea>) et leurs attributs (name, required, placeholder), vous pouvez créer des interfaces intuitives et efficaces. N'oubliez pas de toujours tester vos formulaires dans des conditions réelles et de les optimiser pour l'accessibilité. Dans le prochain chapitre, nous aborderons des concepts plus avancés du HTML.