Je pense qu'un petit rappel s'impose, tout du moins sur le fonctionnement de ces chers formulaires !
Tout d'abord, dans des formulaires web, vous pouvez trouver plusieurs sortes de champs.
- Des champs de texte :
<input type="text" name="nom" />
- Des boutons (de type button ou submit) :
<input type="button" name="nom" value="Valider" />
- Des champs cachés :
<input type="hidden" name="nom" value="je suis caché..." />
- Des champs de mot de passe :
<input type="password" name="nom" value="je suis caché..." />
- Des cases à cocher :
<input type="checkbox" name="nom" value="OUI" /> <input type="checkbox" name="nom2" value="NON" />
- Des boutons radio :
<input type="radio" name="nom" value="OUI" /> <input type="radio" name="nom" value="NON" />
- Des liste simples ou multiples :
<select name="nom">
<option value="1">Choisissez</option>
</select>
- Des zones de texte :
<textarea name="nom">
Du texte
</textarea>
Tous ces champs sont porteurs d'informations qui sont transmises vers une page web via un formulaire.
Un formulaire, en HTML, c'est tout simplement ceci :
Code : HTML | <form name="formulaire" action="/traitement" method="post">
<!-- Différents champs de formulaires -->
</form>
|
Ici, nous avons un formulaire :
- qui s'appelle "formulaire" ;
- qui envoie les données des champs vers la page "/traitement" ;
- et qui envoie ces informations via une requête de type "post".
À quoi sert tout ceci ?
Le nom du formulaire sert surtout en Javascript lorsque vous voulez vérifier les données de celui-ci...
Les autres servent pour la communication avec le serveur :
- l'attribut action permet au navigateur de savoir vers quelle page envoyer les données ;
- l'attribut method, lui, permet de savoir comment on envoie les données.
Nous aborderons l'attribut
action dans la sous-partie suivante ; pour le moment, nous allons nous atteler à l'attribut
method.
Vous savez déjà que, par défaut, les informations entre pages web sont communiquées en
GET ; eh bien, pour les formulaires, c'est pareil :
par défaut, les informations envoyées via un formulaire sont envoyés en GET !
J'ai fait un formulaire :
Son code source est le suivant :
Code : JSP 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 | <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form name="firstForm" action="firstFormAction.do"
style="width:50%;margin:auto;background-color:#c1d9fc;padding-bottom:15px;">
<h2 style="text-align:center;color:white;background-color:#6683b1;">Formulaire HTML</h2>
<p style="text-align:center;">Nom : <input type="text" name="nom" /></p>
<p style="text-align:center;">Prénom : <input type="text" name="prenom" /></p>
<p style="text-align:center;width:50%;margin:auto;"><input type="submit" name="Valider" value="Valider"/></p>
</form>
</body>
</html>
|
La page qui reçoit les informations ressemble à ça :
Nous verrons le code source de la page recevant les informations très bientôt... En fait, dans le sous-chapitre qui suit... Mais, pour le moment, le sujet n'est pas là !
Ce formulaire n'a pas de méthode de transit d'informations déclarée, donc, les données passent en GET et en voici la preuve :
Et voici les en-têtes HTTP correspondantes à la requête envoyée :
Vous pouvez clairement voir que les données sont directement visibles dans l'URL du navigateur ainsi que dans l'URL de la requête HTTP...
Par contre, voici ce que j'ai obtenu avec le même formulaire ayant l'attribut
method clairement renseigné avec
post :
Les données ont bien transité mais elles n'apparaissent plus dans l'URL du navigateur ni dans l'URL de la requête HTTP !
Ceci est la principale différence entre les requêtes HTTP de type GET et celles de type POST, mais il en existe deux autres.
La taille maximale d'une URL est d'environ 2 000 caractères ! Alors qu'elle est quasiment illimitée avec une requête de type POST !
Par contre, avec une requête de type POST, lorsque vous êtes sur la page ayant reçue les informations, si vous rechargez la dite page avec F5 ou CTRL + F5, le navigateur vous demandera si vous souhaitez renvoyer les données ! Ceci peut engendrer des erreurs de taille : dupliquer des données par exemple...
Donc, pour simplifier, si votre formulaire est destiné à faire de l'affichage, vous pouvez utiliser des requêtes de type GET.
Par contre, si votre formulaire est utilisé afin de renseigner des champs vitaux pour l'application, mieux vaut utiliser les requêtes de type POST : les utilisateurs ne voient pas le nom de vos champs, ni la valeur de ceux-ci et, en plus, la taille est quasiment illimitée. Mais faites attention à la réexpédition des données !
Et pour l'attribut "action" ? Il a aussi une valeur par défaut ?
Oui ! Par défaut, si vous ne renseignez pas cet attribut, les données de cette page seront envoyées à elle-même !
