Vous êtes sur la page 1sur 24

Formation Perl

Version Beta 0.0.1

Support Instructeur
Eric BERTHOMIER 9 mai 2005

Table des matires


Table des matires 1 Installation de Perl avec MySql partir de Knoppix 1.1 A propos . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Mots cls . . . . . . . . . . . . . . . . . 1.2 Installation de KNOPPIX 3.2 sur le disque dur . . 1.3 Installation des packages supplmentaires . . . . 1.3.1 Perl . . . . . . . . . . . . . . . . . . . . 1.3.2 mysql . . . . . . . . . . . . . . . . . . . 1.3.3 DBI . . . . . . . . . . . . . . . . . . . . 1.3.4 GD . . . . . . . . . . . . . . . . . . . . Expressions Rgulires 2.1 A propos . . . . . . 2.1.1 Mots cls . 2.2 Exercices . . . . . 2.2.1 Adresse IP 2.2.2 Qui est o ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 3 3 3 3 3 3 3 4 4 5 5 5 5 5 5 7 7 7 7 7 7 8 8 8 8 9 9 10 10 10 11 11 11 12

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Utilisation des modules en Perl[2] 3.1 A propos . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Mots cls . . . . . . . . . . . . . . . . . . . 3.2 Fichier module . . . . . . . . . . . . . . . . . . . . 3.2.1 Caractristiques . . . . . . . . . . . . . . . . 3.2.2 Exemple de chier module . . . . . . . . . . 3.3 Utilisation dun module . . . . . . . . . . . . . . . . 3.4 Variables . . . . . . . . . . . . . . . . . . . . . . . 3.4.1 Variables prives . . . . . . . . . . . . . . . 3.4.2 Variables publiques . . . . . . . . . . . . . . 3.5 Modules avec un nom compos . . . . . . . . . . . . 3.5.1 Exemple : Cration du Module Boite : :Outils 3.6 Blocs BEGIN et END . . . . . . . . . . . . . . . . . 3.7 Export . . . . . . . . . . . . . . . . . . . . . . . . . 3.7.1 Types de variables dun module . . . . . . . 3.7.2 Export par dfaut . . . . . . . . . . . . . . . 3.7.3 Export individuel . . . . . . . . . . . . . . . 3.7.4 Export par groupe . . . . . . . . . . . . . . 3.8 Exemple complet . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

TABLE DES MATIRES


4 Le CGI avec PERL 4.1 A propos . . . . . . . . . . . . . . . . . 4.1.1 Mots cls . . . . . . . . . . . . 4.2 Rappel sur le HTML . . . . . . . . . . 4.3 Utilisation simple du formulaire . . . . 4.3.1 Le chier HTML [1] . . . . . . 4.3.2 Le chier PERL . . . . . . . . 4.4 Formulaire avec champs de saisie . . . . 4.5 Utilisation du module CGI . . . . . . . 4.6 Utilisation du module CGI version objet

2 14 14 14 14 14 14 15 15 16 16 18 18 18 18 18 19 21 22 23

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

Utilisation de Perl avec MySql 5.1 A propos . . . . . . . . . . . . . . . . . . . . . . . . . . 5.1.1 Mots cls . . . . . . . . . . . . . . . . . . . . . 5.2 Cration dune base de donnes . . . . . . . . . . . . . 5.3 Cration / suppression dune table . . . . . . . . . . . . 5.4 Lecture dune base de donnes et afchage de statistiques

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

Listings Bibliographie Index

Chapitre 1

Installation de Perl avec MySql partir de Knoppix


1.1 A propos
1.1.1 Mots cls
perl Practical Extraction and Report Language

1.2 Installation de KNOPPIX 3.2 sur le disque dur


http://forums.knoppix-fr.org/viewtopic.php?t=2545

1.3 Installation des packages supplmentaires


La commande dinstallation de package sous Debian (Knoppix) est apt-get install <nomdupackage>. La commande de recherche dun package est apt-cache search <nom du package>. Il est bien sr possible de combiner cette recherche avec un grep. Pour raliser des accs avec des bases de donnes type mysql il est ncessaire dinstaller les packages suivants :

