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ésultat de la requê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