SELFHTML

Rolf Rost:
Exploitation facile de formulaire avec cgi-lib.pl

Page d'information: vue d'ensemble

vers le bas Rolf Rost
vers le bas Qu'est-ce qu'est cgi-lib.pl?
vers le bas Vue d'ensemble des fonctions de cgi-lib.pl
vers le bas Premier exemple, exploitation simple de formulaire
vers le bas Deuxième exemple, transmission de fichier
vers le bas Synthèse
vers le bas Page d'accueil cgi-lib.pl et autres sources

vers le bas 

Rolf Rost

Adresse électronique: Adresse électronique RolfRost@yahoo.com
Présence Internet: Page en langue allemande http://www.i-netlab.de

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!

vers le hautvers le bas 

Qu'est-ce qu'est 'cgi-lib.pl'?

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.

vers le hautvers le bas 

Vue d'ensemble des fonctions de cgi-lib.pl

fonction descriptif remarques disponible dans la version
PrintHeader() envoie l'entête HTTP pour content-type:text/html au navigateur. - toutes
HtmTop() envoie l'entête de fichier d'un fichier HTML. dans cet argument le titre (intitulé) peut être mentionné. toutes
HtmBot() ferme un ficher HTML (envoie le pied du fichier au navigateur). - toutes
ReadParse() lit un formulaire, POST ou GET. La plus étendue des fonctions de cette librairie. par défaut, la fonction lit (*in), peut également être nommée autrement. L'argument est le nom du Hash qui contient les noms de champ et leurs valeurs. La valeur retournée est supérieure à 0 si il y a eu une entrée, 0 dans le cas contraire. toutes
PrintEnv() donne l'environnement CGI proprement formaté dans le navigateur. - à partir de 2
PrintVariables() donne le hash %in, donc toutes les données du formulaire formatées dans le navigateur. - toutes
PrintVariablesShort() donne le Hash %in dans le navigateur, forme condensée. - 1.14
MethGet() vérifie si la méthode Get a été utilisée. renvoie TRUE si la méthode Get a été utilisée, FALSE dans le cas contraire. toutes
MethPost() vérifie si la méthode Post a été utilisée. renvoie TRUE si la méthode Post a été utilisée, FALSE dans le cas contraire. toutes
MyBaseUrl(), MyFullUrl(), MyURL() diverses fonctions qui recherchent l'URL du script. - à partir de 2
CgiError() sort une annonce d'erreur. le message d'erreur peut être personnalisé. Il est renvoyé à la fonction dans l'argument. toutes
CgiDie() sert à interrompre le traitement du script. l'annonce d'erreur personnalisée qui doit être sortie. 2 arguments sont possibles. toutes
SplitParam() scinde un paramètre en catégories de valeur. n'a pas été testé plus avant par l'auteur de cet article. à partir de 2

 
vers le hautvers le bas 

Premier exemple, exploitation simple de formulaire

Exemple d'affichage (nouvelle fenêtre) Exemple d'affichage: aperçu

Exemple - le formulaire HTML:

<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>

Exemple - le script CGI d'exploitation du formulaire:

#!/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

Explication:

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 plus haut 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.!

vers le hautvers le bas 

Deuxième exemple, transmission de fichier

Exemple d'affichage (nouvelle fenêtre) Exemple d'affichage: aperçu

Ceci permet aux utilisateurs de transmettre des fichiers de leur ordinateur sur le serveur.

Exemple - le formulaire HTML:

<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>

Exemple - script CGI qui sort le fichier pour contrôle:

#!/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;

Exemple - script CGI qui sauvegarde le fichier sur le serveur:

#!/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;

Explication:

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 ...

vers le hautvers le bas 

Synthèse

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.

vers le hautvers le bas 

Page d'accueil cgi-lib.pl et autres sources

Page en langue anglaise 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.

Page en langue allemande 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...

Page en langue anglaise Perl Home
La page d'accueil de Perl. Tout commentaire serait ici superflu.


 
vers le haut

© 2001-2005 Seite Informations