1.3.1

Perl
perl perl-base perl-doc perl-modules libperl5.8

1.3.2

mysql

mysql-server mysql-admin mysql-admin nest pas obligatoire mais permet de contrler de manire graphique linstallation et la modication des diffrences bases sur votre serveur. 3

CHAPITRE 1. INSTALLATION DE PERL AVEC MYSQL PARTIR DE KNOPPIX

1.3.3

DBI

libdbi-perl libdbd-mysql-perl

1.3.4

GD

libgd-perl libgd-graph-perl libgd-gd1-perl

Chapitre 2

Expressions Rgulires
2.1 A propos
2.1.1 Mots cls
perl Practical Extraction and Report Language

2.2 Exercices
2.2.1 Adresse IP
Listing 2.1 ip.pl
1 2 3 4 5 6 7 8 # ! / u s r / b i n / p e r l w use s t r i c t ; my @tabIp = i f c o n f i g ; f o r e a c h ( @tabIp ) { p r i n t " A d r e s s e I P : $1 \ n " i f ( / i n e t a d r : ( . ? ) \ s / ) ; }

A laide de la commande ifconfig, retrouvez les diffrentes adresses IP de votre machine.

2.2.2

Qui est o ?

A laide de la commande who, tablissez un rapport indiquant le nom de luser suivi des consoles sur lequel il est connect.

Exemple : eric -> :0, pts/1, pts/2, pts/0, pts/3, pts/4 Listing 2.2 quiestou.pl
1 2 3 4 # ! / u s r / b i n / p e r l w use s t r i c t ; my %q u i ;

CHAPITRE 2. EXPRESSIONS RGULIRES


5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 my @tab = who ; f o r e a c h ( @tab ) { i f ( / ^ ( \ w ) \ s ( . ? ) \ s / ) { i f ( e x i s t s $ q u i { $1 } ) { $ q u i { $1 } . = " , $2 " ; } else { $ q u i { $1 } = " $2 " ; } } } w h i l e ( ( my $ c l e , my $ v a l e u r ) = each (% q u i ) ) { p r i n t " $ c l e > $ v a l e u r \ n " ; }

Chapitre 3

Utilisation des modules en Perl[2]


3.1 A propos
3.1.1 Mots cls
Practical Extraction and Report Language. commande perl permettant dinsrer un module. commande perl permettant dindiquer une donne partage. quoted word Liste des donnes exportes par dfaut. Liste des donnes exporte (import manuel). Liste des rpertoires de recherche des modules (quivalent au PATH Unix). PERL use our qw @EXPORT @EXPORT_OK @INC

Cette documentation sinspire librement des crits de Sylvain Lhuillier.

3.2 Fichier module


3.2.1 Caractristiques
Un module est un chier dont le sufxe est .pm. Par convention, le nom du chier doit commencer par une Majuscule. Le chier doit se trouver dans un des rpertoires indiqus par @INC (par exemple le rpertoire local .). La premire ligne dun chier module doit indiquer le nom du module qui doit tre identique au nom du chier sans extension laide de la commande package Nomdumodule.

3.2.2

Exemple de chier module


Listing 3.1 Outils.pm

1 2 3 4 5 6

package O u t i l s ; use s t r i c t ; sub b o n j o u r { p r i n t " B o n j o u r t o u t l e monde ! \ n " }

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]


7 8

1;

La dernire ligne du script (1 ;) indique que le module sest correctement charg (VRAI). Dans le cas o une valeur de retour de 0 est retourne, le programme qui requiert ce module sinterrompt avec une erreur.

3.3 Utilisation dun module


Il est possible dutiliser le module en lincluant par la commande use. Listing 3.2 script1.pl
1 2 3 4 use s t r i c t ; use O u t i l s ; Outils : : bonjour ;

La commande Outils::bonjour correspond lappel de la fonction bonjour du module Outils.

3.4 Variables
Les variables des modules sont dclarables de 2 faons : les variables internes au module que lon dira prives les variables accessibles de lextrieur du module que lon dira publiques

3.4.1

Variables prives

