Lorsque l’on développe un site web, l’un des éléments les plus utilisés et pourtant souvent mal compris reste le formulaire. C’est par lui que tout commence : une inscription, une connexion, un commentaire, une commande… et derrière chacun de ces formulaires, un petit héros discret travaille en coulisse : le champ input en HTML5.
Les champs de saisie permettent à vos visiteurs d’interagir avec votre site. Ils transforment une simple page statique en une véritable interface dynamique et intelligente. Sans eux, impossible de collecter des informations, de communiquer avec une base de données ou de sécuriser un espace membre.
HTML5 a profondément amélioré le fonctionnement des champs de formulaire, en introduisant de nouveaux types d’<input>
, des validations automatiques, et une meilleure prise en compte de la sécurité et de l’ergonomie. Ces avancées facilitent la vie des développeurs tout en protégeant les utilisateurs.
Dans ce guide, nous allons explorer en détail tous les types de champs input proposés par HTML5, comprendre leur utilité, leurs limites, et surtout, apprendre à les utiliser de manière sécurisée. Vous découvrirez comment choisir le bon type de champ, comment valider efficacement les données, et comment éviter les failles courantes, notamment les injections et les attaques XSS.
L’objectif de ce guide est simple : à la fin de votre lecture, vous serez capable de créer des formulaires complets, élégants, performants et sûrs — à l’image de ceux que l’on trouve sur les plus grands sites professionnels.
Comprendre le rôle des champs input
Avant d’entrer dans le détail des différents types de champs, il est essentiel de bien comprendre la structure de base d’un formulaire HTML. Un formulaire repose toujours sur une balise principale : <form>
.
C’est elle qui définit la zone de saisie et la manière dont les données seront envoyées au serveur.
Structure de base d’un formulaire HTML
Un formulaire simple ressemble à ceci :
<form action="traitement.php" method="post">
<label for="nom">Votre nom :</label>
<input type="text" id="nom" name="nom">
<label for="email">Votre email :</label>
<input type="email" id="email" name="email">
<input type="submit" value="Envoyer">
</form>
Dans cet exemple, nous avons trois éléments essentiels :
- La balise
<form>
, qui encadre le formulaire et définit comment les données seront envoyées.- L’attribut
action
précise la page ou le script de destination (souvent un fichier PHP, Node.js, etc.). - L’attribut
method
définit la méthode d’envoi :GET
ouPOST
.
- L’attribut
- Les champs
<input>
, qui permettent à l’utilisateur d’entrer des données.
Chaque champ doit avoir un attributname
, indispensable pour que la valeur soit transmise au serveur. - Le bouton de validation
<input type="submit">
, qui déclenche l’envoi du formulaire.
Si vous omettez l’attribut name
, la donnée saisie dans ce champ ne sera pas envoyée au serveur. C’est une erreur courante chez les débutants.
Le rôle du couple name
/ value
Chaque champ input envoie une paire clé/valeur au serveur.
La clé est définie par l’attribut name
, et la valeur est le contenu saisi par l’utilisateur.
Prenons cet exemple :
<input type="text" name="pseudo" value="Alban">
Lorsque le formulaire est envoyé, le navigateur enverra au serveur la donnée suivante :
pseudo=Alban
C’est cette structure qui permet à un script côté serveur (comme PHP) de récupérer et de traiter les données envoyées. Par exemple, en PHP, vous pourriez écrire :
$pseudo = $_POST['pseudo'];
Le nom de l’attribut name
doit donc être choisi avec soin, car il servira d’identifiant dans votre traitement de données.
La méthode d’envoi : GET ou POST
Le choix entre GET
et POST
est fondamental, notamment en matière de sécurité.
- GET affiche les données dans l’URL.
Exemple :https://votresite.fr/formulaire.php?pseudo=Alban&[email protected]
C’est pratique pour les recherches, mais dangereux pour les informations confidentielles. - POST envoie les données dans le corps de la requête HTTP, sans les afficher dans l’URL.
C’est la méthode à privilégier pour les formulaires de connexion, d’inscription ou d’envoi de message.
Il est donc recommandé d’utiliser method="post"
dès que vous manipulez des données sensibles (mot de passe, email, adresse, etc.).
Exemple concret : un mini formulaire de contact sécurisé
Voici un petit exemple de formulaire de contact simple mais propre :
<form action="contact.php" method="post">
<label for="nom">Nom :</label>
<input type="text" id="nom" name="nom" required>
<label for="email">Email :</label>
<input type="email" id="email" name="email" required>
<label for="message">Message :</label>
<textarea id="message" name="message" rows="5" required></textarea>
<input type="submit" value="Envoyer">
</form>
Remarquez l’attribut required
: il indique au navigateur que le champ ne peut pas être laissé vide. C’est une validation côté client : elle évite à l’utilisateur d’envoyer un formulaire incomplet.
Mais attention : même si cette vérification empêche un envoi vide côté navigateur, un utilisateur malintentionné pourrait contourner cette protection.
C’est pourquoi il est obligatoire de refaire les vérifications côté serveur (en PHP, Node, Python, etc.) avant d’enregistrer les données.
Pour aller plus loin : 8 Ex. de formulaire responsive
Pourquoi la sécurité commence dès la saisie
Beaucoup de développeurs pensent que la sécurité commence au niveau du serveur. C’est une erreur.
Dès la conception de vos champs input, vous devez réfléchir à :
- Quel type de données j’attends ?
- Quelle longueur maximale dois-je accepter ?
- Quelles contraintes dois-je appliquer (format, caractères interdits, etc.) ?
Ces réflexions vous permettent de choisir le bon type de champ et de limiter les risques d’erreurs ou d’attaques.
Un bon formulaire est donc à la fois ergonomique, logique et sécurisé.
Il ne se contente pas d’afficher des zones de saisie : il guide l’utilisateur, filtre les mauvaises entrées, et protège vos serveurs.
Pour aller plus loin : Validation d’un formulaire en JS
Petit test pratique
Si vous copiez-collez le formulaire ci-dessous dans un fichier formulaire.html
, vous pouvez voir comment le navigateur gère automatiquement les champs HTML5 :
<form method="post" action="#">
<label>Votre âge :</label>
<input type="number" min="0" max="120" required>
<br>
<label>Votre email :</label>
<input type="email" required>
<br>
<label>Votre site web :</label>
<input type="url">
<br>
<input type="submit" value="Tester">
</form>
Même sans une seule ligne de JavaScript, votre navigateur affiche des messages d’erreur automatiques si la saisie ne correspond pas au type attendu. C’est la puissance de HTML5 : il gère une grande partie de la validation pour vous.
Les champs input sont le lien direct entre vos utilisateurs et vos scripts. Mal utilisés, ils deviennent une porte d’entrée pour les failles de sécurité. Mais correctement conçus, ils sont puissants, précis et fiables.
Les types de champs classiques
Avant l’arrivée de HTML5, les développeurs ne disposaient que d’une poignée de types d’inputs pour gérer les formulaires. Ces types “historiques” restent aujourd’hui indispensables et largement utilisés. Voyons ensemble comment bien les employer, leurs avantages, et leurs limites.
Le champ texte : type="text"
C’est le plus simple et le plus répandu.
Il permet la saisie libre d’une chaîne de caractères sur une seule ligne.
<label for="prenom">Votre prénom :</label>
<input type="text" id="prenom" name="prenom" maxlength="30" required>
L’attribut maxlength
définit le nombre maximal de caractères autorisés. L’attribut required
empêche l’envoi du formulaire si le champ est vide.
Conseil sécurité :
Même si vous fixez un maxlength
, ne comptez jamais uniquement sur cette limite côté client. Un utilisateur peut modifier votre HTML via les outils de développement du navigateur. Côté serveur, vérifiez toujours la longueur de la chaîne et supprimez tout code HTML ou JavaScript potentiellement injecté (pour éviter les failles XSS).
En PHP par exemple :
$prenom = htmlspecialchars(trim($_POST['prenom']));
Ici, htmlspecialchars()
empêche l’interprétation du HTML, et trim()
supprime les espaces inutiles.
Le champ mot de passe : type="password"
Ce champ fonctionne comme un champ texte, mais masque les caractères saisis.
<label for="motdepasse">Mot de passe :</label>
<input type="password" id="motdepasse" name="motdepasse" required minlength="8">
L’attribut minlength
définit une longueur minimale, souvent utilisée pour renforcer la sécurité. Cependant, HTML5 ne chiffre pas les mots de passe : il se contente de masquer leur affichage.
Important :
- Les mots de passe ne sont jamais chiffrés dans le formulaire, seulement lors de leur traitement côté serveur.
- Pour stocker un mot de passe, utilisez toujours un hachage sécurisé, comme
password_hash()
en PHP oubcrypt
.
Exemple PHP :
$hash = password_hash($_POST['motdepasse'], PASSWORD_DEFAULT);
Ainsi, même si votre base de données est compromise, les mots de passe resteront illisibles.
Le champ email : type="email"
Ce type vérifie automatiquement le format d’une adresse email. Il est très pratique pour éviter les erreurs de saisie.
<label for="email">Adresse email :</label>
<input type="email" id="email" name="email" placeholder="[email protected]" required>
Si l’utilisateur saisit une adresse invalide, le navigateur affichera un message d’erreur avant même l’envoi du formulaire.
HTML5 gère aussi les emails multiples avec l’attribut multiple
:
<input type="email" name="invites" multiple>
Ici, l’utilisateur peut entrer plusieurs adresses séparées par des virgules.
Attention :
Cette validation reste superficielle.
Côté serveur, il faut vérifier que l’adresse existe vraiment ou qu’elle appartient bien à un utilisateur autorisé.
Un simple filter_var($email, FILTER_VALIDATE_EMAIL)
en PHP permet déjà un bon filtrage.
Pour aller plus loin : Valider input type email en JS / PHP
Le champ recherche : type="search"
Ce champ ressemble à un champ texte, mais il est optimisé pour les barres de recherche. Certains navigateurs y ajoutent automatiquement un petit bouton pour effacer le texte.
<input type="search" name="q" placeholder="Rechercher un article...">
C’est idéal pour améliorer l’expérience utilisateur, notamment sur mobile.
Pour aller plus loin : La balise <search> en HTML5
Le champ numérique : type="number"
Ce champ limite la saisie à des valeurs numériques. On peut y ajouter des contraintes précises comme un minimum, un maximum ou un pas d’incrémentation.
<label for="age">Votre âge :</label>
<input type="number" id="age" name="age" min="0" max="120" step="1">
Le navigateur affiche automatiquement des flèches pour augmenter ou diminuer la valeur. En cas de saisie invalide (texte, symbole, etc.), le formulaire ne sera pas envoyé.
Le champ plage de valeurs : type="range"
C’est une barre coulissante permettant de sélectionner une valeur numérique dans une plage donnée.
<label for="volume">Volume :</label>
<input type="range" id="volume" name="volume" min="0" max="100" value="50">
C’est très utilisé pour les réglages (volume, luminosité, progression…). L’inconvénient : la valeur sélectionnée n’est pas visible par défaut. Vous pouvez la faire apparaître en JavaScript :
<input type="range" id="volume" name="volume" min="0" max="100" value="50">
<span id="valeur"></span>
<script>
const range = document.getElementById('volume');
const output = document.getElementById('valeur');
output.textContent = range.value;
range.addEventListener('input', () => output.textContent = range.value);
</script>
Le champ téléphone : type="tel"
Ce champ permet de saisir un numéro de téléphone. Il n’applique pas de format particulier, mais sur mobile, il affiche automatiquement un clavier numérique.
<label for="tel">Téléphone :</label>
<input type="tel" id="tel" name="tel" placeholder="06 12 34 56 78">
Pour contrôler le format, vous pouvez utiliser l’attribut pattern
avec une expression régulière :
<input type="tel" pattern="[0-9]{10}" title="10 chiffres sans espace">
Le champ caché : type="hidden"
Ce champ n’est pas visible pour l’utilisateur, mais il permet d’envoyer des données “invisibles” au serveur, comme un identifiant ou un token de vérification.
<input type="hidden" name="csrf_token" value="45F98D2R78E6">
Ce champ est très utile pour la sécurité : il peut contenir un jeton CSRF servant à vérifier que le formulaire vient bien de votre site et non d’un site malveillant.
En PHP, vous pouvez générer un token sécurisé comme ceci :
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
Et le comparer au moment de l’envoi du formulaire.
Pour aller plus loin : Créer un token en PHP
Ces champs classiques couvrent la majorité des besoins quotidiens. Mais HTML5 a enrichi cette liste avec des types plus modernes, capables de gérer des dates, des couleurs, des fichiers et bien plus encore.
Passons maintenant à ces nouveautés très pratiques.
Les nouveautés de HTML5
Avec HTML5, de nombreux nouveaux types d’inputs ont vu le jour, simplifiant la vie des développeurs et améliorant l’expérience utilisateur. Ces champs permettent d’éviter des scripts complexes ou des bibliothèques externes pour des besoins simples.
Les champs de date et de temps
Avant HTML5, il fallait utiliser des bibliothèques JavaScript (comme jQuery UI) pour créer des sélecteurs de date. Désormais, HTML5 propose plusieurs types dédiés :
type="date"
Affiche un calendrier intégré pour choisir une date.
<label for="date_naissance">Date de naissance :</label>
<input type="date" id="date_naissance" name="date_naissance">
type="time"
Permet de sélectionner une heure :

