Les champs de données sont le plus souvent obtenus par la syntaxe :
<INPUT type="TYPE" name="NAME">
La propriété name contient le nom que vous choisissez de donner à la variable entrée dans le champ INPUT. Le programme recevra la valeur entrée sous la forme NAME=xxxxx. Par exemple, si on écrit <INPUT type="text" name="nom">, l a page Web contiendra un champ où l'utilisateur peut entrer un texte. S'il tape "Laurent" dans cet espace, le programme recevra la chaîne de caractères : nom=Laurent.
La propriété type peut prendre différentes valeurs , selon le type de champ d'entrée qu'on souhaite afficher :
Type | Effet obtenu |
---|---|
"text" | Affiche un rectangle dans lequel on peut entrer du texte. |
"password" | Affiche un rectangle dans lequel on peut entrer du texte masqué par ***. Utile pour entrer des mots de passe. |
"checkbox" | Affiche des cases carrées parmi lesquelles on peut cocher autant de valeurs différentes qu'on le souhaite. Les valeurs cochées seront toutes affectées à la variable associée. |
"radio" | Affiche des cases rondes parmi lesquelles on ne peut cocher qu'une valeur à l'exception des autres. |
"hidden" | Ne provoque aucun affichage par le browser. Mais l'appui sur le bouton de validation provoquera la transmission de la variable appelée "NAME" de valeur value="xxxxx" comme si l'utilisateur l'avait entrée. Cette commande est utile lorsqu'on utilise plusieurs programmes CGI à la suite. Les programmes peuvent ainsi se transmettre des paramètres automatiquement, sans obliger l'utilisateur à réentrer à chaque fois les informations données aux programmes précéde nts. |
"reset" | Affiche un bouton dont la validation provoque la réinitialisation de tous les champs à leur valeur par défaut. |
La propriété value indique le contenu par défaut d'un champ de texte ou de password, la valeur prise par une case checkbox ou radio lorsqu'elle est cochée par l'utilisateur, la valeur d'une variable transmise de manière cachée par hidden, ou encore le texte affiché sur un bouton reset.
La propriété checked, valable seulement pour les cases radio et checkbox, indique quelles sont les cases cochées par défaut. Il n'est pas nécessaire de lui affecter une valeur particulière.
La propriété size, valable seulement pour les champs texte et password, indique la longueur du rectangle où l'on entre du texte. La longueur par défaut est 20.
La propriété maxlength, valable seulement pour les champs texte et password, indique la longueur maximale de la chaine de caractère que l'utilisateur peut entrer dans ce champ. Par défaut, cette longueur est illimitée.
Voici un exemple de code ...
<FORM action="http://www.ecp.fr/cgi.exe" method=GET>
<INPUT type="reset" value="Réinitialiser ce formulaire">
Entrez votre nom : <INPUT type="text" name="nom" value="Laurent" size=12 maxlength=10>
et votre mot de passe : <INPUT type="password" name="passe" value="secret" size=8 maxlength=6> .
Quels sont vos hobbies :
lecture <INPUT type="checkbox" name="hobby" value="lecture" > , sport <INPUT type="checkbox" name="hobby" value="sport" checked> , cinéma <INPUT type="checkbox" name="hobby" value="cinema"> , voyage <INPUT type="checkbox" name="hobby"
value="voyage" checked> .
Quel âge avez-vous ?
< 15 ans <INPUT type="radio" name="age" value="15"> , 15-25 ans <INPUT type="radio" name="age" value="25" checked> , 25-40 ans <INPUT type="radio" name="age" value="40"> , > 40 ans <INPUT type="radio" name="age" value="50"> .
<INPUT type="hidden" name="cache" value="99">
<INPUT type="submit" value="Lancer le programme">
</FORM>
... et le résultat qu'il produit (le programme CGI invoqué n'existe pas, mais les paramètres transmis peuvent être observés dans la barre indiquant l'URL en haut de votre browser) :
Entrez votre nom : et votre mot de passe : .
Quels sont vos hobbies : lecture , sport , cinéma , voyage .
Quel âge avez-vous ? < 15 ans , 15-25 ans , 25-40 ans , > 40 ans .
Le tag SELECT permet d'afficher des listes. La syntaxe est la suivante :
<SELECT name="NAME" [multiple] [size=2]>
<OPTION [selected]> Choix 1
<OPTION [selected]> Choix 2
<OPTION [selected]> Choix 3
</SELECT>
Les crochets [] indiquent des paramètres optionnels :
- size détermine le nombre d'éléments de la liste affichés
- multiple permet la validation de plusieurs valeurs de la liste à la fois
- selected indique quels éléments de la liste sont validés par défaut
<TEXTAREA name="NAME" rows=6 cols=40>
Ici le texte par défaut
</TEXTAREA>
Evidemment, cols indique le nombre de colonnes et rows le nombre de lignes. Les retours à la ligne sont respectés.
Il faut dans un premier temps récupérer toutes les données transmises au programme CGI par l'utilisateur distant.
Celles-ci sont toutes assemblées dans même une chaîne de caractères sous la forme suivante : supposons que l'utilisateur ait donné la valeur Laurent à la variable "nom", la valeur 25 à la variable "age", et la valeur cinéma à la variable "hobby". La chaîne transmise sera : nom=Laurent&age=25&hobby=cinema, les variables apparaissant dans le même ordre que dans le formulaire HTM L. Dans la chaîne reçue, les noms de variable sont donc séparés de leur valeur par un signe =, et les différents couples variable=valeur sont séparés par le symbole &.
Pour obtenir cette chaîne, on procède de manière différente suivant que l'on a soumis le formulaire avec la méthode POST ou la méthode GET (voir chapitre précédent).
Si l'on a utilisé la méthode GET, on peut récupérer la chaîne de caractères transmise par le serveur Web dans la variable d'environnement QUERY_STRING. Cela se fait simplement en utilisant la fonction standard "getenv" du C. On écrira par exemple, pour obtenir dans temp un pointeur sur la chaîne de caractères CGI :
char *temp;
temp=getenv("QUERY_STRING");
Si l'on a utilisé la méthode POST, on peut récupérer la chaîne de caractères transmise par le serveur Web en lisant ces caractères un à un sur l'entrée standard (stdin en C). On peut donc obtenir dans temp un pointeur sur la chaîne de caractères CGI en écrivant par exemple :
char temp[1000], *t;
t=temp;
while(!feof(stdin))
{
*t=fgetc(stdin);
t++;
}
*t=0;
En plus des données entrées par l'utilisateur, le programme peut récupérer un certain nombre d'informations sur le contexte de travail. On peut en effet obtenir par la fonction "getenv" (de la même manière que précédemment) les valeurs des variables d'environnement suivantes :
Variable d'environnement | Information fournie |
---|---|
SERVER_SOFTWARE | Nom du logiciel serveur Web |
SERVER_NAME | Nom DNS de la machine hébergeant le serveur Web |
GATEWAY_INTERFACE | Version du protocole CGI utilisée par le serveur |
SERVER_PROTOCOL | Version du protocole HTTP utilisée par le serveur |
SERVER_PORT | Port utilisé par le serveur Web |
REQUEST_METHOD | Méthode (GET ou POST) selon laquelle le formulaire a été soumis |
PATH_TRANSLATED | Chemin complet menant au programme CGI lancé |
SCRIPT_NAME | Nom du programme CGI lancé |
QUERY_STRING | Si method=GET, contient la chaîne CGI, sinon vide |
CONTENT_LENGTH | Si method=POST, contient la longeur de la chaîne CGI, sinon 0 |
REMOTE_HOST | Nom DNS de la machine distante qui a soumis le formulaire |
REMOTE_ADDR | Adresse IP de cette machine distante |
Ayant effectué le traitement souhaité en prenant comme argument les données récupérées par CGI, le programme doit finalement renvoyer le résultat de son travail à l'utilisateur sous forme d'une page HTML. C'est très simple à faire en C, puisqu'il suffit d'envoyer directement le code HTML sur la sortie standard à l'aide de "printf" par exemple. Ainsi, ayant récupéré l'âge de l'utilisateur dans la variable int age, on l'affiche en titre d'une page HTML de la manière suivante :
printf("Content-type: text/html\n\n");
printf("<HTML>\n");
printf("<h1> %d </h1>\n",age);
printf("</HTML>\n");
- Un cours complet avec de nombreux exemples sur les formulaires HTML
- Documentation et téléchargement de CGIC, une librairie C pour coder facilement des applications basées sur CGI en C