![]() |
Rolf Rost: |
|
|
|
| Adresse électronique: |
|
| Présence Internet: |
|
Il s'agit ici d'un article traduit de l'allemand par la rédaction de SELFHTML actuel. Veuillez poser vos questions relatives à cet article uniquement à son auteur, prenant compte que celui-ci ne maîtrise peut-être pas la langue française!
cgi-lib.pl est l'une des premières librairies pour langages script Perl, écrite par Steven E. Brenner.
Une librairie est une collection de fonctions employées fréquemment (routines, méthodes), avec lesquelles les scripts
La force d'une telle librairie réside en ce qu'un script pour l'exploitation de formulaire peut être simplifié à l'extrême. En règle générale, il est alors peu significatif que ce script ait été appelé par la méthode POST ou par la méthode GET (à l'exception de la tranmission de fichier).
Les versions 1.14, 2.10 et 2.17 de cgi-lib.plsont connues de l'auteur de cet article. La transmission de fichier est assurées à partir de la version 2.17.
|
<form action="/cgi-bin/bsp1.pl" method=post> <b>Nom:</b> <input name="mon nom" size=40><br> Masculin:<input type=radio name="mon sexe" value="masculin" checked><br> Féminin:<input type=radio name="mon sexe" value="feminin"><br> <b>Âge:</b> <input size=3 name="mon âge"><br> <b>Passe-temps:</b><br> <textarea rows=3 cols=34 wrap=physical name="mes passe-temps"></textarea><br> <input type=submit value=" Qui suis-je? "> </form> |
#!/usr/bin/perl
require 'cgi-lib.pl'; # incorporation de la librairie, attention au chemin
print PrintHeader(); # envoie l'entête avec une ligne vide
print HtmlTop('Données personnelles'); # entête du fichier HTML avec titre
ReadParse(); # lecture des champs de formulaire sur le Hash '%in'
print PrintVariables(); # sortie simple des champs du formulaire
print HtmlBot(); # fin de la page HTML
|
Le cœur de l'exploitation des entrées d'un formulaire est la fonction ReadParse(). Cette fonction lit les champs de saisie du formulaire sur le Hash %in qui peut aussi avoir un autre nom, ce qui s'effectue dans l'argument de la fonction (voir
vue d'ensemble). Pour une simple sortie des entrées d'un formulaire dans le navigateur, la fonction PrintVariables() peut être utilisée: PrintVariables() sort les noms des champs de saisie et leurs valeurs bien rangés (ordre alphabétique des noms de champs). On peut aussi accéder à chaque champ du formulaire par $in{'nomduchamp'}. Ainsi, une appellation correcte des champs de saisie (attribut HTML name=) est claire. L'utilisation de cgi-lib.pl simplifie considérablement la demande des entrées de l'utilisateur par l'intermédiaire de champs de texte, de boites de vérification etc.!
Ceci permet aux utilisateurs de transmettre des fichiers de leur ordinateur sur le serveur.
<form action="/cgi-local/bsp2.pl" method=post enctype="multipart/form-data"> <p>Envoyez moi un fichier texte ou HTML jusqu'a 1 KByte!<br> <input type=file name="fichier" size=30><br> <input type=submit value="envoyer"> </p></form> |
#!/usr/bin/perl
require "cgi-lib.pl"; # Version 2.17
$cgi_lib'maxdata = 10000;
ReadParse();
CgiDie('Vous n\'avez pas choisi de fichier.',
'Veuillez cliquer sur le bouton \'précédente\' et répéter la saisie.')
if !$in{'fichier'};
print &PrintHeader;
print &HtmlTop("Contenu du fichier envoyé:");
print PrintVariables();
print &HtmlBot;
|
#!/usr/bin/perl
require "cgi-lib.pl"; # Version 2.17
$cgi_lib'maxdata = 10000;
$cgi_lib'writefiles = "/temp";
ReadParse();
CgiDie('Vous n\'avez pas choisi de fichier.',
'Veuillez cliquer sur le bouton \'précédente\' et répéter la saisie.')
if !$in{'Datei'};
print &PrintHeader;
print &HtmlTop('Le fichier a été transmis');
print "Le fichier transmis a été sauvegardé de la façon suivante: $in{fichier}.<br>\n";
print &HtmlBot;
|
Les mentions suivantes sont importantes dans le repère d'ouverture du formulaire: method="post" et enctype="multipart/form-data". La taille maximale du fichier peut être fixée dans le script à la ligne $cgi_lib'maxdata = 10000; (nombre maximum d'octets pouvant être acceptés). Si cette taille devait être dépassée, s'ensuivrait une annonce d'erreur. L'exemple montre aussi une façon d'employer la fonction CgiDie() : Deux annonces peuvent être fournies comme argument à cette fonction, la première apparaît alors comme titre et la seconde comme texte normal. Avec CgiDie() le traitement du script peut être interrompu, comme ici dans l'exemple, si aucune entrée n'a eu lieu. C'est aussi la différence avec la fonction CgiError(), qui se contente de sortir une annonce d'erreur personnalisée sans empêcher pourtant la poursuite du script.
Comment maintenant le fichier parvient-il sur le serveur?
Si par exemple le fichier doit être sauvegardé dans un répertoire /temp du serveur, une ligne supplémentaire est requise dans le script:
$cgi_lib'writefiles = "/temp";
Si cette ligne est mentionnée, le fichier transmis sera sauvegardé dans ce répertoire sous un nom déterminé par cgi-lib.pl (qui veille à ce que des noms de fichier ne soient pas attribués plusieurs fois). Le nom de fichier lui-même se trouve prêt dans la variable '$in{fichier}' , dont le contenu a alors été modifié. Le reste est du travail de frappe ...
Avec la librairie cgi-lb.pl son auteur Steven E. Brenner donne au programmeur Perl une bibliothèque qui réduit considérablement son travail de frappe pour les scripts en ce qui concerne le traitement de formulaires. C'est ce qu'illustrent les exemples de façon significative.
Pour l'appel de routines la syntaxe suivante doit être respectée:
&SubRoutine;
&SubRoutine('Argument 1', 'Argument 2');
SubRoutine();
SubRoutine();
Le ET commercial (&) n'est pas indispensable quand les parenthèses sont mentionnées (avec ou sans argument), il peut cependant toujours être placé devant et est indispensable à chaque fois que les parenthèses sont omises.
The Cgi-Lib Home Page
Ici se trouve la version la plus récente de cgi-lib. C'est la page sur la plus ancienne librairie PERL avec des exemples d'application pour essayer et télécharger, des conseils sur la littérature et des liens à d'autres pages. Le livre de chevet des programmeurs en Perl.
The Realm of CGI
Les pages de XWolf, Wolfgang Wiese - Le rendez-vous de ceux qui cherchent des solutions dans l'espace germanophone! Ici on trouve des réponses aux quetions posées le plus souvent, des forums et listes de publipostage. Il y a aussi des scripts à télécharger ainsi que des exemples illustrant 'cgi-lib.pl'. Celui qui est intéressé y trouve également une extension de cette librairie écrite par Wolfgang Wiese, des liens menant à d'autres pages intéressantes, et autres...
Perl Home
La page d'accueil de Perl. Tout commentaire serait ici superflu.
|
|