TP Programmation WEB avec Perl



Utilisation du module CGI

  TP

############# Ma première page WEB créée par Perl ###############

Comprendre le petit script cgi0.pl ci-dessousTester le fonctionnement du petit script ci-dessous, à placer dans l'espace de script autorisé, en passant l'URL http://localhost/cgi-bin/cgi0.pl ou en utilisant une page d'appel (cgi0.html) comme

Essai de page WEB dynamique écrite en Perl Exécuter

------------------------------------------------------
#!/usr/bin/perl -w

use CGI;
# crée un nouvel objet page html
$html = new CGI;
# appel équivalent en style objet
# $html = CGI -> new();


# cet objet contient toutes les donnees
# du formulaire, recupéré sur le navigateur client
$cgi = CGI -> new();

# crée l'en-tete http
print $html->header,
# met un titre à la page html dans la section head
  $html->start_html(-title=>'Essai '),
# écrit un titre centré dans la page et termine
  $html->h2('Bonjour à toutes et à tous'),
# termine la page
  $html->end_html;

################### cgi1pl ################

Il s'agit de construire un petit formulaire adressé au script cgi2.pl et composé de 2 champs de texte, appelé nom et age
L'utilisateur valide après avoir donné son prénom et son age
------------------------------------------------------
#!/usr/bin/perl -w
use CGI;
$html = CGI -> new;

print $html->header,
$html->start_html(-title=>'Exemple de formulaire crée par un script Perl'),
$html->center($html->h2('Bonjour, veuillez remplir ce petit formulaire')),
$html->start_form(
    -method=>'POST',
    -action=>"http://dell/cgi-bin/cgi2.pl"
    ),
"Votre prénom ", $html->textfield(-default=>'',-size=>'20', -name=>'prenom') ,
$html->br,
"Votre age ", $html->textfield(-default=>'',-size=>'5', -name=>'age') ,
$html->p,
$html->submit('Valider'),
$html->reset('Annuler'),
$html->end_form();
print $html->end_html;
Voici le meme script en notation "fonction". Noter qu'on peut toujours utiliser la meme notation pour les options des fonctions qui générent le code html
------------------------------------------------------
#!/usr/bin/perl -w
# cgi1bis.pl, cgi1.pl écrit en style fonction
use CGI qw(:standard);

print header,
start_html('Exemple de formulaire crée par un script Perl',-bgcolor=>'white'),
div ( {-align=>'center'}, h2('Bonjour, veuillez remplir ce petit formulaire')),
start_form('post',"http://dell/cgi-bin/cgi2.pl"),
"Votre prénom ", textfield('prenom','') ,
br,
"Votre age ", textfield('age','') ,
p, submit('Valider'), reset('Annuler'),
end_form(),
end_html;

################### cgi2.pl ################

Voici la page créée par le script cgi2.pl, chargée de récupérer les valeurs des paramètres envoyés par cgi1.pl
L'analyser, l'écrire éventuellemnt en style fonction, expérimenter l'affichage en contexte liste de param() et l'améliorer.
------------------------------------------------------
#!/usr/bin/perl -w
use CGI;
$html = new CGI;
print $html->header,
$html->start_html(
    -title=>'Réponse',
    -bgcolor=>'white',
    -link=>'red'
    );
# contexte liste
# foreach $n ($html->param()) {
# $v = $html->param($n);
# print $n, " = ", $v, $html->br; }
print "

Votre prénom est : ", $html->param('prenom'), "
" if defined($html->param(prenom)); print "Vous avez déclaré que votre age est : ", $html->param('age'), " ans" if defined($html->param(age)); print $html->end_html;

################### Prolongement : cgi12pl ################

Fusionner les 2 scripts précédents en un seul cgi12.pl qui doit s'auto-appeler (script dit "ré-entrant") Afficher au départ ou si on décide de recommencer (placer un lien pour cela).
Le formulaire s'affiche toujours, mais sans les valeurs éventuellement déjà saisies.
------------------------------------------------------
Voici ce qui est souhaité :

Réponse précédente

Pour recommencer :

Veuillez remplir ce petit formulaire

Votre prénom    Votre age

  


################### inscription.pl ################

