Perl CGI formulaire
Résolu/Fermé
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
-
15 nov. 2008 à 12:31
deniss92 Messages postés 39 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 15 septembre 2013 - 25 nov. 2008 à 23:10
deniss92 Messages postés 39 Date d'inscription vendredi 3 août 2007 Statut Membre Dernière intervention 15 septembre 2013 - 25 nov. 2008 à 23:10
1 réponse
deniss92
Messages postés
39
Date d'inscription
vendredi 3 août 2007
Statut
Membre
Dernière intervention
15 septembre 2013
1
25 nov. 2008 à 23:10
25 nov. 2008 à 23:10
Bonsoir,
J'ai modifié le script intial, car le formulaire ,avec param() n'était pas indispensable, sachant que l'on peut récupérer la date système et faire le même traitement. Ainsi, j'ai fait 2 scripts (un script pour le traitement des fichiers de logs et un autre pour l'affichage via cgi sur une page web). les fichiers de logs se pésentent sous la forme suivante :
extrait de fichiers de logs :
28 nov 8 16:47 stat_public_public_20081108164623
92 nov 8 17:58 stat_public_public_20081108175826
2490 nov 8 18:04 stat_public_public_20081108180022
336 nov 8 18:50 stat_public_public_20081108184955
389 nov 8 19:03 stat_public_public_20081108190222
130 nov 8 21:32 stat_public_public_20081108213219
90 nov 8 21:52 stat_public_public_20081108215243
Le script de traitement est le suivant :
#!/usr/bin/perl
# script de traitement des données
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
chdir('/home/user/stats') || die ("Erreur chdir \n");
$annee_mois='*'.$annee.$mois.'*'; # récupération du critère année et mois
$motif="COMPTE_UTILISATEUR";
$total;
open RES,"> /var/www/cgi-bin/stat_mois.txt" or die "E/S : $!\n";
chomp(@logs = glob($annee_mois));
foreach $e(@logs){
open FILE,"$e" or warn "E/S : $!\n";
while (<FILE>){
if ($_=~/$motif/){
$total++;
chomp;
($date,$compte,$id,$user,$ip)=split (/\|/,$_);
$_=join(";",$user,$date);
push @{$table{$user}}, $date;
}
}
}
foreach $user (sort keys %table) {
$nombre = 0;
@dates = @{$table{$user}};
foreach $date (@dates) {
$nombre++;
}
push @{$stat{$user}},$nombre;
}
foreach $k(sort keys %stat){
chomp;
print RES "$k", map { ";$_" } @{$stat{$k}}, "\n";
}
print RES "Total;",$total,"\n";
Le script cgi pour le résultat sur le web est le suivant :
#!/usr/bin/perl
# affiche les données
use CGI qw(:standard :html3);
$cgi = new CGI;
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
$mois_annee=$mois.'-'.$annee;
my %table;
open (FILE, "stat_mois.txt");
while (<FILE>) {
my ($user,$connexion)=split/;/;
chomp;
push @{$table{$user}},$connexion;
}
$\="\n";
print
$cgi->header() .
$cgi->start_html (
-title=>'Stats mensuelles',
-author=>'Deniss92',
-meta=>{'keywords'=>'CGI Perl'},
-BGCOLOR=>'white',
-LINK=>'red',
-charset=>'UTF-8',
).
$cgi->h1('Statistiques du '.$mois_annee) . "\n";
#print '<TABLE border="1" cellspacing="2" cellpadding="2">' . "\n";
print $cgi->table({border=>1,width=>'20%'}) . "\n";
print $cgi->Tr(th[qw(Utilisateur Connexion)]);
for my $k (sort keys %table) {
print $cgi->Tr(td($k), td({align=>"right"},[sort @{$table{$k}}]));
}
print "</TABLE>";
$cgi->end_html ;
exit (0);
Le résultat du script donne :
<head>
<title>Stats mensuelles</title>
<link rev="made" href="mailto:Deniss92" />
<meta name="keywords" content="CGI Perl" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body charset="UTF-8">
<h1>Statistiques du 11-2008</h1>
<table width="20%" border="1" />
<tr><th>Utilisateur</th> <th>Connexion</th></tr>
<tr><td>Alain Terrieur</td> <td align="right">16</td></tr>
<tr><td>Alex Terrieur</td> <td align="right">14</td></tr>
<tr><td>Alexis</td> <td align="right">14</td></tr>
<tr><td>Aude Veiselt</td> <td align="right">18</td></tr>
<tr><td>Chantal Op�ra</td> <td align="right">11</td></tr>
<tr><td>Gilet de Sauvetage</td> <td align="right">19</td></tr>
<tr><td>Jean Peuplu</td> <td align="right">13</td></tr>
<tr><td>Mathias</td> <td align="right">15</td></tr>
<tr><td>Public interne</td> <td align="right">101</td></tr>
<tr><td>Public externe</td> <td align="right">751</td></tr>
<tr><td>Tony</td> <td align="right">16</td></tr>
<tr><td>Total</td> <td align="right">988
</td></tr>
</TABLE>
-------------------------------------------------------------
Reamarque : Je reste convaincu, qu'on peut faire plus simple.
A bientot.
Deniss92
J'ai modifié le script intial, car le formulaire ,avec param() n'était pas indispensable, sachant que l'on peut récupérer la date système et faire le même traitement. Ainsi, j'ai fait 2 scripts (un script pour le traitement des fichiers de logs et un autre pour l'affichage via cgi sur une page web). les fichiers de logs se pésentent sous la forme suivante :
extrait de fichiers de logs :
28 nov 8 16:47 stat_public_public_20081108164623
92 nov 8 17:58 stat_public_public_20081108175826
2490 nov 8 18:04 stat_public_public_20081108180022
336 nov 8 18:50 stat_public_public_20081108184955
389 nov 8 19:03 stat_public_public_20081108190222
130 nov 8 21:32 stat_public_public_20081108213219
90 nov 8 21:52 stat_public_public_20081108215243
Le script de traitement est le suivant :
#!/usr/bin/perl
# script de traitement des données
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
chdir('/home/user/stats') || die ("Erreur chdir \n");
$annee_mois='*'.$annee.$mois.'*'; # récupération du critère année et mois
$motif="COMPTE_UTILISATEUR";
$total;
open RES,"> /var/www/cgi-bin/stat_mois.txt" or die "E/S : $!\n";
chomp(@logs = glob($annee_mois));
foreach $e(@logs){
open FILE,"$e" or warn "E/S : $!\n";
while (<FILE>){
if ($_=~/$motif/){
$total++;
chomp;
($date,$compte,$id,$user,$ip)=split (/\|/,$_);
$_=join(";",$user,$date);
push @{$table{$user}}, $date;
}
}
}
foreach $user (sort keys %table) {
$nombre = 0;
@dates = @{$table{$user}};
foreach $date (@dates) {
$nombre++;
}
push @{$stat{$user}},$nombre;
}
foreach $k(sort keys %stat){
chomp;
print RES "$k", map { ";$_" } @{$stat{$k}}, "\n";
}
print RES "Total;",$total,"\n";
Le script cgi pour le résultat sur le web est le suivant :
#!/usr/bin/perl
# affiche les données
use CGI qw(:standard :html3);
$cgi = new CGI;
($sec, $min, $heure, $jour, $mois,$annee, undef, undef, undef) = localtime();
$mois += 1 and $annee += 1900;
$mois_annee=$mois.'-'.$annee;
my %table;
open (FILE, "stat_mois.txt");
while (<FILE>) {
my ($user,$connexion)=split/;/;
chomp;
push @{$table{$user}},$connexion;
}
$\="\n";
$cgi->header() .
$cgi->start_html (
-title=>'Stats mensuelles',
-author=>'Deniss92',
-meta=>{'keywords'=>'CGI Perl'},
-BGCOLOR=>'white',
-LINK=>'red',
-charset=>'UTF-8',
).
$cgi->h1('Statistiques du '.$mois_annee) . "\n";
#print '<TABLE border="1" cellspacing="2" cellpadding="2">' . "\n";
print $cgi->table({border=>1,width=>'20%'}) . "\n";
print $cgi->Tr(th[qw(Utilisateur Connexion)]);
for my $k (sort keys %table) {
print $cgi->Tr(td($k), td({align=>"right"},[sort @{$table{$k}}]));
}
print "</TABLE>";
$cgi->end_html ;
exit (0);
Le résultat du script donne :
<head>
<title>Stats mensuelles</title>
<link rev="made" href="mailto:Deniss92" />
<meta name="keywords" content="CGI Perl" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body charset="UTF-8">
<h1>Statistiques du 11-2008</h1>
<table width="20%" border="1" />
<tr><th>Utilisateur</th> <th>Connexion</th></tr>
<tr><td>Alain Terrieur</td> <td align="right">16</td></tr>
<tr><td>Alex Terrieur</td> <td align="right">14</td></tr>
<tr><td>Alexis</td> <td align="right">14</td></tr>
<tr><td>Aude Veiselt</td> <td align="right">18</td></tr>
<tr><td>Chantal Op�ra</td> <td align="right">11</td></tr>
<tr><td>Gilet de Sauvetage</td> <td align="right">19</td></tr>
<tr><td>Jean Peuplu</td> <td align="right">13</td></tr>
<tr><td>Mathias</td> <td align="right">15</td></tr>
<tr><td>Public interne</td> <td align="right">101</td></tr>
<tr><td>Public externe</td> <td align="right">751</td></tr>
<tr><td>Tony</td> <td align="right">16</td></tr>
<tr><td>Total</td> <td align="right">988
</td></tr>
</TABLE>
-------------------------------------------------------------
Reamarque : Je reste convaincu, qu'on peut faire plus simple.
A bientot.
Deniss92