next up previous contents
Next: Àpropos de ce Up: Etude de cas Previous: Le formulaire

Le script

Nous commenterons progressivement le code.

#!/usr/bin/perl
use Msql;

Jusque là, rien à signaler. Parcontre, ci-dessous, on utilise la variable $buffer qui contiendra le flux d'informations envoyé par le client via la méthode POST et intercepté sur l'entrée standard STDIN.
En Perl, il existe un tableau associatif particulier, %ENV qui contient toutes les variables d'environnement. Je ne vais pas toutes les détailler mais il faut au moins savoir que la variable $ENV{'CONTENT_LENGTH'} contient la longueur des données reçues. Cette grandeur est indispensable pour utiliser la commande read.

read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

Les informations saisies dans le formulaires sont transmises à l'interface CGI sous la forme de paires Nom=Valeur, séparées par un &. On déclare un tableau @paires qui contiendra tous les couples Nom=Valeur. La commande split éclate la ligne en lui indiquant le séparateur.

# Récupération des champs du formulaire
@paires = split(/&/, $buffer);

Dans la boucle while, on éclate la paire Nom=Valeur de façon à ranger Nom dans la variable $nom et Valeur dans la variable $valeur. Ensuite, on remplit le tableau associatif %FORM au fur et à mesure.

foreach $paire (@paires) {
($nom, $valeur) = split(/=/, $paire);
$FORM{$nom} = $valeur;
}

Vous souvenez-vous du nom que l'on avait donné à la balise <INPUT>? Hein?!? Pour les offensés de la nature, je rappelle qu'il s'agissait de produit. Eh bien c'est là que nous allons l'utiliser. Grâce au tableau associatif, le contenu du champ produit correspond en fait à $FORM{produit}.

# On récupère le contenu du champ "produit" du formulaire
$nom_produit=$FORM{produit};

La suite ne peut être qu'évidente pour vous. Connexion à la base et tout le tintouin. Mes explications sur les bases de données ayant été limpides, toute autre palabre serait superflue...

# Connexion au serveur Msql
$dbh = Msql->connect("casimodo","stock_db");

# Préparation de la requête SQL
$requete_h = $dbh->query("select Prix from FRUITS_ET_LEGUMES where Nom='$nom_produit'");

# Début du formatage de la sortie pour le navigateur
print "Content-type: text/html\n\n";

print "<HTML>\n<BODY BGCOLOR=#FFFFFF>\n\n";

print "<H1>R&eacute;sultat de la requ&ecirc;te</H1>\n";

# Récupération des résultats de la requête
while (@resultat = $requete_h->fetchrow) {

  print "Le kilo de $nom_produit vaut <B>$resultat[0] Francs</B>\n";

}

print "</BODY>\n</HTML>\n";

  
Figure: Avant et après la transaction



root
Thu Dec 17 18:27:12 MET 1998