Une variable prive dans un module est dclare laide de la commande my suivi du nom de la variable. Listing 3.3 Outils.pm
1 2 3 4 5 6 7 8 9 10 package O u t i l s ; use s t r i c t ; my $who = E r i c ; sub b o n j o u r { p r i n t " B o n j o u r $who ! \ n " } 1;

Cette variable nest pas accessible lextrieur du module. Il est souligner quil est possible dutiliser la commande my sur des fonctions de manire rendre celle-ci prives.

3.4.2

Variables publiques

Une variable publique dans un module est dclare laide de la commande our suivi du nom de la variable. Listing 3.4 Outils.pm
1 package O u t i l s ;

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]


2 3 4 5 6 7 8 9 10 use s t r i c t ; o u r $who = E r i c ; sub b o n j o u r { p r i n t " B o n j o u r $who ! \ n " } 1;

Cette variable est accessible lextrieur du module. Listing 3.5 script2.pl


1 2 3 4 5 6 7 # ! / u s r / b i n / p e r l w use s t r i c t ; use O u t i l s ; $ O u t i l s : : who= S o u r i c i e r ; p r i n t " B o n j o u r $ O u t i l s : : who " ;

3.5 Modules avec un nom compos


Les modules avec un nom compos permettent de regrouper des modules sous une mme bannire. Par exemple Net inclus les modules Cmd, Cong, Domain, FTP, hostent, netent, Netrc, NNTP, Ping, POP3, prtoent, servent, SMTP, Time.

3.5.1

Exemple : Cration du Module Boite : :Outils

1. mkdir Boite 2. mv Outils.pm Boite/ Il nous faut maintenant modier le module pour indiquer son nom complet devenu Boite::Outils. package Boite::Outils; Listing 3.6 script3.pl
1 2 3 4 5 6 # ! / u s r / b i n / p e r l w use s t r i c t ; use B o i t e : : O u t i l s ; $ B o i t e : : O u t i l s : : who= " S o u r i c i e r " ; p r i n t " B o n j o u r $ B o i t e : : O u t i l s : : who " ;

Attention : la liste @INC doit contenir le rpertoire contenant le module en question. Si ncessaire, il faut donc ajouter la ligne suivante : push @INC, repertoire avant lappel du module.

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]

10

3.6 Blocs BEGIN et END


Les blocs BEGIN et END (awk) sont excuts respectivement au chargement du module et la n de lexcution du module. Ces deux blocs sont maintenant rendus inutiles par la programmation Objet (constructeur et destructeur). Listing 3.7 Outils.pm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package O u t i l s ; use s t r i c t ; o u r $who = " E r i c " ; sub b o n j o u r { p r i n t " B o n j o u r $who ! \ n " ; } BEGIN { p r i n t " C h a r g e m e n t du module \ n " ; } END { p r i n t " F i n du module \ n " ; } 1;

3.7 Export
Le terme export signie lexportation dans lespace de nom du programme appelant des variables / fonctions du module. Ce principe permet de ne pas avoir utiliser la syntaxe Module::Variable ou Module::Fonction chaque utilisation dun lment du module mais simplement Variable ou Fonction. Pour pouvoir exporter des lments, notre module doit comporter les lments suivants : package Outils; use Exporter; our @ISA=qw(Exporter); Le ligne our @ISA=qw(Exporter) ; signie que lon va raliser des exports de type ISA (voir programmation objet pour les autres types dexport).

3.7.1

Types de variables dun module

On diffrencie 3 types de variables dans un module : 1. les variables exportes par dfaut. Le script appelant na rien faire pour utiliser les lments ainsi exports, ces lments se trouvent dans lespace de nom du script ds lutilisation du module. 2. les variables ou groupes (tags) de variables exports. Le script appelant doit notier ce quil dsire importer dans son espace de nom.

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]

11

3. les variables non exportables. Elles ne sont alors pas utilisables par le script (sauf de manire explicite Module : :. . .). Les 2 premiers types de variables sont dclares laide de la fonction our.

3.7.2

Export par dfaut

Les symboles exports par dfaut doivent tre lists dans le tableau @EXPORT. our @EXPORT=qw(&bonjour, &fonction, $variable); Le & permet de dsigner une fonction, il nest pas obligatoire mais demeure souvent pour des raisons de lisibilit videntes.

