GET consiste à ajouter à l'URL la chaine
d'encodage des infos du formulaire.QUERY_STRING
POST, la même chaine est expédiée
sur l'entrée standard du script de CGI connecté à
la soumission du formulaire.
#recupere le contenu de la variable d'environnement
$input = $ENV{"QUERY_STRING"};
#dissocie la chaine de caracteres en une liste
@liste= split(/&/,$input);
#parcours de la liste
foreach (@liste) {
#dissocie la paire nom=valeur
($name,$value)= split(/=/, $_);
#decode les valeurs
$name =~ s/%(..)/pack("c",hex($1))/ge;
$value =~ s/%(..)/pack("c",hex($1))/ge;
#Traitement des données ....
}
#recupere le contenu du buffer de l'entrée standard STDIN
$in = <STDIN>;
#supprime les deux CRLF inseres par le protocole HTTP
chop($in);
chop($in);
#dissocie la chaine de caractere en une liste
@liste = split(/&/,$in);
#parcours de la liste
foreach(@liste) {
#dissocie la paire nom=valeur
($nom,$valeur)= split(/=/, $_);
#decode les valeurs
$nom =~ s/%(..)/pack("c",hex($1))/ge;
$valeur =~ s/%(..)/pack("c",hex($1))/ge;
#Traitement des donnees ...
}
p00
Formulaire |
Code du formulaire<FORM ACTION="http://p00/cgi-bin/formu2.pl" METHOD=POST> <H1><DIV ALIGN="center">Traitement de formulaire par PERL</DIV></H1> Indiquez : Nom <INPUT TYPE="text" NAME="nom" SIZE=25 value="Toto"> Prénom <INPUT TYPE="text" NAME="prenom" SIZE=25 value="Jules"> Sexe <INPUT TYPE="radio" NAME="sexe" VALUE="féminin"> féminin <INPUT TYPE="radio" NAME="sexe" VALUE="masculin" CHECKED> masculin Profession <input type="radio" checked NAME="profession" VALUE=enseignant> enseignant <input type="radio" NAME="profession" VALUE="formateur" > formateur <P> <INPUT TYPE="submit" VALUE="Valider"> <INPUT TYPE="reset" VALUE="Effacer"> </FORM> |
Le script PerlLa validation du formulaire par clic sur le boutonsubmit provoque l'appel au script formu2.pl, écrit en PERL et situé réellement sur le serveur p00 à /home/httpd/cgi-bin/formu.pl
#!/usr/bin/perl
# exécution de /home/httpd/cgi-bin/formu.pl
# récupère l'entrée standard dans la variable $in
read(STDIN, $in, $ENV{CONTENT_LENGTH});
# la chaine $in est coupée suivant le caractère & et crée la liste @champs
@champs = split(/&/,$in);
# traitement de chaque élément $e de la liste @champs
foreach $e (@champs) {
# dissocie chaque élément, de la forme nom=valeur,
# en une paire de variable (nom,valeur)
($nom, $valeur) = split(/=/,$e);
# transforme tous les caractères saisis en minuscules
$valeur =~ tr/A-Z/a-z/;
# crée à partir du tableau @champs,
# une liste associative
|
Attention !
#!/usr/bin/perl ne doit pas être précédée d'espace
vi révèle des ^M à supprimer.