Des formations informatique pour tous !
Débutant ou curieux ? Apprenez le développement web, le référencement, le webmarketing, la bureautique, à maîtriser vos appareils Apple et bien plus encore…
Formateur indépendant, professionnel du web depuis 2006, je vous accompagne pas à pas et en cours particulier, que vous soyez débutant ou que vous souhaitiez progresser. En visio, à votre rythme, et toujours avec pédagogie.
Découvrez mes formations Qui suis-je ?<label for="heure">Heure de rendez-vous :</label>
<input type="time" id="heure" name="heure">
type="datetime-local"
Combine la date et l’heure sans fuseau horaire :
<label for="rdv">Date et heure :</label>
<input type="datetime-local" id="rdv" name="rdv">
type="month"
et type="week"
Ces deux types permettent de sélectionner un mois ou une semaine entière. Ils sont utiles pour des rapports, des plannings ou des statistiques mensuelles.
<input type="month" name="mois">
<input type="week" name="semaine">
Tous ces champs simplifient la saisie et la validation des formats temporels, en s’adaptant automatiquement à la langue et au fuseau de l’utilisateur.
Le champ couleur : type="color"
Ce type affiche une palette de sélection de couleur. Idéal pour les applications graphiques, les thèmes personnalisables ou les interfaces utilisateurs dynamiques.
<label for="couleur">Choisissez une couleur :</label>
<input type="color" id="couleur" name="couleur" value="#ff0000">
Le navigateur renvoie une valeur hexadécimale (#RRGGBB
).
Le champ fichier : type="file"
Permet à l’utilisateur de sélectionner un ou plusieurs fichiers à envoyer.
<label for="photo">Envoyez votre photo :</label>
<input type="file" id="photo" name="photo" accept="image/*">
L’attribut accept
limite le type de fichiers (ici, uniquement les images).
Pour autoriser plusieurs fichiers :
<input type="file" multiple>
Sécurité cruciale :
Ne vous fiez jamais à l’extension d’un fichier pour valider son type. Le seul moyen sûr est de vérifier le MIME type côté serveur. Exemple en PHP :
if (mime_content_type($_FILES['photo']['tmp_name']) !== 'image/jpeg') {
die('Type de fichier non autorisé.');
}
Le champ URL : type="url"
Contrôle automatiquement que le texte saisi ressemble à une adresse web valide.
<input type="url" name="site" placeholder="https://votresite.fr" required>
HTML5 affichera une erreur si l’utilisateur saisit une chaîne qui ne correspond pas à une URL.
Les boutons et contrôles interactifs
Les boutons font partie intégrante des formulaires :
<input type="submit" value="Envoyer">
<input type="reset" value="Effacer">
<input type="button" value="Cliquez ici" onclick="alert('Bonjour !')">
submit
envoie le formulaire.reset
réinitialise les champs.button
est libre : il ne fait rien sans JavaScript.
Les cases à cocher et boutons radio
Deux types essentiels pour les choix multiples ou exclusifs.
Case à cocher :
<label>
<input type="checkbox" name="newsletter" value="1"> Recevoir la newsletter
</label>
Bouton radio :
<label><input type="radio" name="sexe" value="H"> Homme</label>
<label><input type="radio" name="sexe" value="F"> Femme</label>
Les boutons radio d’un même groupe partagent le même name
, ce qui garantit qu’un seul peut être sélectionné à la fois.
Ces nouveaux types d’input améliorent la compatibilité mobile, la validation automatique et la sécurité des données saisies. Ils permettent aussi de simplifier les interfaces, tout en réduisant la quantité de code JavaScript nécessaire.
Validation, sécurité et bonnes pratiques
Les formulaires sont des points d’entrée directs vers vos systèmes. S’ils sont mal protégés, ils deviennent des portes ouvertes aux attaques. Il est donc essentiel de comprendre comment fonctionne la validation, et surtout, comment mettre en place une sécurité solide, à la fois côté client et côté serveur.
La validation côté client
HTML5 a introduit plusieurs attributs pour simplifier la validation des formulaires sans JavaScript :
<input type="text" name="nom" required minlength="3" maxlength="50" pattern="[A-Za-zÀ-ÿ\s]+">
Décryptons ces attributs :
required
empêche l’envoi si le champ est vide.minlength
etmaxlength
définissent les bornes de longueur.pattern
impose un format précis grâce à une expression régulière.
Le navigateur effectue ainsi une première vérification, rapide et ergonomique, sans requête au serveur. Mais cette vérification reste contournable : un utilisateur peut désactiver JavaScript, modifier le HTML, ou forger une requête manuelle.
La validation côté serveur : obligatoire
La vraie sécurité ne peut être garantie que côté serveur. Chaque donnée reçue doit être contrôlée avant d’être utilisée ou enregistrée.
Voici un exemple simple en PHP pour un formulaire d’inscription :
$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);
$pseudo = htmlspecialchars(trim($_POST['pseudo']));
$motdepasse = $_POST['motdepasse'];
if (!$email || strlen($pseudo) < 3 || strlen($motdepasse) < 8) {
die("Données invalides.");
}
Cette vérification empêche les saisies incorrectes, les balises HTML, et les chaînes malveillantes. Mais la sécurité ne s’arrête pas là : il faut également penser au chiffrement.
Le chiffrement des mots de passe et des données sensibles
Lorsqu’un utilisateur saisit son mot de passe, il est transmis via le protocole HTTP ou HTTPS. En HTTP, les données circulent en clair : n’importe quel intermédiaire peut les intercepter.
C’est pourquoi il est impératif d’utiliser le protocole HTTPS, qui chiffre toutes les communications entre le navigateur et le serveur à l’aide de TLS (Transport Layer Security).
Une fois le mot de passe reçu par le serveur, ne le stockez jamais en clair dans la base de données. On ne chiffre pas un mot de passe pour le relire ensuite, on le “hachage” de manière unidirectionnelle.
Exemple PHP :
$hash = password_hash($_POST['motdepasse'], PASSWORD_DEFAULT);
Et pour vérifier le mot de passe lors de la connexion :
if (password_verify($_POST['motdepasse'], $hash_enregistre)) {
// Connexion réussie
}
Le hachage transforme le mot de passe en une empreinte unique et irréversible. Même si votre base est piratée, les mots de passe resteront inexploitables.
Les attaques à prévenir
Plusieurs types d’attaques ciblent directement les champs input. Voici les plus fréquentes :
Injection SQL :
Un utilisateur malveillant tente d’injecter du code SQL dans un champ, par exemple :
' OR 1=1 --
Pour s’en prémunir, utilisez toujours des requêtes préparées avec PDO ou MySQLi.
$stmt = $pdo->prepare("INSERT INTO users (email, password) VALUES (?, ?)");
$stmt->execute([$email, $hash]);
Faille XSS (Cross-Site Scripting) :
L’attaquant insère du JavaScript dans un champ texte, comme :
<script>alert('Hacked');</script>
Pour éviter cela, nettoyez toujours les données affichées avec htmlspecialchars()
.
CSRF (Cross-Site Request Forgery) :
Une attaque où un site tiers force un utilisateur connecté à exécuter une action à son insu. La parade : ajouter un token CSRF dans vos formulaires.
$_SESSION['token'] = bin2hex(random_bytes(32));
Et l’envoyer avec votre formulaire :
<input type="hidden" name="token" value="<?= $_SESSION['token'] ?>">
Puis vérifier à la réception :
if (!hash_equals($_SESSION['token'], $_POST['token'])) {
die('Requête non autorisée');
}
Encodage et cryptographie appliquée
Le chiffrement ne s’applique pas uniquement aux mots de passe. Vous pouvez aussi chiffrer des données sensibles comme les emails, les adresses ou les numéros de téléphone avant de les stocker.
En PHP, l’extension openssl
permet de chiffrer et déchiffrer :
$cle = 'maCleSecrete123';
$donnee_chiffree = openssl_encrypt($email, 'AES-128-ECB', $cle);
C’est une bonne pratique si vous gérez des données confidentielles. Mais attention : la clé doit être stockée hors de la base de données, dans un fichier sécurisé inaccessible au public.
Accessibilité et ergonomie
Un bon formulaire n’est pas seulement fonctionnel : il doit être agréable à utiliser et accessible à tous. HTML5 facilite grandement cela grâce à des attributs simples mais essentiels.
L’importance des labels
Chaque champ doit être associé à un label explicite. Cela améliore l’accessibilité, notamment pour les lecteurs d’écran utilisés par les personnes malvoyantes.
<label for="email">Adresse email :</label>
<input type="email" id="email" name="email" required>
L’attribut for
doit correspondre à l’id du champ associé.
Cela permet également de cliquer sur le texte du label pour activer le champ, un petit détail très pratique sur mobile.
Les attributs d’aide et d’accessibilité
HTML5 propose plusieurs attributs pour améliorer l’expérience utilisateur :
placeholder
: affiche un texte d’aide à l’intérieur du champ.title
: affiche une info-bulle au survol.aria-*
: améliore la compatibilité avec les lecteurs d’écran.
Exemple :
<input type="email" placeholder="[email protected]" title="Entrez votre email professionnel" aria-label="Email">
Ces petits ajouts rendent vos formulaires plus clairs, plus agréables et plus inclusifs.
Donner du feedback à l’utilisateur
Un utilisateur doit toujours savoir si son action a réussi ou échoué. HTML5 permet d’utiliser les pseudo-classes CSS :valid
et :invalid
pour styliser les champs automatiquement selon leur état.
<style>
input:valid {
border: 2px solid green;
}
input:invalid {
border: 2px solid red;
}
</style>
Et voici un petit exemple dynamique :
<form>
<label for="mail">Email :</label>
<input type="email" id="mail" required>
<input type="submit" value="Valider">
</form>
Dès que l’utilisateur saisit un email valide, le champ devient vert. C’est simple, élégant et rassurant.
Interaction et personnalisation avec JavaScript
JavaScript permet de rendre vos formulaires interactifs, réactifs et intelligents.
Voyons quelques exemples concrets d’utilisation.
Vérification en temps réel
Vous pouvez détecter les saisies et afficher des messages dynamiques grâce à l’événement input
:
<label for="pseudo">Pseudo :</label>
<input type="text" id="pseudo" name="pseudo">
<span id="info"></span>
<script>
const champ = document.getElementById('pseudo');
const info = document.getElementById('info');
champ.addEventListener('input', () => {
if (champ.value.length < 3) {
info.textContent = "Le pseudo doit comporter au moins 3 caractères.";
info.style.color = "red";
} else {
info.textContent = "Pseudo valide.";
info.style.color = "green";
}
});
</script>
Ce type de retour immédiat améliore énormément l’expérience utilisateur.
Indicateur de force du mot de passe
Autre application très courante : afficher la “force” du mot de passe saisi.
<label for="mdp">Mot de passe :</label>
<input type="password" id="mdp" name="mdp">
<div id="force"></div>
<script>
const mdp = document.getElementById('mdp');
const force = document.getElementById('force');
mdp.addEventListener('input', () => {
const val = mdp.value;
let score = 0;
if (val.length >= 8) score++;
if (/[A-Z]/.test(val)) score++;
if (/[0-9]/.test(val)) score++;
if (/[^A-Za-z0-9]/.test(val)) score++;
if (score <= 1) force.textContent = "Faible";
else if (score === 2) force.textContent = "Moyen";
else force.textContent = "Fort";
});
</script>
Cette logique simple peut être améliorée avec des barres de progression et un style CSS coloré. C’est une fonctionnalité souvent appréciée, car elle rend la sécurité “visible”.
Prévention et feedback côté interface
JavaScript peut aussi servir à bloquer l’envoi du formulaire tant que toutes les conditions ne sont pas remplies :
<form id="formulaire">
<input type="checkbox" id="cgu"> J’accepte les conditions
<input type="submit" value="Envoyer" disabled>
</form>
<script>
const cgu = document.getElementById('cgu');
const submit = document.querySelector('input[type=submit]');
cgu.addEventListener('change', () => {
submit.disabled = !cgu.checked;
});
</script>
Cela évite bien des oublis et garantit une saisie conforme aux attentes.
Pour aller plus loin : Validation d’un formulaire en JS
Tableau récapitulatif des champs input HTML5
Il existe aujourd’hui plus de vingt types différents de champs input reconnus par HTML5. Certains sont très répandus, d’autres plus spécialisés, voire partiellement supportés par certains navigateurs anciens.
Pour vous y retrouver facilement, voici un tableau complet recensant chaque type, sa fonction principale, un exemple d’utilisation et son comportement par défaut dans le navigateur.
Ce tableau peut aussi servir de fiche de révision ou de ressource de référence lorsque vous codez vos formulaires.
Type | Description | Exemple d’utilisation |
---|---|---|
text | Champ de saisie libre sur une seule ligne pour du texte brut. | <input type="text" name="nom" placeholder="Votre nom"> |
password | Masque la saisie du texte, utilisé pour les mots de passe. | <input type="password" name="mdp" minlength="8" required> |
Valide automatiquement le format d’une adresse email. | <input type="email" name="email" placeholder="[email protected]"> | |
url | Vérifie que le contenu ressemble à une adresse web valide. | <input type="url" name="site" placeholder="https://votresite.fr"> |
tel | Champ pour numéro de téléphone. Aucun format imposé par défaut. | <input type="tel" name="telephone" pattern="[0-9]{10}"> |
number | Autorise uniquement les valeurs numériques, avec limites possibles. | <input type="number" min="0" max="100" step="5"> |
range | Barre de sélection d’une valeur dans une plage définie. | <input type="range" min="0" max="10" value="5"> |
color | Permet de choisir une couleur via une palette intégrée. | <input type="color" value="#ff0000"> |
date | Champ avec un calendrier intégré pour choisir une date. | <input type="date" name="naissance"> |
datetime-local | Combine la sélection d’une date et d’une heure locales. | <input type="datetime-local" name="rdv"> |
month | Permet de choisir un mois et une année uniquement. | <input type="month" name="periode"> |
week | Permet de sélectionner une semaine spécifique de l’année. | <input type="week" name="semaine"> |
time | Champ pour choisir une heure locale. | <input type="time" name="heure"> |
file | Ouvre un sélecteur de fichiers pour l’envoi de documents ou images. | <input type="file" accept="image/*" multiple> |
checkbox | Case à cocher permettant des sélections multiples. | <input type="checkbox" name="newsletter"> S’abonner |
radio | Bouton d’option, choix unique parmi plusieurs possibilités. |
<input type="radio" name="genre" value="H"> Homme
<input type="radio" name="genre" value="F"> Femme |
hidden | Champ invisible servant à transmettre une donnée cachée (token, ID…). | <input type="hidden" name="csrf_token" value="123ABC"> |
search | Champ de recherche, souvent avec un bouton d’effacement intégré. | <input type="search" name="q" placeholder="Rechercher..."> |
submit | Bouton de validation du formulaire. | <input type="submit" value="Envoyer"> |
reset | Réinitialise tous les champs du formulaire à leurs valeurs par défaut. | <input type="reset" value="Annuler"> |
button | Bouton libre pouvant être lié à un script JavaScript. | <input type="button" value="Cliquer" onclick="alert('Bonjour !')"> |
image | Soumet un formulaire sous forme d’image cliquable. | <input type="image" src="envoyer.png" alt="Envoyer"> |
Les champs input HTML5 ne sont pas de simples zones de texte : ce sont des points de contact essentiels entre l’utilisateur et votre site. En les maîtrisant, vous améliorez non seulement l’ergonomie de vos formulaires, mais aussi leur fiabilité, leur sécurité et leur accessibilité.
Grâce aux nouveautés de HTML5, vous pouvez désormais gérer les dates, les couleurs, les fichiers ou les adresses sans recourir à des scripts complexes. Mais rappelez-vous : la validation côté navigateur est une aide, pas une barrière. La véritable sécurité dépend toujours du traitement côté serveur et du respect des bonnes pratiques : validation, hachage, chiffrement et vérification des entrées.
Enfin, l’expérience utilisateur doit rester au cœur de votre réflexion. Un champ bien choisi, bien décrit et bien validé rend votre site plus professionnel, plus inclusif et plus rassurant. Les formulaires sont la première impression qu’un utilisateur aura de la qualité de votre travail — faites-en un exemple de clarté et de sécurité.
Et surtout, expérimentez.
Créez, testez, cassez, recommencez : c’est en manipulant chaque type d’input que vous comprendrez pleinement leur puissance. HTML5 est un outil fabuleux, mais c’est votre rigueur et votre curiosité qui en feront un véritable allié.