3.7.3

Export individuel

Les symboles exports de manire individuelle sont imports par le programme appelant de manire explicite et en fonction de ses besoins. La dclaration au niveau du module seffectue laide du tableau @EXPORT_OK our @EXPORT_OK=qw(&okbonjour, &okfonction, $okvariable); Du ct du programme appelant, celui-ci doit indiquer les variables/fonctions quil dsire importer du module. Listing 3.8 Outils.pm
1 2 3 4 u s e B o i t e : : O u t i l s qw ( : DEFAULT &o k f o n c t i o n &o k v a r i a b l e ) ; use s t r i c t ; ...

Il est ncessaire dutiliser la variable :DEFAULT pour indiquer que lon dsire importer en plus des variables/fonctions par dfaut, les lments exports par dfaut (@EXPORT).

3.7.4

Export par groupe

Il est possible de grouper de variables dans un ensemble. Chaque ensemble sera dni comme un lmnt dune table de hashage nomm %EXPORT_TAGS. our %EXPORT_TAGS=(LISTE1=>[qw(&bonjour, &fonction)], LISTE2=>[qw($variable, $var2)]); Par convention, le nom des tags est x en majuscule. Attention : Les symboles points par les diffrentes Tags DOIVENT tre dclars dans les variable @EXPORT et/ou @EXPORT_OK. Donc la fonction bonjour, la variable $variable doivent tre dclars dans la table @EXPORT et/ou @EXPORT_OK. Limport dans le script se fait de la faon suivante : use Boite::Outil qw(:DEFAULT :LISTE1);

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]

12

3.8 Exemple complet


Attention Suivant lexemple prcdent, le chier Outil.pm se situe dans le rpertoire Boite. Listing 3.9 Outil.pm
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 package B o i t e : : O u t i l s ; use s t r i c t ; use E x p o r t e r ; our our our our @ISA=qw ( E x p o r t e r ) ; @EXPORT=qw ( $who ) ; @EXPORT_OK=qw ( $ q u i &b o n j o u r &a u r e v o i r ) ; %EXPORT_TAGS= ( f o n c t i o n s = >[qw(& b o n j o u r &a u r e v o i r ) ] , v a r i a b l e s = >[qw ( $who $ q u i ) ]

); o u r $who = " E r i c " ; our $qui = " Toto " ; my $ p r i v e = " P r i v e " ; sub b o n j o u r { p r i n t " B o n j o u r $who ! \ n " ; } sub a u r e v o i r { p r i n t "Au r e v o i r $ q u i ! \ n " }

sub p r i v e { print " $prive " ; } BEGIN { p r i n t " C e c i e s t e x c u t au c h a r g e m e n t du module \ n " ; } END { p r i n t " C e c i e s t e x c u t l a f i n de l \ e x c u t i o n du module \ n " ; } 1;

Listing 3.10 script.pl


1 2 3 4 5 6 7 # ! / u s r / b i n / p e r l w use s t r i c t ; u s e B o i t e : : O u t i l s qw ( : DEFAULT $ q u i : f o n c t i o n s ) ; p r i n t $who . " \ n " ; print $qui . " \ n" ;

CHAPITRE 3. UTILISATION DES MODULES EN PERL[?]


8 bonjour ;

13

Chapitre 4

Le CGI avec PERL


4.1 A propos
4.1.1 Mots cls
PERL Practical Extraction and Report Language.

4.2 Rappel sur le HTML


Un formulaire se compose dune balise <FORM> et se termine par une balise </FORM>. Ces deux balises permettent de placer des champs de saisie de donnes qui seront envoys lors de lauppui sur un bouton gnr par la balise de type INPUT TYPE=SUBMIT. Ce bouton INPUT TYPE=SUBMIT peut tre remplac par une IMAGE, cest ce que nous utiliserons dans lexemple ci-dessous pour illustrer le comportement de method=POST et method=GET. A noter que lors de lutilisation de cette image les coordonnes du clic sur limage sont envoyes en plus du reste des informations.

4.3 Utilisation simple du formulaire


