Bonjour tout le monde,

Voila j'ai à rélaiser un prog en Perl/CGI qui doit enregistrer les valeurs passées dans un formulaire dans une BdD MySQL.

La page html se trouve par là : http://perso.enstimac.fr/~alaouimd/saisie.html

Et voici le ode de mon fichier pl qui se nomme ecrire_nouveau_pdt.pl
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/bin/perl
use strict;
use warnings;
use DBI;
use CGI;
my $cgi = new CGI;
my %in = $cgi->parse_form_data;
 
my $dbh = DBI->connect("DBI:mysql:produit", 'root', '');
 
 
###################################################
# Ecriture du produit dans la table générant l'Id #
###################################################
my $ins_Tpdt = $dbh->prepare(qq(insert into t_pdt (CAS, purete, unite_purete, forme) values(?, ?, ?, ?)));
my $CAS = $in{'CAS'};
my $purete = $in{'purete'};
my $unite_purete = $in{'unite_purete'};
my $forme = $in{'forme'};
$ins_Tpdt->execute($CAS, $purete, $unite_purete, $forme) || die "Pb à l'insertion : $DBI::errstr";
$ins_Tpdt->finish;
 
##########################################
# Récupération de l'Id nouvellement créé #
##########################################
my $sel= $dbh->prepare('select max(ID_produit) from t_pdt');
$sel->execute();
my $Id_pdt = $sel;
 
###############################################################
# Ecriture des propriétés du produit dans la table T_prop_pdt #
###############################################################
 
 
my $sth = $dbh->prepare("select * from T_prop_pdt");
$sth->execute;
my @ListeNomsColonnesDeMaTable = @{$sth->{NAME}};
 
#Création d'un tableau associatif pour tenir compte des champs optionnels non renseignés par l'utilisateur
my %valeurs_prop_pdt = map {$_ => "(NC)"} @ListeNomsColonnesDeMaTable;
foreach my $f (%in) {
  $f =~ s/\s+$//;                         #suppression des espaces en fin de texte
        #reste à supprimer les < > / et \ enlever ces caractères de la chaîne =>sécurité oblige
  $valeurs_prop_pdt{'$f'} = $in{'$f'};    #remplacement de la valeur NC par celle rentrée par l'utilisateur
}
 
 
#Création de la liste des attributs que l'on va renseigner dans la table T_prop_pdt
my $ListeNomsColonnesVirgules = join(", ", @ListeNomsColonnesDeMaTable);
my $ListePlaceHolders = join(", ", map {'?'} @ListeNomsColonnesDeMaTable);
 
#Création de la liste de valeurs que l'on va rentrer dans la table T_prop_pdt
my $ListeValeursPdtVirgules = join(", ", %valeurs_prop_pdt);       #ça peut marcher avec un tableau associatif?
 
my $ins_Tproppdt = $dbh->prepare("insert into T_prop_pdt ($ListeNomsColonnesVirgules) values($ListeValeursPdtVirgules) where T_prop_pdt.ID_produit = T_pdt.ID_produit");
$ins_Tproppdt->execute || die "Pb insertion : $DBI::errstr";
$ins_Tproppdt->finish;
 
 
$dbh->disconnect;
J'execute juste mon programme pl dans une invit MS-DOS et je recois l'insulte suivante
Undefined subroutine CGI::parse_form_data
Quelqu'un a-t-il une idée de ce que ca veut dire ?
Et pendant que vous y etes pourriez vous me dire ce que vous en pensez de mon programme ?

Je vous remercie d'avance

Anas