Previous Up Next

Chapter 8  Les Formulaires en HTML

8.1  Introduction

Tôt ou tard, tout concepteur de sites Web doit recourir aux formulaires. Ceux-ci constituent un élément important du développement Web, puisqu'ils permettent de pouvoir recueillir les informations des visiteurs.

Fonctionnellement ce recueil des données se situe coté client, une fois effectué cet ensemble de données est transmis au serveur pour traitement, le résultat du traitement (une page HTML ) sert de retour à l'utilisateur.

Normalement, les formulaires ne sont utilisés que sur des serveurs pouvant lancer des programmes (CGI-BIN, ASP, PHP3, etc...) pour en faire un traitement, ce qui n'est pas forcément le cas d'un provider ordinaire (fournisseur d'accès internet) ou autre "hébergeur" de pages web

8.2  Définir la feuille de formulaire

Le Tag Form: <FORM> et </FORM>

Sa fonction consiste à délimiter les éléments constituant le formulaire et à spécifier les paramètres du formulaire qui sont le nom, l'action, la méthode d'envoi du formulaire au serveur et le type d'encodage.

8.2.1  La syntaxe du formulaire

  <FORM NAME=[nom] ACTION=[action] METHOD=[méthode d'envoi]
      ENCTYPE=[méthode d'encodage]>
     .......
      éléments de formulaire
     .......
  </FORM>
 

8.2.2  Les attributs de la balise FORM

Ces attributs ne sont pas tous standard, les navigateurs WebTV en définissent un grand nombre supplémentaire.


Name: Le nom du formulaire: utilisé pour y faire référence lors de l'utilisation de script coté client.





Action: Cet attribut détermine le type de destinataire ou si l'on veut l'outil qui sera utilisé pour traiter le formulaire. Les plus communs sont mailto et http. Le premier permet de transmettre les données du formulaire par courrier électronique, tandis que le deuxième sert habituellement à spécifier un CGI .

Exemple: http
  <FORM ACTION="/cgi-shl/mailto.exe" METHOD="post">
     éléments de formulaire
     ...
  </FORM>




METHOD Deux types de méthode concernent la façon dont l'information du formulaire peut être émise par le client:


Figure 8.1: Méthodes du formulaire




GET constitue la méthode par défaut lorsque celle-ci n'est pas spécifiée. Toutefois, la méthode POST est plus efficace et permet le traitement d'une quantité plus importante de données; La chaîne QUERY_STRING étant limitée par la taille des variables d'environnement, c'est donc cette dernière qui est presque toujours utilisée.





ENCTYPE spécifie l'encodage utilisé pour la forme que prendra le contenu du formulaire. Ce paramètre ne peut être utilisé qu'accompagné par la méthode POST. ENCTYPE peut prendre plusieurs valeurs:

8.2.3  Les composants du formulaire

Il existe plusieurs type de boutons/menus/champs/formulaires il serait fastidieux de tous les examiner en détail ici, mais en voici une petite liste:

La figure 8.2 fournit quelques exemples de ces composants:


Figure 8.2: Principaux attributs de la balise FORM


Remarques: Pour obtenir une notion de session avec des formulaires, c'est à dire créer plusieurs formulaires sous la forme d'une seule transaction, il faut: faire constituer les formulaires de façon dynamique par les script coté serveur, qui doit conserver les valeurs des formulaires précédents dans des champs <input type='hidden' >.

8.3   Recourir à un CGI pour traiter le contenu du formulaire

 <FORM ACTION="TraiteFormulaire.php3" METHOD="POST">
    Votre nom : <INPUT TYPE=TEXT NAME=nom> // création d'une zone de saisie
    Votre age : <INPUT TYPE=TEXT NAME=age>
    <INPUT TYPE=SUBMIT NAME="Ok">          // création d'un bouton OK
 </FORM>
Lorsque le bouton Ok est validé, la page TraiteFormulaire.php3 est appelée. Cette dernière contient des ordres PHP pour formatter une page html dynamique en fonction des données du formulaire tels que:
     ...
     Bonjour <?php echo $nom; ?>, <P>
     vous avez bien <?php echo $age; ?> ans <BR>
     cette année ?
     ...
     
ou pour relancer le formulaire avec les noms et l'âge déja saisi
    ...
    Bonjour <?php echo $nom; ?>, <P>
    vous avez bien <?php echo $age; ?> ans <BR>
    cette année ?
    ...
   <FORM ACTION="TraiteFormulaire.php3" METHOD="POST">
     Votre nom : <INPUT TYPE=TEXT NAME= <%= $nom?>>   // on utilise les variables
     Votre age : <INPUT TYPE=TEXT NAME=<%= $age ?>>   // du premier formulaire 
     <INPUT TYPE=SUBMIT NAME="Ok">          
 </FORM>
   
enfin pour créer une notion de session, c'est à dire plusieurs formulaires associés sous forme d'une session:
    ...
    Maintenant Monsieur  <php echo $nom; ?>,  <P>
        ...
   <FORM ACTION="TraiteFormulaire2.php3" METHOD="POST">
      <INPUT TYPE=HIDDEN NAME= <%= $nom?>>    
      <INPUT TYPE=HIDDEN NAME=<%= $age ?>>                                                 
     Votre prénom: <INPUT TYPE=TEXT NAME=prenom>
     <INPUT TYPE=SUBMIT NAME="Ok">
  </FORM>
   

8.3.1  Exemple d'utilisation d'un formulaire associé à une BD

Soit le formulaire correspondant à la figure 8.3)


Figure 8.3: Un exemple de formulaire


décrit par le fichier insertClient.html
<HTML><HEAD><TITLE>Exemple</TITLE></HEAD>
<BODY>
  <center>                                                              
   <form method="post" action="insertClient.php">   // sur action utilisateur
    <table>                                         // le script insertClient.php sera 
     <tr>                                           // lancé coté serveur
      <td>Nom</td>
      <td><input type="text" name="nom"></td>
      <td>E-mail</td>
      <td><input type="text" name="email"></td>
     </tr><tr>
      <th colspan=4> <input type="Submit" value="Ajouter"> </th>
     </tr>
    </table>
   </form>
  </center>
 </BODY></HTML>
et son script associé insertClient.php
<?// Paramètres du SGBD
     $host = "localhost"; // voir hébergeur
     $user = "login"; 
     $pass = "password"; // vide en local
     $bdd = "ma_base"; // nom de la BD
  // connexion au SGBD
     @mysql_connect($host,$user,$pass)
         or die("Impossible de se connecter");
     @mysql_select_db("$bdd")
         or die("Impossible de se connecter");
     $table="ma_table";
  // Ajout du nouveau client
     $query = "INSERT INTO $table(nom,email) VALUES('$nom','$email')"; 
     $result = mysql_query($query);
     mysql_close();
 ?>

Previous Up Next