4.3.1 Le chier HTML [1]
Listing 4.1 postget.html
1 2 3 4 5 6 7 8 9 10 11 <HTML> <HEAD> <TITLE> P e r l Example HTML < / TITLE> < /HEAD> <BODY> <H2>Form P o s t s t o a P e r l CGI s c r i p t < / H2> <HR> <FORM ACTION= " / c g i b i n / p o s i t i o n . p l " METHOD= "POST" > POST Method : C l i c k w i t h i n t h e image t o o b t a i n t h e x , y c o o r d i n a t e s f o r t h a t p o i n t . <P> <INPUT NAME= " image " TYPE= " image " SRC= " l i n u x . g i f " >

14

CHAPITRE 4. LE CGI AVEC PERL


12 13 14 15 16 17 18 19 20 21

15

< /FORM> <BR> <FORM ACTION= " / c g i b i n / p o s i t i o n . p l " METHOD= "GET" > GET Method : C l i c k w i t h i n t h e image t o o b t a i n t h e x , y c o o r d i n a t e s f o r t h a t p o i n t . <P> <INPUT NAME= " image " TYPE= " image " SRC= " l i n u x . g i f " > < /FORM> <HR> < /BODY> < /HTML>

4.3.2

Le chier PERL
Listing 4.2 position.pl

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24

# ! / u s r / b i n / p e r l w # # Example o f p o s t q u e r y i n p e r l # p r i n t " C o n t e n t t y p e : t e x t / h t m l \ n \ n " ; p r i n t " <HTML><BODY> <H1>Mouse B u t t o n Query < / H1 > \ n " ; p r i n t " You s u b m i t t e d t h e f o l l o w i n g name / v a l u e p a i r s : \ n " ; i f ( $ENV{ REQUEST_METHOD } eq "POST" ) { $form = <STDIN > ; } else { $form = $ENV{ QUERY_STRING } ; } @ p a i r s = s p l i t ( / & / , $form ) ; p r i n t " <UL> " ; while ( @pairs ) { $ p a i r = s h i f t @pairs ; $ p a i r =~ s / \ + / / g ; p r i n t " <LI ><CODE> $ p a i r < /CODE> \ n " ; } p r i n t " </UL> " ; p r i n t " \ n < /BODY> </HTML> " ;

4.4 Formulaire avec champs de saisie


Listing 4.3 formulaire.html
1 2 3 4 5 6 7 8 <html > <head> < t i t l e >Hummm, c &#39; e s t bon . . . </ title > < / head> <body> <h1> S a l u t , gourmand ! < / h1> <form method= " p o s t " a c t i o n = " / c g i b i n / r e p o n s e . p l " >

CHAPITRE 4. LE CGI AVEC PERL


9 10 11 12 13 Quel e s t v o t r e p a r f u m f a v o r i ? < i n p u t t y p e = " t e x t " name= " p a r f u m " / > <input type=" submit " / > < / form> < / body> < / html >

16

4.5 Utilisation du module CGI


Listing 4.4 parfum.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 # ! / u s r / b i n / p e r l w u s e CGI qw ( : s t a n d a r d ) ; print header ( ) , s t a r t _ h t m l ( t i t l e => "Hummm, c e s t bon . . . " , l a n g => " f r FR" ), h1 ( " S a l u t , gourmand ! " ) ; i f ( my $ f a v o r i t e = param ( " p a r f u m " ) ) { p r i n t p ( " Votre parfum f a v o r i e s t $ f a v o r i t e . " ) ; } else { print start_form , " Quel e s t v o t r e p a r f u m f a v o r i ? " , t e x t f i e l d ( p a r f u m ) , " " , submit , end_form ; } print end_html ( ) ;

4.6 Utilisation du module CGI version objet


