Dans beaucoup de cas stocker de l'information dans des fichiers textes peut suffire; mais il existe des cas ou la complexité des relations qui relient ces fichiers est telle qu'il vaut alors mieux utiliser une base de données que l'on peut interroger via du SQL.
Pour pouvoir tester cet exemple sur votre serveur il faut que DBI soit installé avec le module XBase. Pour savoir si c'est le cas renseignez vous auprès de votre hébergeur.
DBI est une interface base de données qui est indépendante de la base de données utilisée.
Cela signifie que moyennant très peu de modifications cet exemple peut être adapté pour fonctionner avec une base de données Oracle, Mysql, postgres, ...
Dans l'exemple nous avons une table categori avec les champs id_cat, nom_cat.
Voici maintenant le bout de script PERL qui permet d'afficher les différentes catégories sur une page html :
#!/usr/bin/perl
require "cgi-lib.pl";
# précise qu'il faut utiliser DBI
eval('use DBI;');
# défini dans quel répertoire se trouve(nt) le(s) fichier(s) de
# ma (mes) table(s)
$dbase_dir = "/home/rotule/www/annuaire";
# permet de spécifier le content type
print &PrintHeader;
# je spécifie ma requete en SQL normal. Pour plus d'infos sur le
# SQL, allez voir http://eric007.free.fr/sql/Introduction.htm (par
# exemple)
$sql_liste_cat = "select id_cat, nom_cat from categori order by nom_cat";
# J'effectue la connexion DB et si ca ne marche pas j'imprime un
# message d'erreur
my $dbh = DBI->connect("DBI:XBase:$dbase_dir")
or print "Connection a la DB impossible\n";
# Dans $dbh, j'ai maintenant l'identifiant de ma connexion
# en utilisant mon identifiant de la connexion, je prépare la requete
# SQL a effectuer. En cas d'erreur d'imprime un message
my $sth = $dbh->prepare($sql_liste_cat)
or print "prepare error : $dbh->errstr()";
# On va maintenant exécuter a proprement parler la requete SQL (ou
# imprimer un message d'erreur)
$sth->execute() or print "execute error : $sth->errstr()";
$premier=1;
# $sth->fetchrow_array permet de récupérer 1 par 1 les différents
# enregistrements trouvés par la requete SQL.
# On copie le contenu de l'enregistrement dans le tableau @catégories
while (@categories = $sth->fetchrow_array)
{
# le if sert uniquement a afficher un titre si c'est notre premier
# passage dans la boucle
if ($premier == 1)
{ print "<hr>Liste des catégories : <br><br>\n";
$premier = 0;
}
# je récupères la valeur des champs de cet enregistrement. Les
# champs sont stockés dans le tableau, dans le même ordre que
# ce que la requete SQL a indiqué.
# $categories[0] contient donc id_cat
# $categories[1] contient donc nom_cat
($id_cat, $nom_cat) = @categories;
# Il ne reste plus qu'a les imprimer à l'écran
print <<ENDHTML;
$id_cat : $nom_cat<br>
ENDHTML
}
# Voila c'est finit on se déconnecte
$dbh->disconnect;
Remarques :
Ms-Access à du mal a exporter les caractères accentués vers DBase, ils
vaut donc mieux les éviter.
En utilisant DBI, on utilise une couche d'abstraction entre le perl et
la base de données physique. Si par après vous souhaitez passer à une
base de données plus sérieuse, il n'y a que quelques lignes a changer :
celles qui définissent a quelle base de données se connecter
Les commandes SQL supportées sont : select, delete, insert, update
(+ create table et drop table mais je n'ai pas encore testé)