Voici un script dont le formulaire contient la plupart des composants html. On demande d'écrire reponse.pl qui effectue un traitement sur les données transmises : affichage et écriture en ajout dans un fichier inscription.txt
-------------------------------------------------
#!/usr/bin/perl -w
use CGI;
$html = new CGI;

%jours = (1=> 'Dimanche', 2=>'Lundi', 3 => 'Mardi',4 => 'Mercredi',
5 => 'Jeudi',6 => 'Vendredi',7 => 'Samedi');
print $html->header,
$html->start_html(
    -title=>'Questionnaire',
    -author=>'jean',
    -meta=>{'keywords'=>'formation CGI Perl'},
    -bgcolor=>'white'),
$html->center($html->h2('Inscription : remplir le questionnaire')),
$html->h4("Pourquoi vous inscrire ?"),
$html->ul(
    $html->li('mieux vous connaitre'),
    $html->li('seul(e)s les premiers seront retenus')
    ),
$html->h4("Pour plus de détails sur la formation voir ",$html->a({href=>"http://dell/stage-perl/cours/plan-stage.html"},"ce site")),
$html->hr,
$html->start_form (
    -method=>'POST',
    -action=>"http://dell/cgi-bin/reponse.pl" ),
$html->h3('Vos coordonnées'),
'Nom  ', $html->textfield(-default=>'', -size=>20, -name=>'nom') ,
'Prénom ', $html->textfield(-default=>'' ,-size=>'20', -name=>'prenom') ,
"Mot de passe ",$html->password_field(-name=>'mdp',-default=>'admin',-size=>10 ),
$html->br,
'E-mail ', $html->textfield(-size=>'20', -name=>'email') ,
'Etablissement ', $html->textfield(-size=>'20', -name=>'etablissement'),
$html->br,
'Ville ', $html->textfield(-size=>'20', -name=>'ville') ,
'Département ',
$html->scrolling_list(
    -name=>'departement',
    -values=>['Seine-Saint-Denis','Val de Marne','Seine et Marne','Paris','Yvelines','Essonne','Hauts de Seine','Val
d\'Oise'],
    -default=>'Seine et Marne',
    -size=>3    ),
$html->p,

$html->h3('Votre type d\'emploi'),
$html->radio_group(
    -name=>'emploi',
    -values=>['enseignement','formation','éducation', 'administration'],
    -default=>'enseignement'    ),
$html->p,

$html->h3('Vos loisirs préférés'),
$html->checkbox_group(
    -name=>'loisir',
    -values=>['Son-vidéo','Télévision','Cinéma','Programmation','Sports','Internet'],
    -defaults=>['Programmation','Internet']    ),
$html->p,

$html->h3('Décrivez votre projet de site WEB'),
$html->textarea(
    -name=>'projet',
    -default=>'Voici mon projet : ',
    -rows=>4,
    -columns=>40
    ),
$html->p,

$html->h3('Quel jour sommes nous ?'),
$html->radio_group(
    -name=>'jours',
    -values=>['1','2','3', '4', '5', '6', '7'],
    -default=>'1',
    -labels=>\%jours  ),
$html->p,

$html->h3('Etes vous en forme ?'),
$html->popup_menu(
    -name=>'popupmenu',
    -values=>['Très','Bonne','Moyenne','Petite','Epuisé']   ),
$html->p,
$html->center( $html->submit("Enregistrer"),$html->reset("Annuler") ),
$html->hr,
$html->end_form,
$html->end_html;

Compléments sur CGI.pm

Voici la réécriture de l'exemple cgi1.pl qui montre une mise en tableau html simple des éléments d'un formulaire.
#!/usr/bin/perl -w
# cgi11.pl, cgi1.pl avec mise en tableau html
#############################################
use CGI qw(:standard);

print header,
start_html(-title=>'Exemple de formulaire crée par un script Perl',-bgcolor=>'white'),
div ( {-align=>'center'},h2('Bonjour, veuillez remplir ce petit formulaire')),
start_form(
    -method=>'POST',
    -action=>"http://dell/cgi-bin/cgi2.pl"
    ),
table(
   Tr (th("Votre prénom "), td(textfield(-default=>'',-size=>'20', -name=>'prenom'))) ,
   Tr (th("Votre age "), td(textfield(-default=>'',-size=>'5', -name=>'age'))),
   Tr (td(submit('Valider')), td(reset('Annuler')))
   ),
end_form(),
end_html;