Le CGI en Perl 1. Principe Général
Entre Unix et Windows, le problème est différent, ce qu'il est important de savoir est que les scripts CGI sont interprétés par le serveur. Cela signifie que l'utilisateur voit s'afficher uniquement la partie correspondant à une sortie d'écran ou à une erreur. Il est donc nécessaire, pour les serveurs tournant sous un Unix, que les scripts CGI (Perl ou non) soit avec les droits d'execution (+x). Un script CGI en Perl est un petit programme perl qui sera lancé depuis un navigateur web. Il est important de noter que la majorité des scripts peut être malgré tout lancée en ligne de commande, ce qui permet parfois de mieux débugger les problèmes. Voici un exemple de fichier perl fonctionnant dans un script appelé par un navigateur sur un serveur Unix : #!/usr/bin/perl print "content-type: text/html\n\n"; print "<html><head><title>exemple en perl</title></head>\n"; print "<body>\n"; print "les cgi s'exécutent bien sur votre serveur !\n"; print "</body></html>\n"; Dans ce programme, on retrouve 3 partie :
2. Traitement de Formulaire
2. 1. Code du formulaire HTML
Voici le code du formulaire HTML utilisé dans les exemples suivants. <html> <head> <title>formulaire hobbesworld pour traitement perl</title> </head> <body> <form action="/cgi-bin/formperl.pl" method="get"> entrer votre nom : <input name="nom" size=25><br> entrer votre prenom : <input name="prenom" size=25><br> entrer votre mois de naissance : <select name="moisnaissance"> <option>janvier <option>fevrier <option>mars <option>avril <option>mai <option>juin <option>juillet <option>aout <option>septembre <option>octobre <option>novembre <option>decembre </select><br> quel est votre sexe (et pas entrer votre sexe, attention...) : <input type=radio name="sexe" value="homme">homme <input type=radio name="sexe" value="femme">femme <input type=radio name="sexe" value="autre">autre<br> <input type=checkbox name="majeur"> je suis majeur<br> <textarea name="commentaire">[commentaire]</textarea><br> <input type=submit value="valider"> <input type=reset value="reinitialiser"> </form> </body> </html> 2. 2. Sans le module CGI.pm
2.2.1. Code de traitement
Le code de traitement associé est : #!/usr/bin/perl Pour l'instant, ce code ne fonctionne qu'avec la méthode 'GET'. Pour la méthode 'POST', je verrais ensuite.print "content-type: text/html\n\n"; %httpform = &read_query_string; print "nom : ".$httpform{'nom'}."<br>\n"; print "prenom : ".$httpform{'prenom'}."<br>\n"; print "mois : ".$httpform{'moisnaissance'}."<br>\n"; print "sexe : ".$httpform{'sexe'}."<br>\n"; if ($httpform{'majeur'} =~ /on/) { print "je suis majeur<br>\n"; } else { print "je ne suis pas majeur<br>\n"; } print "mes commentaires : <ul><pre>".$httpform{'commentaire'}."</pre></ul>\n"; print "contenu html\n"; sub read_query_string { local ($buffer, @pairs, $pair, $name, $value, %form); $buffer = $env{'query_string'}; @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%(..)/pack("c", hex($1))/eg; $form{$name} = $value; } %form; } } 2.2.2. Explication du code
Il y a 3 parties importantes dans ce programme :
Pour utiliser le résultat d'une variable, il vous suffit alors de mettre le nom du champs entre guillemets : "$httpform{'prenom'}" renvoit le contenu du champs "prenom". Comme vous pouvez le voir pour le champs "majeur" (correspondant à la case à cocher), on peut également faire des opérations sur le résultat comme sur toutes chaines de caractères. Enfin, la fonction "read_query_string". Par définition, elle ne fonctionne qu'avec le GET puisqu'elle interprète la variable d'environnement QUERY_STRING (dans laquelle sont renvoyés tous les champs du formulaire). En voici le principe :
2. 3. Avec le module CGI.pm
2.3.1. Code de traitement
#!/usr/bin/perl Ce code fonctionne aussi bien avec le 'GET' que le 'POST' (défini dans le formulaire).use CGI; $query = new CGI; print "content-type: text/html\n\n"; print "nom : ".$query->param(nom)."<br>\n"; print "prenom : ".$query->param(prenom)."<br>\n"; print "mois : ".$query->param(moisnaissance)."<br>\n"; print "sexe : ".$query->param(sexe)."<br>\n"; if ($query->param(majeur) =~ /on/) { print "je suis majeur<br>\n"; } else { print "je ne suis pas majeur<br>\n"; } print "mes commentaires : <ul><pre>".$query->param(commentaire)."</pre></ul>\n"; print "contenu html\n"; 2.3.2. Explication du code
Il y a 2 parties dans ce programme :
Pour utiliser le résultat d'une variable, il vous suffit alors de respecter le format : $query->param(nom_du_champs) Les opérations sont possibles sur ces champs comme avec l'autre méthode. 3. Traitement de Cookie avec le module CGI.pm
3. 1. Ecriture des cookies
Avec un seul cookie : #!/usr/bin/perl use CGI qw(:standard :html3); $the_cookie = cookie(-name=>'nom', -value=>'hobbesworld'); print header(-cookie=>$the_cookie); print "content-type: text/html\n\n"; print "votre cookie 'nom' est : créé"; Avec plusieurs cookies : #!/usr/bin/perl L'écriture d'un cookie se fait donc en 2 parties :use CGI qw(:standard :html3); $the_cookie = cookie((-name=>'nom', -value=>'hobbesworld', -path=>'/', -domain=>'.hobbesworld.com', -expires=>'+1d'), (-name=>'prenom', -value=>'laurent', -path=>'/', -domain=>'.hobbesworld.com')); print header(-cookie=>$the_cookie); print "content-type: text/html\n\n"; print "votre cookie 'nom' est : créé";
3. 2. Lecture des cookies
#!/usr/bin/perl Comme nous l'avons vu précédemment (en fait, 10 lignes au dessus), vous ne pouvez pas directement lire un cookie
que vous venez de fixer. Pour ceci, voir l'exemple complet en bas de page.use CGI qw(:standard :html3); print "content-type: text/html\n\n"; $nom = cookie('nom'); print "cookie : <br>votre cookie 'nom' est : $nom"; 3. 3. Effacer des cookies
#!/usr/bin/perl Effacer un cookie consiste en fait à l'ajouter, mais avec une duree de vie nulle. Ainsi, il se re-crée et s'efface immédiatement.
D'où le "now" du "expires".use CGI qw(:standard :html3); $the_cookie = cookie(-name=>'nom', -value=>'hobbesworld', -path=>'/', -domain=>'.hobbesworld.com', -expires=>'now'); print header(-cookie=>$the_cookie); print "content-type: text/html\n\n"; print "cookie : <br>votre cookie 'nom' est : effacé"; 3. 4. Exemples complets
3.4.1. Fixer un cookie et l'utiliser directement
#!/usr/bin/perl A_venir...use CGI qw(:standard :html3); $the_cookie = cookie(-name=>'nom', -value=>'hobbesworld', -path=>'/', -domain=>'.hobbesworld.com', -expires=>'+2d'); print header(-cookie=>$the_cookie); print "content-type: text/html\n\n"; $nom = cookie('nom'); print "cookie : <br>votre cookie 'nom' est : $nom"; 3.4.2. Tester l'existence d'un cookie puis redirection
A_venir... Page modifiée le : 03/05/2004
Site modifié le : 12/04/2011 Flux RSS : cliquez-ici si vous voulez suivre les évolutions
Contacter le webmaster : si vous trouvez qu'il manque des infos, n'hésitez pas à me le dire ! |
» Commentaires
Si vous souhaitez ajouter un commentaire,
vous devez être identifié.