Listing 4.5 parfum_obj.pl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 # ! / u s r / b i n / p e r l w u s e CGI qw ( : s t a n d a r d ) ; $q = new CGI ; p r i n t $q>h e a d e r ( ) , $q> s t a r t _ h t m l ( t i t l e => "Hummm, c e s t bon . . . " , l a n g => " f r FR" ), $q>h1 ( " S a l u t , gourmand ! " ) ; i f ( my $ f a v o r i t e = $q>param ( " p a r f u m " ) ) { p r i n t $q>p ( " V o t r e p a r f u m f a v o r i e s t $ f a v o r i t e . " ) ; } else { p r i n t $q> s t a r t _ f o r m , " Quel e s t v o t r e p a r f u m f a v o r i ? " , $q> t e x t f i e l d ( p a r f u m ) , " " ,

CHAPITRE 4. LE CGI AVEC PERL


17 18 19 20 21 $q>s u b m i t , $q>e n d _ f o r m ; } p r i n t $q>e n d _ h t m l ( ) ;

17

Chapitre 5

Utilisation de Perl avec MySql


5.1 A propos
5.1.1 Mots cls
perl DBI GD Practical Extraction and Report Language Data Base Interface Perl Graphics Library

5.2 Cration dune base de donnes


Sous lidentit de root, tapez mysql puis mysql> create database exemple; Query OK, 1 row affected (0.00 sec) mysql> use exemple; Database changed mysql> grant all privileges on exemple to eric; Query OK, 0 rows affected (0.21 sec) mysql> quit Bye

5.3 Cration / suppression dune table


Listing 5.1 Cration / Suppression dune Table
1 2 3 4 5 6 7 8 9 10 11 # ! / u s r / b i n / p e r l w u s e DBI ; my $db = " DBI : mysql : e x e m p l e " ; my $ u s e r = " e r i c " ; my $dbh = DBI>c o n n e c t ( $db , $ u s e r ) | | d i e " $0 : c a n t c o n n e c t t o $db : $DBI : : e r r s t r \ n " ; # S u p p r e s s i o n de l a t a b l e

18

CHAPITRE 5. UTILISATION DE PERL AVEC MYSQL


12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 my $ r e q u e t e = "DROP TABLE $ { u s e r } _cd " ; my $ s t h = $dbh> p r e p a r e ( $ r e q u e t e ) o r d i e " $0 : c a n t p r e p a r e : $DBI : : e r r s t r \ n " ; $ s t h > e x e c u t e ( ) ; # C r a t i o n de l a t a b l e e r i c _ c d $ r e q u e t e = "CREATE TABLE $ { u s e r } _cd ( i d INT , t i t l e CHAR ( 5 0 ) , a r t i s t CHAR ( 5 0 ) , i n t e r p r e t e CHAR ( 5 0 ) , m a i s o n CHAR ( 5 0 ) , y e a r INT , p u r c h a s e d DATE, t y p e CHAR ( 5 0 ) , nombre INT , b a r c o d e CHAR ( 5 0 ) , p r i x FLOAT) " ; $ s t h = $dbh> p r e p a r e ( $ r e q u e t e ) o r d i e " $0 : c a n t p r e p a r e : $DBI : : e r r s t r \ n " ; $ s t h > e x e c u t e ( ) ; # I n s e r t i o n de d o n n e s d a n s l a t a b l e $ r e q u e t e = " INSERT INTO $ { u s e r } _cd VALUES ( ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? ) " ; $ s t h = $dbh> p r e p a r e ( $ r e q u e t e ) o r d i e " $0 : c a n t p r e p a r e : $DBI : : e r r s t r \ n " ; $good = $bad = 0 ; open F , " c d d a t a . t x t " ; w h i l e ( <F > ) { chomp ; @cd = s p l i t / \ | / ; $cd [ 6 ] = j o i n , r e v e r s e s p l i t / , $cd [ 6 ] ; i f ( $ s t h > e x e c u t e ( @cd [ 0 . . 1 0 ] ) ) { $good ++; } else { warn " $0 : c a n t i n s e r t $cd [ 0 ] , $cd [ 1 ] : $DBI : : e r r s t r \ n " ; $bad ++; } } close (F ); # F i n d u t i l i s a t i o n de l a b a s e de d o n n e s $dbh> d i s c o n n e c t ; # R a p p o r t de f i n p r i n t " Added $good rows " ;

19

5.4 Lecture dune base de donnes et afchage de statistiques


Listing 5.2 Lecture dune base de donnes et afchage de statistiques
1 # ! / u s r / b i n / p e r l w

