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 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
| #!/usr/bin/perl
print "Content-type: text/html\n\n";
use CGI 'param'; # Commentaire
#Extraction des variables du formulaire HTML
$action = param('action');
$nom = param('nom');
$prenom = param('prenom');
$telephone = param('telephone');
$NumeroDossier = param('NumeroDossier');
$CodeUtilisateur = param('CodeUtilisateur');
#Si le bouton "Lire" est enclanché le CGI retourne ceci
#Ce code permet de parcourir le dossier CLIENTS et de voir si l'entrée y est déjà en regardant le numéro de dossier et le code utilisateur.
if ( $action eq "Lire" ) {
if ( &Lire_CLIENTS($NumeroDossier, $CodeUtilisateur) eq 1 ) {
$message= "Dossier trouvé"; }
else {
$message= "Dossier inexistant"; }
open(Template, "tp1_retour.tpl");
while (<Template>) {
$Ligne = $_;
$Ligne =~ s/####NOM####/$nom/;
$Ligne =~ s/####PRENOM####/$prenom/;
$Ligne =~ s/####TELEPHONE####/$telephone/;
$Ligne =~ s/####NUMDOSSIER####/$NumeroDossier/;
$Ligne =~ s/####CODEUTIL####/$CodeUtilisateur/;
$Ligne =~ s/####MESSAGE####/$message/;
print $Ligne;
}
close(Template);
}
#Si le bouton "ajoute" est enclanché le CGI retourne ceci
#Dans un premier temps ce code s'assure que toutes les entrées sont correcte en utilisant des fonctions de validation (voir plus bas).
#Dans un second temps le code vérifie si l'entrée est déjà dans la base de donnée CLIENTS
#Enfin si l'entrée n'est pas présente elle l'ajoute.
if ( $action eq "Ajouter" ) {
if ( &valide_prenom_et_nom($nom) eq 0 ) {
$message= "Paramètre invalide (Nom)"; }
if ( &valide_prenom_et_nom($prenom) eq 0 ) {
$message= "Paramètre invalide (Prénom)"; }
if ( &valide_telephone($telephone) eq 0 ) {
$message= "Paramètre invalide (Numéro de téléphone)"; }
if ( &valide_code_utilisateur($CodeUtilisateur, &nom, $prenom) eq 0 ) {
$message= "Paramètre invalide (Code Utilisateur)"; }
if ( &Lire_CLIENTS($NumeroDossier, $CodeUtilisateur) eq 1 ) {
$message= "Dossier déjà existant"; }
else {
open(CLIENTS, ">>CLIENTS.txt");
$message= "Dossier ajouté";
print CLIENTS "$NumeroDossier:$CodeUtilisateur:$prenom:$nom:$telephone";
close(CLIENTS); }
open(Template, "tp1_retour.tpl");
while (<Template>) {
$Ligne = $_;
$Ligne =~ s/####NOM####/$nom/;
$Ligne =~ s/####PRENOM####/$prenom/;
$Ligne =~ s/####TELEPHONE####/$telephone/;
$Ligne =~ s/####NUMDOSSIER####/$NumeroDossier/;
$Ligne =~ s/####CODEUTIL####/$CodeUtilisateur/;
$Ligne =~ s/####MESSAGE####/$message/;
print $Ligne;
}
close(Template);
exit;
}
#Si le bouton "Suprimer" est enclanché le CGI retourne ceci
#Dans un premier temps le code vérifie si l'entrée est déjà dans la base de donnée CLIENTS
#Enfin si l'entrée est présente elle la "supprime"
#Pour ce faire elle recopie le fichier CLIENTS dans une autre fichier en omettant la ligne que l'on désir supprimé.
#Le nouveau fichier est renommé CLIENTS et l'ancien détruit pour éviter les doublons.
if ( $action eq "Supprimer" ) {
if ( &Lire_CLIENTS($NumeroDossier, $CodeUtilisateur) == 0 ) {
$message= "Dossier inexistant"; }
else {
open(CLIENTS, ">>CLIENTS.txt") ;
$new = "NEW.txt";
$current = "CLIENTS.txt";
$old = "CLIENTS_OLD.txt";
$arg_Sup_CodeUtil = $CodeUtilisateur;
$arg_Sup_NumDossier = $NumeroDossier;
open(NEW, "> $new");
while(<CLIENTS>) {
$LigneCLIENT = $_;
($NumeroDossier, $CodeUtilisateur, $nom, $prenom, $telephone) = split(/:/,$LigneCLIENT);
if ( $NumeroDossier ne $arg_Sup_NumDossier || $CodeUtilisateur ne $arg_Sup_CodeUtil ) {
print NEW "$LigneCLIENT"; }
}
close(CLIENTS);
close(NEW);
rename($current, $old);
rename($new, $current);
unlink $old;
$message = "Dossier supprimé"; }
open(Template, "tp1_retour.tpl");
while (<Template>) {
$Ligne = $_;
$Ligne =~ s/####NOM####/$nom/;
$Ligne =~ s/####PRENOM####/$prenom/;
$Ligne =~ s/####TELEPHONE####/$telephone/;
$Ligne =~ s/####NUMDOSSIER####/$NumeroDossier/;
$Ligne =~ s/####CODEUTIL####/$CodeUtilisateur/;
$Ligne =~ s/####MESSAGE####/$message/;
print $Ligne;
}
close(Template);
exit;
}
#Si le bouton "modifier" est enclanché le CGI retourne ceci
#Dans un premier temps ce code s'assure que toutes les entrées sont correcte en utilisant des fonctions de validation (voir plus bas).
#Dans un second temps le code vérifie si l'entrée est déjà dans la base de donnée CLIENTS
#Enfin si l'entrée est présente elle la "modifie"
#Pour ce faire elle recopie le fichier CLIENTS dans une autre fichier en omettant la ligne que l'on désir modifier.
#Ensuite on ajoute le nouvelle ligne modifié a la suite.
#Le nouveau fichier est renommé CLIENTS et l'ancien détruit pour éviter les doublons.
if ( $action eq "Modifier" ) {
if ( &valide_prenom_et_nom($nom) == 0 ) {
$message= "Paramètre invalide (Nom)"; }
if ( &valide_prenom_et_nom($prenom) == 0 ) {
$message= "Paramètre invalide (Prénom)"; }
if ( &valide_telephone($telephone) == 0 ) {
$message= "Paramètre invalide (Nunméro de téléphone)"; }
if ( &valide_code_utilisateur($CodeUtilisateur, &nom, $prenom) == 0 ) {
$message= "Paramètre invalide (Code Utilisateur)"; }
if ( &Lire_CLIENTS($NumeroDossier, $CodeUtilisateur) == 0 ) {
$message= "Dossier inexistant"; }
else {
open(CLIENTS, ">>CLIENTS.txt") ;
$new = "NEW.txt";
$current = "CLIENTS.txt";
$old = "CLIENTS_OLD.txt";
$arg_Sup_CodeUtil = $CodeUtilisateur;
$arg_Sup_NumDossier = $NumeroDossier;
open(NEW, "> $new");
while(<CLIENTS>) {
$LigneCLIENT = $_;
($NumeroDossier, $CodeUtilisateur, $nom, $prenom, $telephone) = split(/:/,$LigneCLIENT);
if ( $NumeroDossier ne $arg_Sup_NumDossier || $CodeUtilisateur ne $arg_Sup_CodeUtil ) {
print NEW "$LigneCLIENT"; }
}
print NEW "$NumeroDossier : $CodeUtilisateur : $prenom : $nom : $telephone";
close(CLIENTS);
close(NEW);
rename($current, $old);
rename($new, $current);
unlink $old;
$message = "Dossier modifié"; }
open(Template, "tp1_retour.tpl");
while (<Template>) {
$Ligne = $_;
$Ligne =~ s/####NOM####/$nom/;
$Ligne =~ s/####PRENOM####/$prenom/;
$Ligne =~ s/####TELEPHONE####/$telephone/;
$Ligne =~ s/####NUMDOSSIER####/$NumeroDossier/;
$Ligne =~ s/####CODEUTIL####/$CodeUtilisateur/;
$Ligne =~ s/####MESSAGE####/$message/;
print $Ligne;
}
close(Template);
exit;
}
#Cette section contient les fonctions ou sous-programme nécessaire à la validation des entrées.
#Fonction qui valide un Code Utilisateur
#Param in: Code utilisateur, nom et prenom
#Param out: valide ou pas (0 ou 1)
sub valide_code_utilisateur {
$arg_CodeUtil = @_[0];
$arg_nom = @_[1];
$arg_pnom = @_[2];
$nom_var = lc($arg_nom);
$pnom_var = lc($arg_pnom);
$CodeUtil_var = lc($arg_CodeUtil);
if ( $CodeUtil_var =~ /^[pnom_var(0)][pnom_var(1)][nom_var(0)][nom_var(1)][nom_var(2)][0-9]{0-3}$/ ) {
$CodeUtil_val = 1; }
else {
$CodeUtil_val = 0; }
return $CodeUtil_val; }
#Fonction qui valide un numero de telephone
#Param in: numero de tel
#Param out: valide ou pas (0 ou 1)
sub valide_telephone {
($arg_telephone) = @_;
if ( $arg_telephone =~ /^[0-9]{3}-[0-9]{3}-[0-9]{4}$/ ) {
$tel_val = 1; }
else {
$tel_val = 0; }
return $tel_val; }
#Fonction qui valide un nom et un prenom
#Param in: nom ou prenom
#Param out: valide ou pas (0 ou 1)
sub valide_prenom_et_nom {
( $arg_pnom_nom ) = @_;
if ($arg_pnom_nom =~ /^[a-z]|[A-Z]|-|.|'|\s|{0-40}$/) {
$nom_pnom__val = 1; }
else {
$nom_pnom_val = 0; }
return $nom_pnom_val; }
#Fonction fouille le fichier CLIENTS
#Param in: NumeroDossier ou CodeUtilisateur
#Param out: valide ou pas (0 ou 1)
sub Lire_CLIENTS {
$arg_Recherche_CodeUtil = @_[0];
$arg_Recherche_NumDossier = @_[1];
open(CLIENTS, "CLIENTS.txt");
while ( <CLIENTS> ) {
$LigneCLIENT = $_;
($NumeroDossier, $CodeUtilisateur, $nom, $prenom, $telephone) = split(/:/,$LigneCLIENT);
if ( ($NumeroDossier eq $arg_Recherche_NumDossier)|($CodeUtilisateur eq $arg_Recherche_CodeUtil) ) {
$Present_val = 1; }
else {
$Present_val = 0; }
}
return $Present_val; } |
Partager