FICHE
6
LES FORMULAIRES
1.Rappel des recommandations 5 et 10
des WCAG 1.0 :
Il n'y a pas de recommandation spécifique aux
formulaires dans les WCAG mais plusieurs points de contrôle traitent
des formulaires.
Points de contrôle : 10.2
(Priorité 2) ; 12.4
(Priorité 2) ;
9.4 (Priorité 3) ; 9.5
(Priorité 3) ;
10.4 (Priorité 3)
Raisons de cette recommandation
Un formulaire construit de façon incorrecte entraîne
des difficultés de compréhension et de navigation.
2. Ce qu'il faut faire
La règle générale
Veiller à organiser logiquement les éléments
d'un formulaire, les identifier clairement et s'assurer que la technologie
utilisée pour la validation est accessible avec tous les navigateurs.
Accéder au formulaire grâce au clavier
- Spécifier l'ordre de circulation avec la touche
TABULATION
Il est possible de spécifier l'ordre de tabulation au sein des
éléments (par ordre, "champ2", "champ1",
"submit") avec "tabindex".
| Exemple :
<FORM action="submit" method="post">
<INPUT tabindex="2" type="text" name="champ1">
<INPUT tabindex="1" type="text" name="champ2">
<INPUT tabindex="3" type="submit" name="submit">
</FORM>
|
Donner un nom explicite aux contrôles des formulaires
Utiliser la balise "LABEL" (reliée aux
champs correspondant grâce aux attributs "for" et "id",
voir exemple ci-dessous).
|
Exemple :
<LABEL for="firstname">First name
: </LABEL>
<INPUT type="text" id="firstname" tabindex="1">
|
- Fournir des raccourcis clavier pour les formulaires
L'exemple suivant spécifie "ALT + U" comme raccourci
(utilisation d'"accesskey").
Ce raccourci amène directement au champ de saisie où l'utilisateur
peut saisir le texte.
Exemple :
<FORM action="submit" method="post">
<LABEL for="user" accesskey="U">name</LABEL>
<INPUT type="text" id="user">
</FORM>
|
Grouper les contrôles des formulaires
Grouper l'information lorsque c'est naturel et approprié.
Quand les contrôles de formulaire peuvent être groupés
en unités logiques, utiliser l'élément "FIELDSET
" et donner un nom à ces unités avec l'élément
" LEGEND ".
|
Exemple :
<FORM action="http://somesite.com/adduser"
method="post">
<FIELDSET>
<LEGEND>Personal information</LEGEND>
<LABEL for="firstname">First name: </LABEL>
<INPUT type="text" id="firstname" tabindex="1">
<LABEL for="lastname">Last name: </LABEL>
<INPUT type="text" id="lastname" tabindex="2">
...more personal information...
</FIELDSET>
<FIELDSET>
<LEGEND>Medical History</LEGEND>
...medical history information...
</FIELDSET>
</FORM>
|

L'information est groupée grâce
à l'élément "FIELDSET"
Validation des formulaires
Eviter la vérification ou la validation
d'un ou plusieurs éléments d'un formulaire (champ de saisie
ou bouton de validation par exemple) à l'aide de JavaScript. Il
est préférable de mettre en place des mécanismes
de vérification et de validation directement au niveau du serveur.
Permettre la validation d'un champ de saisie
par la touche entrée (focus sur le bouton de validation).
- Formulaires validés côté client
par JavaScript / Formulaires validés côté serveur
par CGI (PHP, ASP
)
Les formulaires permettent le plus souvent de récupérer
des informations concernant les internautes, en vue de leur envoyer des
e-mails ou des courriers postaux (exemple : formulaire d'inscription).
Le rôle du script est de vérifier les informations saisies
par l'internaute afin de contrôler le format ou le contenu.
Pour cela, il y a deux solutions : valider les
champs de saisie sur le poste client ou les valider après soumission
sur le serveur.
Sur le poste client (l'ordinateur de l'internaute), le
seul moyen de valider les champs est d'utiliser du JavaScript, car ce
langage est interprété par les navigateurs les plus courants
tels que Internet Explorer ou Netscape. L'avantage de cette solution
est d'éviter les allers-retours avec le serveur, la surcharge de
celui-ci. Elle permet à l'internaute de remplir correctement et
rapidement un formulaire.
Cependant, l'inconvénient principal de ce langage est qu'il
n'est pas interprété par certains logiciels,
les navigateurs textuels notamment (Lynx, Braillesurf
). Ces derniers
sont souvent utilisés par les déficients visuels pour leur
simplicité de navigation et de présentation de l'information.
Donc, pour un internaute navigant avec ce type de logiciel, ces formulaires
sont inaccessibles car le Javascript n'étant pas interprété,
le formulaire ne peut être validé ce qui rend souvent l'inscription
impossible.
Côté serveur, on peut aussi vérifier
la validité des champs de saisie et renvoyer la page avec les champs
non ou mal, remplis ainsi que des indications afin de mieux remplir ces
derniers.
L'inconvénient est que cette méthode risque, en cas d'affluence
sur le site, de faire ralentir le serveur (dans le cas où un grand
nombre de personnes seraient connectées sur le même formulaire,
et validant ce dernier au même instant).
Le gros avantage de cette méthode est qu'elle ne pose aucun problème
au navigateur puisqu'elle est exécutée sur le serveur.
Ainsi, les informations transmises sont de simples pages HTML qui sont
accessibles à tous.
Conclusion : il faut faire les deux. Vérifier
les informations sur le serveur même s'il y a une vérification
en JavaScript.
|
Exemple de code source :
Source d'un formulaire validé côté
serveur ( code source PHP). Seuls les champs mal remplis sont demandés
à nouveau (dans l'exemple, on vérifie si le code postal
est bien une suite de chiffres).
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.0 Transitional//EN">
<HTML lang="fr">
<HEAD>
<META http-equiv="Content-Type" content="text/html;
charset=iso-8859-1">
<TITLE>Formulaire</TITLE>
<LINK rel="stylesheet" type="text/css" href="my.css">
</HEAD>
<BODY>
<FORM action="formulaire.htm" method="POST"
name="formulaire"
enctype="multipart/form-data" title="Formulaire d'inscription">
<TABLE>
<?php if (!$nom) {?>
<TR>
<TD>Nom :</TD>
<TD><INPUT TYPE="TEXT" name="nom"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"nom\" value=\"$nom\">";}?>
<?php if (!$prenom) {?>
<TR>
<TD>Prénom :</TD>
<TD><INPUT TYPE="TEXT" name="prenom"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"prenom\" value=\"$prenom\">";}?>
<?php if (!$email) {?>
<TR>
<TD>Email :</TD>
<TD><INPUT TYPE="TEXT" name="email"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"email\" value=\"$email\">";}?>
<?php if (!$adresse) {?>
<TR>
<TD>adresse :</TD>
<TD><INPUT TYPE="TEXT" name="adresse"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"adresse\" value=\"$adresse\">";}?>
<?php if (!$cp || !ereg("^[0-9]{5}$",$cp))
{?>
<TR>
<TD>CP <?php if ($cp!="" && !ereg("^[0-9]{5}$",$cp))
echo "Votre Code Postal doit être composé de 5
chiffres !!!"
?> :
</TD>
<TD><INPUT TYPE="TEXT" name="cp"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"cp\" value=\"$cp\">";}?>
<?php if (!$ville) {?>
<TR>
<TD>Ville :</TD>
<TD><INPUT TYPE="TEXT" name="ville"></TD>
</TR>
<?php } else { echo "<INPUT TYPE=\"hidden\"
name=\"ville\" value=\"$ville\">";}?>
</TABLE>
<INPUT TYPE="SUBMIT" value="Valider">
</FORM>
</BODY>
</HTML>
|
Résultat avec Internet Explorer :

Le formulaire est renseigné. Il y a une erreur
dans le champ "Code Postal"
Le message d'erreur est une page HTML simple renvoyée
par le serveur.
3. Applications à l'aide des
éditeurs HTML
A l'heure actuelle, des attributs HTML comme "legend",
"label"
ne sont pas intégrés dans les éditeurs
HTML les plus courants. Ils sont à implémenter manuellement,
directement dans le code source des pages.
- Avec Frontpage
Utiliser l'onglet approprié.
- Avec Dreamweaver
F10 pour obtenir le code source de la page.
4.Exemples
rencontrés sur les sites évalués
Le site de la Caisse des Allocations
Familiales (www.caf.fr) fournit plusieurs bons exemples de formulaires
accessibles aussi bien grâce à leur système de validation
que dans leur conception visuelle.
retour aux fiches
|