#!G:/Prg_internet/Perl/bin/perl.exe # cours 6 # Scripts-fr.com # insertion et recherche dans une base de données mysql #le nom de la base de données $database="courscgi"; # le nom ou adresse ip du serveur mysql $hostname="localhost"; # le port de mysql $port="3306"; # le user a utiliser $mysqluser="user"; # le mot de passe associé a cet utilisateur. $mysqlpassword="passe"; ############################################# use CGI qw(:standard); #use CGI::Carp qw(fatalsToBrowser); eval('use DBI;'); $q = new CGI; print $q->header(); # connexion DB en utilisant la fonction connect_db # pour voir ce qu'elle fait, regardez plus bas ... $dbh = &connect_db; # récupération du contenu du formulaire $action = $q->param('action'); $nom= $q->param('nom'); $prenom= $q->param('prenom'); $rue= $q->param('rue'); $no= $q->param('no'); $cp= $q->param('cp'); $localite= $q->param('localite'); $pays= $q->param('pays'); $keyword = $q->param('keyword'); if ($action eq "insert") { # il faut insérer dans la base de données &Insertion; # je prépare la requete SQL qui sera utilisée pour afficher le contenu de la base de données $sql_rech = "select nom,prenom,rue,no,cp,localite,pays from personnes"; } else { # pas insertion -> recherche sur critère # on prépare une requete SQL qui ne va afficher que les enregistrement correspondants $sql_rech = "select nom,prenom,rue,no,cp,localite,pays from personnes where nom like '%$keyword%' or prenom like '%$keyword%'"; } # affiche le haut d'une page print &html_haut; # effectue la recherche avec la requete sql $sql_rech &Recherche; # affiche le bas de page html, avec le formulaire d'insertion print &html_bas; # déconnexion de la DB $rc = &disconnect_db($dbh); exit 0; sub Insertion { # cette fonction prend les valeurs saisies par l'utilisateur et les insère dans la # base de données my ($sql, $rv); # création de la requete SQL d'insertion dans la table personnes $sql = "insert into personnes (nom,prenom,rue,no,cp,localite,pays) values ('$nom','$prenom','$rue','$no','$cp','$localite','$pays')"; # préparation et exécution de la requete sql $sth = $dbh->prepare($sql) or &erreur("impossible de préparer la requete ($sql).".$dbh->errstr); $rv = $sth->execute or &erreur("impossible d'exécuter la requete.".$sth->errstr); return $rv; } sub Recherche { $sth = $dbh->prepare($sql_rech) or &erreur("impossible de préparer la requete ($sql_rech).".$dbh->errstr); $rv = $sth->execute or &erreur("impossible d'exécuter la requete.".$sth->errstr); # tant qu'il y a des enregistrements correspondants a la requete # je les traite 1 par 1 et je mets le contenu de l'enregistrement courant # dans le tableau @personne # l'ordre des éléments dans ce tableau est le meme ordre que celui utilisé dans la requete # de sélection (select statement) while (@personne = $sth->fetchrow_array) { # je joins les éléments du tableau personne dans un chaine infos_personne # ces éléments sont séparés par un ; $infos_personne = join(";",@personne); # tout simple, je ne fais qu'afficher print "$infos_personne
\n"; } } sub html_haut { return < Cours 6
Nom ou prénom (ou partie de)


Liste des membres :
FIN } sub html_bas { return < Inbsertion d'un nouveau membre
Nom : Prénom :
Rue : numéro :
Code postal : Localité :
Pays :
FIN } sub connect_db { my ($chandler); $chandler = DBI->connect("DBI:mysql:$database:$hostname:$port", $mysqluser, $mysqlpassword) or &erreur("Connection au serveur mySQL impossible\n"); if ($chandler != undef) { return $chandler; } else { &erreur("Connection au serveur mySQL impossible\n"); } } sub disconnect_db { return $dbh->disconnect; } sub erreur { my $err_msg = $_[0]; print <Erreur :
$err_msg FIN exit 1; }