Toute page HTML peut être enrichie de formulaires interactifs, qui invitent vos visiteurs à renseigner des informations : saisir du texte, sélectionner des options, valider avec un bouton…
<form> </form> : C’est la balise principale du formulaire, elle permet d’en indiquer le début et la fin.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
<p>Texte avant le formulaire</p>
<form>
<p>Texte à l'intérieur du formulaire</p>
</form>
<p>Texte après le formulaire</p> Notez qu’il faut obligatoirement mettre des balises de type block (comme
) à l’intérieur de votre formulaire si vous souhaitez y faire figurer du texte.
On va prendre un exemple, supposons que votre visiteur vienne de taper un commentaire dans votre formulaire, par exemple un message qu’il aimerait publier sur vos forums. Ce message doit être envoyé pour que vous puissiez le recevoir et l’afficher pour vos autres visiteurs.
Ainsi, on va ajouter deux attributs à la balise
<p>Texte avant le formulaire</p>
<form method="post" action="traitement.php">
<p>Texte à l'intérieur du formulaire</p>
</form>
<p>Texte après le formulaire</p> Elle ne peut y écrire qu’une seule ligne. Elle sert à saisir des textes courts, par exemple un pseudo.

Pour insérer une zone de texte dans une ligne, on va utiliser la balise<input />.
À chaque fois, c’est la valeur de son attributtypequi va changer.
Pour créer une zone de texte à une ligne, on doit écrire :
<input type="text" /> Pour donner un nom à un élément de formulaire, on utilise l’attributname. Ici, on va supposer qu’on demande au visiteur de rentrer son pseudo :
<input type="text" name="pseudo" /> Le rôle de la balise est d’informer le visiteur sur ce qu’il doit écrire <label>:
<form method="post" action="traitement.php">
<p>
<label>Votre pseudo</label> : <input type="text" name="pseudo" />
</p>
</form> Puis, il faut lier le label à la zone de texte. On doit donner un nom à la zone de texte avec l’attributid. De plus, pour lier le label au champ, il faut lui donner un attributforqui a la même valeur que l’iddu champ.
<form method="post" action="traitement.php">
<p>
<label for="pseudo">Votre pseudo</label> : <input type="text" name="pseudo" id="pseudo" />
</p>
</form> On peut ajouter un certain nombre d’autres attributs à la balise<input />pour personnaliser son fonctionnement :
size.maxlength.value.placeholder. Cette indication disparaîtra dès que le visiteur aura cliqué à l’intérieur du champ.Dans l’exemple suivant, la zone de texte contient une indication permettant de comprendre ce qu’il faut saisir ; le champ fait 30 caractères de long mais on ne peut écrire que 10 caractères maximum à l’intérieur :
<form method="post" action="traitement.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" placeholder="Ex : Zozor" size="30" maxlength="10">
</p>
</form> Vous pouvez facilement faire en sorte que la zone de texte se comporte comme une « zone de mot de passe », c’est-à-dire une zone où on ne voit pas à l’écran les caractères saisis. Pour créer ce type de zone de saisie, utilisez l’attributtype="password".
<form method="post" action="traitement.php">
<p>
<label for="pseudo">Votre pseudo :</label>
<input type="text" name="pseudo" id="pseudo" />
<br />
<label for="pass">Votre mot de passe :</label>
<input type="password" name="pass" id="pass" />
</p>
</form>
Pour créer une zone de texte multiligne, on utilise la balise <textarea> </textarea>. Comme pour tout autre élément du formulaire, il faut lui donner un nom avecnameet utiliser unlabelqui explique de quoi il s’agit.
<form method="post" action="traitement.php">
<p>
<label for="ameliorer">Comment pensez-vous que je pourrais améliorer mon site ?</label><br />
<textarea name="ameliorer" id="ameliorer"></textarea>
</p>
</form>
On peut modifier la taille du<textarea>de deux façons différentes.
widthetheightau<textarea>.rowsetcolsà la balise<textarea>. Le premier indique le nombre de lignes de texte qui peuvent être affichées simultanément, et le second le nombre de colonnes.Pourquoi ouvre-t-on la balise<textarea>pour la fermer juste après ?
Vous pouvez pré-remplir le<textarea>avec une valeur par défaut. Dans ce cas, on n’utilise pas l’attributvalue: on écrit tout simplement le texte par défaut entre la balise ouvrante et la balise fermante !
Vous pouvez demander à saisir une adresse e-mail :
<input type="email" /> Avec le typeurl, on peut demander à saisir une adresse absolue (commençant généralement parhttp://) :
<input type="url" /> Ce champ est dédié à la saisie de numéros de téléphone :
<input type="tel" /> Ce champ permet de saisir un nombre entier :
<input type="number" /> Le champ s’affichera en général avec des petites flèches pour changer la valeur.

Vous pouvez personnaliser le fonctionnement du champ avec les attributs suivants :
min: valeur minimale autorisée.max: valeur maximale autorisée.step: c’est le « pas » de déplacement. Si vous indiquez un pas de 2, le champ n’acceptera que des valeurs de 2 en 2 (par exemple 0, 2, 4, 6…).Le typerangepermet de sélectionner un nombre avec un curseur (aussi appelé slider), comme à la figure suivante :
<input type="range" /> 
Vous pouvez utiliser là aussi les attributsmin,maxetsteppour restreindre les valeurs disponibles.
Ce champ permet de saisir une couleur :
<input type="color" />
Différents types de champs de sélection de date existent :
date: pour la date (05/08/1985 par exemple) ;time: pour l’heure (13:37 par exemple) ;week: pour la semaine ;month: pour le mois ;datetime: pour la date et l’heure (avec gestion du décalage horaire) ;datetime-localpour la date et l’heure (sans gestion du décalage horaire).<input type="date" />
On peut créer un champ de recherche comme ceci :
<input type="search" /> Le navigateur décide ensuite comment afficher le champ de recherche. Ainsi, il peut ajouter une petite loupe au champ pour signifier que c’est un champ de recherche et éventuellement mémoriser les dernières recherches effectuées par le visiteur.
On utilise à nouveau la balise<input />, en spécifiant cette fois le typecheckbox:
<input type="checkbox" name="choix" /> Rajoutez un<label>bien placé, et le tour est joué !
On peut faire en sorte qu’une case soit cochée par défaut avec l’attributchecked:
<input type="checkbox" name="choix" checked /> Normalement, tout attribut possède une valeur. Dans le cas présent, en revanche, ajouter une valeur n’est pas obligatoire : la présence de l’attribut suffit à faire comprendre à l’ordinateur que la case doit être cochée.
Si cela vous perturbe, sachez que vous pouvez donner n’importe quelle valeur à l’attribut (certains webmasters écrivent parfoischecked="checked"mais c’est un peu redondant !). Dans tous les cas, la case sera cochée.
Les zones d’options vous permettent de faire un choix (et un seul) parmi une liste de possibilités. Elles ressemblent un peu aux cases à cocher mais il y a une petite difficulté supplémentaire : elles doivent être organisées en groupes. Les options d’un même groupe possèdent le même nom (name), mais chaque option doit avoir une valeur (value) différente.
La balise à utiliser est toujours un<input />, avec cette fois la valeurradiopour l’attributtype.
Essayez d’enlever les attributsname, vous verrez qu’il devient possible de sélectionner tous les éléments d’options. Or, ce n’est pas ce que l’on veut, c’est pour cela qu’on les « lie » entre eux en leur donnant un nom identique.
Vous noterez que cette fois on a choisi uniddifférent dename. En effet, les valeurs denameétant identiques, on n’aurait pas pu différencier les id (et vous savez bien qu’uniddoit être unique !). Voilà donc pourquoi on a choisi de donner à l’idla même valeur quevalue.
Si vous avez deux zones d’options différentes, il faut donner unnameunique à chaque groupe, comme ceci :
L’attributcheckedest, là aussi, disponible pour sélectionner une valeur par défaut.
Les listes déroulantes sont un autre moyen élégant de faire un choix parmi plusieurs possibilités. On va utiliser la balise<select> </select>qui indique le début et la fin de la liste déroulante. On ajoute l’attributnameà la balise pour donner un nom à la liste.
Puis, à l’intérieur du<select> </select>, nous allons placer plusieurs balises<option> </option>(une par choix possible). On ajoute à chacune d’elles un attributvaluepour pouvoir identifier ce que le visiteur a choisi.
Si vous voulez qu’une option soit sélectionnée par défaut, utilisez cette fois l’attributselected:
<option value="canada" selected>Canada</option> Vous pouvez aussi grouper vos options avec la balise<optgroup> </optgroup>. On va séparer les pays en fonction de leur continent :
Si votre formulaire grossit et comporte beaucoup de champs, il peut être utile de les regrouper au sein de plusieurs balises<fieldset>. Chaque<fieldset>peut contenir une légende avec la balise<legend>.
Vous pouvez placer automatiquement le curseur dans l’un des champs de votre formulaire avec l’attributautofocus. Dès que le visiteur chargera la page, le curseur se placera dans ce champ.
Par exemple, pour que le curseur soit par défaut dans le champprenom:
<input type="text" name="prenom" id="prenom" autofocus /> Vous pouvez faire en sorte qu’un champ soit obligatoire en lui donnant l’attributrequired.
<input type="text" name="prenom" id="prenom" required /> Le navigateur indiquera alors au visiteur, si le champ est vide au moment de l’envoi, qu’il doit impérativement être rempli.
Les anciens navigateurs, qui ne reconnaissent pas cet attribut, enverront le contenu du formulaire sans vérification. Pour ces navigateurs, il sera nécessaire de compléter les tests avec, par exemple, des scripts JavaScript.
On dispose de pseudo-formats en CSS pour changer le style des éléments requis (:required) et invalides (:invalid). N’oubliez pas non plus que vous disposez du pseudo-format:focuspour changer l’apparence d’un champ lorsque le curseur se trouve à l’intérieur.
:required2{background-color: red;} Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo
Il ne nous reste plus qu’à créer le bouton d’envoi. Là encore, la balise<input />vient à notre secours. Elle existe en quatre versions :
type="submit": le principal bouton d’envoi de formulaire. C’est celui que vous utiliserez le plus souvent. Le visiteur sera conduit à la page indiquée dans l’attributactiondu formulaire.type="reset": remise à zéro du formulaire.type="image": équivalent du boutonsubmit, présenté cette fois sous forme d’image. Rajoutez l’attributsrcpour indiquer l’URL de l’image.type="button": bouton générique, qui n’aura (par défaut) aucun effet. En général, ce bouton est géré en JavaScript pour exécuter des actions sur la page. Nous ne l’utiliserons pas ici.On peut changer le texte affiché à l’intérieur des boutons avec l’attributvalue.
Pour créer un bouton d’envoi on écrira donc par exemple :
<input type="submit" value="Envoyer" /> Lorsque vous cliquez sur le bouton « Envoyer », le formulaire vous amène alors à la page indiquée dans l’attributaction. Souvenez-vous, nous avions imaginé une page fictive :traitement.php.
Le problème, c’est que vous ne pouvez pas créer cette page seulement en HTML. Il est nécessaire d’apprendre un nouveau langage, comme le PHP, pour pouvoir « récupérer » les informations saisies et décider quoi en faire. Cela tombe bien, j’ai aussi rédigé un cours sur le langage PHP pour ceux que cela intéresse !
<form>à laquelle il faut ajouter deux attributs :method(mode d’envoi des données) etaction(page vers laquelle le visiteur sera redirigé après envoi du formulaire et qui traitera les informations).<input />. La valeur de son attributtypepermet d’indiquer quel type de champ doit être inséré :text: zone de texte ;password: zone de texte pour mot de passe ;tel: numéro de téléphone ;checkbox: case à cocher ;<label>permet d’écrire un libellé. On l’associe à un champ de formulaire avec l’attributfor, qui doit avoir la même valeur que l’iddu champ de formulaire.required, faire en sorte qu’il soit sélectionné par défaut avecautofocus, donner une indication dans le champ avecplaceholder…