Introduction au CGI (Common Gateway Interface)
9. Exemples en Perl
Le Perl étant le langage le plus adapté et le plus simple pour la création de
CGI, car il offre l'avantage d'être un script (pas besoin de compilation), un traitement
des chaînes de caractères très puissant. C'est pour cela que j'ai choisi de faire les exemples avec.
Si vous désirez de plus amples renseignements sur ce langage, vous trouverez une petite initiation sur
http://www.ftls.org/fr/initiation/perl/
Bien entendu l'ensemble de ces scripts peuvent être traduit dans un autre langage...
9.1 Guestbook (livre d'or)
9.1.1 Principe
Le script ajoute à l'emplacement spécifié (par <!-- Ajouter Ici-->)
d'un fichier les informations entées grâce au formulaire suivant :
<FORM METHOD=POST ACTION="/cgi-bin/guestbook.pl">
Nom:<INPUT NAME="name"><BR>
Localitée:<INPUT NAME="location"><BR>
<BR>Commentaires:<BR>
<TEXTAREA NAME="comments">
</TEXTAREA>
<INPUT TYPE="SUBMIT" NAME="Ok">
</FORM>
Voici le type de fichier résultat.
<HR>
Voici les entrée de mon guestbook<BR>
<BR>
Essais, essais...<BR>
<BR>
<B>Frédéric TYNDIUK<BR>
Bordeaux, France</B>
<HR>
Un commentaire.<BR>
<BR>
Bye<BR>
<BR>
<B>Frédéric TYNDIUK<BR>
Bordeaux, France</B>
9.1.2 Le script
#!/usr/bin/perl
require "cgi-lib.pl";
&ReadParse(*FORM);
# Recupère les informations provenat du formulaire dans %FORM
# Chemain complet du fichier guestbook
$fichier="/home/httpd/html/guestbook.html";
print "Content-type: text/html\n\n";
print "<HTML><HEAD><TITLE>Merci</TITLE></HEAD>\n";
print "<BODY BGCOLOR='#FFFFFF'><H1>Merci d'avoir ajouter votre commentaire</H1>\n";
print "</BODY></HTML>\n";
# Remplace tous les \n (retours chariots par <BR>
chop($FORM{'comments'});
$FORM{'comments'} =~ s/\n/<BR>\n/g;
$Result = "$FORM{'comments'}
<B><BR>$FORM{'name'}, $FORM{'location'}</B><BR>
<!-- Ajouter Ici-->\n";
# Ouvre le fichier
open(GUESTBOOK,"<$fichier") || &CgiDie ("Erreur d'ouverture de $fichier, Erreur: $!");
$data = join("", );
close GUESTBOOK;
$data =~ s/<!-- Ajouter Ici-->/$Result/;
# Remplace <!-- Ajouter Ici--> par les informations envoiyée.
# Sauvegarde du résultat
open(GUESTBOOK,">$fichier") || &CgiDie ("Erreur d'écriture de $fichier, Erreur: $!");
print GUESTBOOK $data;
close GUESTBOOK;
Cette exemple est simpliste, vous trouverez une version élaborée
sur http://www.ftls.org/fr/exemples/cgi/
9.2 Envoyer un mail
9.2.1 Le Formulaire
<FORM METHOD=POST ACTION="/cgi-bin/email.pl">
Name : <INPUT NAME="name"><BR>
Addresse : <INPUT NAME="address"><BR>
Ville <INPUT NAME="city"><BR>
Code Postal <INPUT NAME="zip"><BR>
Tel : <INPUT NAME="phone"><BR>
E-Mail : <INPUT NAME="email"><BR>
<BR>
<INPUT TYPE="SUBMIT" VALUE="Envoyer">
<INPUT TYPE="RESET" VALUE="Effacer">
</FORM>
9.2.2 Script 1
#!/usr/bin/perl
require "cgi-lib.pl";
&ReadParse(%FORM);
# Recupère les informations provenat du formulaire dans %FORM
# Ouvre un Pipe avec le commande mail (Unix)
open(MAIL,"|/usr/sbin/sendmail username\@host.com")
|| die "Peut pas ouvrir sendmail : $!\n";
# Envoie les informations
print MAIL <<"EOF";
From: Postmaster\@host.com (Administrateur du mail)
To: username\@host.com
Subject: Test Formulaire Mail
Mime-Version: 1.0\nContent-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Salut,
Ceci est un exemple d'envoie d'E-Mail par formulaire
Voici les informations envoyée :
Nom: $FORM{"name"}
Addresse: $FORM{"address"}
Ville: $FORM{"city"}
Code Postal: $FORM{"zip"}
Tel: $FORM{"phone"}
Email: $FORM{"email"}
EOF
close(MAIL);
print <<"EOF";
Content-type: text/html
<HTML><BODY>
<H1>Merci $FORM{"name"}.</H1>
<H2>Les informations ont été envoyée avec sucès via E-Mmail</H2>
</BODY></HTML>
EOT
9.2.3 Script 2
Perl intègre un certain nombre de module ou package, dont un permettant d'envoyer des Mails
voici donc un exemple utilisant le package Mail::Mailer.
#!/usr/bin/perl
use Mail::Mailer; # Utilisation du package Mail::Mailer.
require "cgi-lib.pl";
&ReadParse(%FORM);
# Recupère les informations provenat du formulaire dans %FORM
# Ouvre Mail
$mailer = Mail::Mailer->new();
$mailer->open({ From => "Postmaster\@host.com",
To => "username\@host.com",
Subject => "Test Formulaire Mail",
}) || die "Can't open: $!\n";
# Envoie les informations
print $mailer <<"EOF";
Salut,
Ceci est un exemple d'envoie d'E-Mail par formulaire
Voici les informations envoyée :
Nom: $FORM{"name"}
Addresse: $FORM{"address"}
Ville: $FORM{"city"}
Code Postal: $FORM{"zip"}
Tel: $FORM{"phone"}
Email: $FORM{"email"}
EOF
$mailer->close();
print <<"EOF";
Content-type: text/html
<HTML><BODY>
<H1>Merci $FORM{"name"}.</H1>
<H2>Les informations ont été envoyée avec sucès via E-Mmail</H2>
</BODY></HTML>
EOT
9.3 Autres exemples
Dans la section Exemples : Scripts CGI de mon site, se trouve
près de 15 scripts CGI qui peuvent vous servir d'exemples, de plus il existe
une multitudes de site proposant des annuaires de scripts CGI dans lesquels vous
trouverez sûrement votre bonheur.
|