CHAPITRE 5. UTILISATION DE PERL AVEC MYSQL


2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48

20

u s e DBI ; u s e GD : : Graph : : p i e ; u s e CGI ; # use d i a g n o s t i c s ; my $db = " DBI : mysql : e x e m p l e " ; my $ u s e r = " e r i c " ; my $dbh = DBI>c o n n e c t ( $db , $ u s e r ) | | d i e " $0 : c a n t c o n n e c t t o $db : $DBI : : e r r s t r \ n " ; $ r e q u e t e = " s e l e c t y e a r ( p u r c h a s e d ) a s y , c o u n t ( ) from $ { u s e r } _cd g r o u p by y " ; $ s t h = $dbh> p r e p a r e ( $ r e q u e t e ) o r d i e " $0 : c a n t p r e p a r e : $DBI : : e r r s t r \ n " ; $ s t h > e x e c u t e ( ) o r d i e " $0 : c a n t e x e c u t e : $DBI : : e r r s t r \ n " ; my $ c d _ r e f = $ s t h > f e t c h a l l _ a r r a y r e f ( ) o r d i e " $0 : c a n t f e t c h d a t a $DBI : : e r r s t r \ n " ; $ s t h > f i n i s h ; $dbh> d i s c o n n e c t ; # S e p a r a t e l a b e l s and v a l u e s my $row= " " ; f o r e a c h $row ( @$cd_ref ) { push @{ $ d a t a [ 0 ] } , @$row [ 0 ] ; push @{ $ d a t a [ 1 ] } , @$row [ 1 ] ; } # Dessiner l e graphisme $mygraph =new GD : : Graph : : p i e ( ) ; $mygraph > s e t ( t i t l e => CD P u r c h a s e s by Year , l a b e l => C o p y l e f t E r i c , a x i s l a b e l c h r => b l a c k , p i e _ h e i g h t => 36 ); my $gdo = $mygraph > p l o t ( \ @data ) ; my $ c g i = new CGI ; p r i n t $ c g i >h e a d e r ( t y p e => image / png , e x p i r e s => +10 ) ; O u t p u t img p r i n t $gdo>png ; exit 0;

Listings
2.1 2.2 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 4.1 4.2 4.3 4.4 4.5 5.1 5.2 ip.pl . . . . . . . . . . . . . . . . . . . . . . . . . . . . quiestou.pl . . . . . . . . . . . . . . . . . . . . . . . . . Outils.pm . . . . . . . . . . . . . . . . . . . . . . . . . script1.pl . . . . . . . . . . . . . . . . . . . . . . . . . Outils.pm . . . . . . . . . . . . . . . . . . . . . . . . . Outils.pm . . . . . . . . . . . . . . . . . . . . . . . . . script2.pl . . . . . . . . . . . . . . . . . . . . . . . . . script3.pl . . . . . . . . . . . . . . . . . . . . . . . . . Outils.pm . . . . . . . . . . . . . . . . . . . . . . . . . Outils.pm . . . . . . . . . . . . . . . . . . . . . . . . . Outil.pm . . . . . . . . . . . . . . . . . . . . . . . . . . script.pl . . . . . . . . . . . . . . . . . . . . . . . . . . postget.html . . . . . . . . . . . . . . . . . . . . . . . . position.pl . . . . . . . . . . . . . . . . . . . . . . . . . formulaire.html . . . . . . . . . . . . . . . . . . . . . . parfum.pl . . . . . . . . . . . . . . . . . . . . . . . . . parfum_obj.pl . . . . . . . . . . . . . . . . . . . . . . . Cration / Suppression dune Table . . . . . . . . . . . . Lecture dune base de donnes et afchage de statistiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 5 7 8 8 8 9 9 10 11 12 12 14 15 15 16 16 18 19

21

Bibliographie
[1] IBM. http ://www-306.ibm.com/software/webservers/dgw/apisamp.htm. [2] Sylvain Lhuillier.

22

Index
D DBI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 G GD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 O our . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 P perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2, 4, 6, 13, 17 Q qw . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 U use . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6

23

Vous aimerez peut-être aussi