recuperation piece jointe formulaire

recuperation piece jointe formulaire - Perl - Programmation

Marsh Posté le 23-09-2008 à 21:52:48    

Bonjour, j'utilise un scrip perl qui traite les données d'un formulaire pis me les envoie par email
tout marche bien jusqu'au moment ou dans mon formulaire je rajoute une piece jointe  
a partir de la je recois touours les données de formulaire par mail mais la piece jointe reste dans un repertoir sur mon serveur et j'ai comme reponse Internal Server Error
quand je vai dans mes logs j'ai comme erreur Died at /web/sites/vhbu3/1/205/105681/public/www/bin/PForm.pl line 235.
 
j'utilise une interface pour parametrer mon script en me rendant a l'adresse du script  
j'ai donc sur mon serveur le script PForm.pl(755) et un repertoire PFORM_data(777) qui contien le fichier htaccess
pouvez vous m'aider je n'y comprend plus rien merci
 
voici mon script
 
#!/usr/bin/perl
$PFORM_DATAS_DIR = 'PFORM_datas'; # nom du sous-répertoires qui contiendra les données.
 
&recup_conf;
$MAX_UP = $CONF{'MAX_UPLOAD'} * 1024;
if ($CONF{'DOMAIN'}) { $DOMAIN = $CONF{'DOMAIN'}; } else { $DOMAIN = ($ENV{'SERVER_NAME'} || $ENV{'HTTP_HOST'}); }
$script = ($ENV{'REQUEST_URI'} || $ENV{'SCRIPT_NAME'});
$script =~ s/\?.*//gs;
$site_base = 'http://'.$DOMAIN;
$CGI = $site_base.$script;
use CGI;
$qw = new CGI;
%Form=();
foreach ($qw->param) { s/^\s//; s/\s$//; $Form{$_}=$qw->param($_); }
## INSTALLATION ##
if ($Form{'ACT'} eq 'INSTALL' && $CONF{'INSTALL'} != 1) { &install; }
elsif ($CONF{'INSTALL'} != 1) { &form_install; }
## ADMINISTRATION ##
elsif ($Form{'ACT'} eq 'ADMIN') { &admin_menu; }
elsif ($Form{'ACT'} eq 'admin_config') { &admin_config; }
elsif ($Form{'ACT'} eq 'modif_conf') { &admin_modif_conf; }
elsif ($Form{'ACT'} eq 'admin_new_form') { &admin_new_form; }
elsif ($Form{'ACT'} eq 'creer_new_form') { &creer_new_form; }
elsif ($Form{'ACT'} eq 'admin_sup_form') { &admin_sup_form; }
elsif ($Form{'ACT'} eq 'admin_sup_form_confirm') { &admin_sup_form_confirm; }
elsif ($Form{'ACT'} eq 'admin_modif_form') { &admin_modif_form; }
elsif ($Form{'ACT'} eq 'admin_aide_form') { &admin_aide_form; }
## GESTION DU FORMULAIRE ##
elsif ($Form{'F'} && $Form{'F'} =~ /^\d{14}$/ && -e "$PFORM_DATAS_DIR/F_$Form{F}.dat" ) { &form_gestion; }
else { &admin_enter; }
 
###############################
sub form_gestion
{
$F = $Form{'F'}; $F_fic = $PFORM_DATAS_DIR.'/F_'.$F.'.dat';
if ($ENV{'CONTENT_LENGTH'} > $MAX_UP) { $aff = "L'ensemblre des fichiers attachés que vous envoyez a une taille trop grande !!<BR>Taille d'upload limitée pour raison de sécurité !"; &affichage; }
open (CONF_FORM,"<$F_fic" );
while ($line=<CONF_FORM> )
      {
      chomp($line);
      if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
      }
close (CONF_FORM);
&verifie_referer;
if ($C_FORM{'REQUIS'} !~ /^$/) { &verifie_oblig; }
$from = $Form{'email'}; $subject = $Form{'sujet'}; $name = $Form{'nom'}; $t_to = 0;
if ($Form{'TO'}) { @TO = split(/,/, $Form{'TO'}); } else { $t_to = 0; }
&order_Form;
if ($Form{'TO'}) {
@DEST = split(/\|/,$C_FORM{'DESTINATAIRES'});
foreach(@DEST)
      {
      ($pseud,$mail) = split(/,/, $_);
      foreach(@TO) { if ($_ eq $pseud) { $t_to++; push(@EMAILS, "$mail" ); } }
      }
}
if ($t_to == 0)  { $aff = "<b>ERREUR DE CONFIGURATION</b><br>Il n'y a pas de champ 'TO' !"; &affichage; }
if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
   {  
   $aff .= $C_FORM{'CONFIRM_MESS'}.qq~\n<FORM METHOD="POST" ACTION="$CGI" ENCTYPE="multipart/form-data">
   <TABLE cellspacing="0" cellpadding="4" border="0">
   $aff_recap
   </TABLE>
   <INPUT TYPE="HIDDEN" NAME="valid" VALUE="1">
   <BR>
   <INPUT TYPE="button" VALUE=" RETOUR " STYLE="$C_FORM{'CONFIRM_STYLE'}" OnClick="javascript:history.back()">  <INPUT TYPE="SUBMIT" NAME="submit" VALUE=" VALIDER " STYLE="$C_FORM{'CONFIRM_STYLE'}">
   </FORM>
   ~;
   &affichage;
   }
else { # else 1
$i = 0;
if ($C_FORM{'EXTENSIONS'}) { @EXT_AUTORISE = split(/,/, $C_FORM{'EXTENSIONS'}); }
foreach (keys %Form)
        {
        if ($_ =~ /^fichier/ && $Form{$_})  
           {
           if ($C_FORM{'EXTENSIONS'})  
              {  
              foreach $ext(@EXT_AUTORISE) { if ($Form{$_} =~ /$ext$/i) { $ext_ok = 1; last; } }
              if ($ext_ok != 1)
                 {
                 $aff = qq~<b>Extension de fichier non autorisée !</b><BR><br>
                 L'extension de la pièce jointe "$_" n'est pas autorisée !<br><br>
                 <A HREF="javascript:history.back()" CLASS="lien">RETOUR AU FORMULAIRE</A><BR>
                 ~;
                 &affichage;
                 }  
              }
           &copy_du_fichier($Form{$_});
           $out_file[$i] = $out_file;  
           }
        }
&sendmail;
if (!$C_FORM{'REDIRECT'})
   {
   $aff .= $C_FORM{'REDIRECT_MESS'}.qq~\n<BR><TABLE cellspacing="0" cellpadding="4" border="0">
   $aff_recap
   </TABLE><BR>
   ~;
   &affichage;
   }
else { print $qw->header(-LOCATION => $C_FORM{'REDIRECT_URL'}); exit; }
              }  # fin else 1
 
}
## CLASSEMENT DANS L'ORDRE ##
sub order_Form
{
if (!$C_FORM{'ORDRE_TYPE'})
   {
   foreach (keys %Form)
           {
           if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '' && $Form{$_} !~ /^\s+$/)
              {
              $form_temp = $Form{"$_"};
              $form_temp =~ s/\r\n/<BR>/g;
              $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
              if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
                 {  
                 $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
                 if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}" STYLE="$C_FORM{'CONFIRM_STYLE'}">\n~; }
                 }
              if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'})
                 {  
                 $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
                 }
              $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
              }
           }
   }
elsif ($C_FORM{'ORDRE_TYPE'} == 1)
      {
      foreach (sort keys %Form)
              {
              if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '' && $Form{$_} !~ /^\s+$/)
                 {
                 $form_temp = $Form{"$_"};
                 $form_temp =~ s/\r\n/<BR>/g;
                 $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
                 if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
                    {
                    $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
                    if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}" STYLE="$C_FORM{'CONFIRM_STYLE'}">\n~; }
                    }
                 if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/; }
                 $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
                 }
               }
 
      }  # ici
else {  
     local(@order) = split(/\,/, $C_FORM{'ORDRE'});
     foreach (@order)
             {
             if ($Form{$_} ne '') {
             $form_temp = $Form{"$_"};
             $form_temp =~ s/\r\n/<BR>/g;
             $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">\n$form_temp\n~;
             if ($C_FORM{'CONFIRM'} && !$Form{'valid'}) { $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~; }
             if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~; }
             $aff_recap .= q~</TD></TR>~;
             delete($Form{$_});
                               }
             }
     foreach (sort keys %Form)
             {
             if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '')
                {
                $form_temp = $Form{"$_"};
                $form_temp =~ s/\r\n/<BR>/g;
                $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
                if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
                    {
                    $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
                    if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}">\n~; }
                    }
                if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/; }
                }
              $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
              }
 
     }
}
## ENVOI EMAIL ##
sub sendmail
{
if (!$subject) { $subject = "Formulaire envoyé du web !"; }
$mail = 'From: '.$from;
if ($name !~ /^\s+$/ && $name ne '') { $mail .= ' ('.$name.')'; }
if ($Form{'PRIORITY'} !~ /^1$|^3$|^5$/) { $Form{'PRIORITY'} = 3; }
$to = join(',',@EMAILS);
$mail .= "\n".'Reply-To: '.$from."\n".'To: '.$to."\n".'X-Mailer: P-FORM V5.0 PRO/http://www.perl-fr.com'."\n".'X-Priority: '.$Form{'PRIORITY'}."\n".'Subject: '.$subject."\n";
$date = &date(0);
$mail .= 'Voici le résultat du formulaire envoyé du web du site '.$site_base.' le '.$date.' :'."\n\n".$corps_mail."\n";
if ($C_FORM{'INFOS'})
   {
   $mail .= '-' x 70;
   $mail .= "\n".q~Informations complémentaires sur l'utilisateur :~."\n".'Ip : '.$ENV{'REMOTE_ADDR'}."\n";
   if ($ENV{'REMOTE_HOST'}) { $mail .= 'Host : '.$ENV{'REMOTE_HOST'}."\n"; }
   $mail .= 'Langue : '.$ENV{'HTTP_ACCEPT_LANGUAGE'}."\n".'Systeme : '.$ENV{'HTTP_USER_AGENT'}."\n".'Page référente : '.$ENV{'HTTP_REFERER'}."\n";
   $mail .= '-' x 70;
   $mail .= "\n";
   }
open(MAIL, "|$CONF{SENDMAIL} -t" ) || die "ne peut ouvrir $sendmail!\n";
print MAIL $mail;
if ($i > 0)
   {
   foreach $i(1..$i) {
   if (-e $out_file[$i])
      {
      $n_file = $out_file[$i]; $n_file =~ s/^.*[\/|\\|\:]//g;
      open(FILE, "uuencode $out_file[$i] $n_file|" ) or die;
      while(<FILE> ) { print MAIL; }
      close(FILE);
      }
      unlink("$out_file[$i]" );
       }
   }
close(MAIL);
}
## VERIFICATION DES CHAMPS OBLIGATOIRES ##
sub verifie_oblig
{
local(@oblig) = split (/\,/,$C_FORM{'REQUIS'});
local($err) = 0; local($aff_err);
foreach(@oblig)
       {
       $_ =~ s/^\s//; $_ =~ s/\s$//;  
       if ($_ eq 'email') { if (&verifie_email("$Form{email}" ) == 0) { $err++; $aff_err .= '- email<br>'."\n"; } }
       else { if (!$Form{"$_"} || $Form{"$_"} =~ /^\s+$/) { $err++; $aff_err .= '- '.$_.'<br>'."\n"; } }
       }
if ($err > 0)
   {
   $aff = qq~<b>Erreur : CHAMPS OBLIGATOIRES !!</b><BR>
   Veuillez vérifier votre formulaire !<br>
   Les $err champ(s) obligatoire(s) suivants n'ont pas été remplis correctement :<br><br>
   $aff_err
   <BR><a href="javascript:history.back()" class="lien"> Retour au formulaire !</a><BR>
   ~;
   &affichage;
   }
}
sub verifie_referer
{
local($trouv) = 0;
if (!$ENV{'HTTP_REFERER'}) { goto FIN_VR; }
@DOMAINES = split(/,/, "$C_FORM{'DOMAINES'}" );
foreach(@DOMAINES) { if ($ENV{'HTTP_REFERER'} =~ /$_/i) { $trouv = 1; last; } }
FIN_VR:
if ($trouv == 0) { $aff = '<b>ERREUR !!<BR><BR>Le script n\'a pas été appelé d\'un site autorisé !!</b>'; &affichage; }
}
sub affichage
{
print "Content-type: text/html\n\n";
open(HAUT_HTML,"<$PFORM_DATAS_DIR/F_temp_h_$F.dat" );
while (<HAUT_HTML> ){ print $_; }
close(HAUT_HTML);
print $aff;
open(BAS_HTML,"<$PFORM_DATAS_DIR/F_temp_b_$F.dat" );
while (<BAS_HTML> ){ print $_; }
close(BAS_HTML);
exit;
}
###############################
sub admin_enter
{
&style;
&affiche_admin("<B>ADMINISTRATION</B>$badpass",qq|<TABLE BORDER="0" WIDTH="100%" ALIGN="CENTER" CELLPADDING="0" CELLSPACING="0">
<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="ADMIN">
<TR><TD CLASS="texte_w" valign="top" align="center"><A HREF="http://www.perl-fr.com" target="_blank"><IMG SRC="http://vs6.hostfr.net/EXT/PForm/Pform.jpg" BORDER="0" ALIGN="absmiddle"></A></td><TD CLASS="texte_w">PASSWORD :<BR><INPUT TYPE="password" size="20" maxlength="20" name="pass" $STYLE>
<BR><INPUT TYPE="submit" $STYLE VALUE=" ENTRER "></TD></TR></FORM></TABLE>|);
}
sub admin_menu
{
&pass_verif;
&style;
opendir (DIR, "$PFORM_DATAS_DIR" );
$nb_f = @files = grep(/^F_\d{14}\.dat$/,readdir(DIR));
closedir(DIR);
$sel = '';  
if ($nb_f > 0)
   {
   foreach (@files)
           {  
           if ($_ =~ /^F_(\d{14})\.dat$/) { $id = $1; }
           open (CONF_FIC,"<$PFORM_DATAS_DIR/$_" );
           while ($line=<CONF_FIC> )
                 {
                 chomp($line);
                 if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) )
                    {  
                    if ($1 eq 'NAME') { $name = $2; }
                    }
                 }
           close(CONF_FIC);      
           $opt_f .= qq|<OPTION VALUE="$id">$name</OPTION>\n|;
           }
$sel = qq|\n<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_modif_form"> <SELECT NAME="Fm" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Configuration du formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Modifiez la configuration du formulaire sélectionné  ')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_sup_form"> <SELECT NAME="Fs" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Supprimer le formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Supprimez le formulaire sélectionné  \\n')">$IMG_POINT</A></td></TR>
<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_aide_form"> <SELECT NAME="Fa" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Créér un formulaire html</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Outil d\\'aide à la création de votre formulaire html ! \\n')">$IMG_POINT</A></td></TR>\n|;
   }
&affiche_admin("<B>ADMINISTRATION</B>",qq|<TABLE BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_config" checked></td><TD CLASS="texte_w">Configuration du script</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Modifiez la configuration principale du script  \\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_new_form"></td><TD CLASS="texte_w">Nouveau formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Créez un nouveau formulaire  \\n')">$IMG_POINT</A></TD></TR>$sel
<TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" VALIDER "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
</FORM></TABLE>|);
}
sub admin_aide_form
{
&pass_verif;
&style;
$Fa = $Form{'Fa'};
if ($Form{'i'}) { $i = $Form{'i'}; } else { $i = 0; }
 
open (CONF_FORM,"<$PFORM_DATAS_DIR/F_$Fa.dat" );
while ($line=<CONF_FORM> )
      {
      chomp($line);
      if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
      }
close (CONF_FORM);
if ($i >0)
   {
    foreach $i(1..$i)
            {
            if (!$Form{"nom_$i"}) {
              &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
              <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|);
              }
            $hid .= qq~<INPUT TYPE="hidden" NAME="etiquette_$i" VALUE="$Form{"etiquette_$i"}">
            <INPUT TYPE="hidden" NAME="nom_$i" VALUE="$Form{"nom_$i"}">
            <INPUT TYPE="hidden" NAME="type_$i" VALUE="$Form{"type_$i"}">
            <INPUT TYPE="hidden" NAME="value_$i" VALUE="$Form{"value_$i"}">~;
            if ($Form{"type_$i"} eq 'text' || $Form{"type_$i"} eq 'password')
               {
               if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
               $plus_form .= qq~<INPUT TYPE="$Form{"type_$i"}" NAME="$Form{"nom_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               if ($Form{"value_$i"}) { $plus_form .= qq~ VALUE="$Form{"value_$i"}"~; }
               $plus_form .= qq~><BR>\n~;
               }
            if ($Form{"type_$i"} eq 'select')
               {
               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
              <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }  
               $plus_form .= qq~<SELECT NAME="$Form{"nom_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               $plus_form .= qq~>\n~;
               $n_tab = 'val'.$i; @$n_tab = split(/,/, $Form{"value_$i"});
               foreach(@$n_tab) { $plus_form .= q~<OPTION>$_</OPTION>\n~; }
               $plus_form = '<BR>\n';  
               }
            if ($Form{"type_$i"} eq 'textarea')
               {
               if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
               $plus_form .= qq~&lt;TEXTAREA NAME="$Form{"nom_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               $plus_form .= qq~&gt;\n~;
               if ($Form{"value_$i"}) { $plus_form .= qq~$Form{"value_$i"}~; }
               $plus_form .= qq~\n&lt;/TEXTAREA&gt;<BR>\n~;
               }
            if ($Form{"type_$i"} =~ /^radio$|^checkbox$/)
               {
              if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
              <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               $plus_form .= qq~<INPUT TYPE="$Form{"type_$i"}" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}">~;
               if ($Form{"etiquette_$i"}) { $plus_form .= qq~ $Form{"etiquette_$i"}~; }
               $plus_form .= "<BR>\n";
               }
             if ($Form{"type_$i"} eq 'hidden')
               {
               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               $plus_form .= qq~<INPUT TYPE="hidden" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}">\n~;
               }    
            if ($Form{"type_$i"} eq 'file')
               {
               if ($Form{"nom_$i"} !~ /fichier/) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champs fichier doit avoir le mot 'fichier' dans son nom.<br><br>
               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
               $plus_form .= qq~<INPUT TYPE="file" NAME="$Form{"nom_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               $plus_form .= "><BR>\n";
               }
             if ($Form{"type_$i"} eq 'submit')
               {
               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               if ($Form{"nom_$i"} !~ /submit/i) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champ image ou bouton de soummision doit avoir obligatoirement dans son nom le mot : submit !.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               $plus_form .= qq~<INPUT TYPE="submit" NAME="submit" VALUE="$Form{"value_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               $plus_form .= "><BR>\n";
               }
             if ($Form{"type_$i"} eq 'reset')
               {
               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               $plus_form .= qq~<INPUT TYPE="reset" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}"~;
               if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
               $plus_form .= "><BR>\n";
               }
             if ($Form{"type_$i"} eq 'image')
               {
               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               if ($Form{"nom_$i"} !~ /submit/i) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champ image ou bouton de soummision doit avoir obligatoirement dans son nom le mot : submit !.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
               $plus_form .= qq~<INPUT TYPE="image" NAME="submit" SRC="$Form{"value_$i"}" BORDER="0"><BR>\n~;
               }
            }
 
   }
$i++;
$aff = qq|<b>Aide à la création d'un formulaire html pour '$C_FORM{NAME}'.</b><BR>
<TABLE BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
<INPUT TYPE="HIDDEN" NAME="ACT" VALUE="admin_aide_form"><INPUT TYPE="HIDDEN" NAME="Fa" VALUE="$Fa">
<INPUT TYPE="HIDDEN" NAME="i" VALUE="$i">
$hid
<TR><TD CLASS="texte_w">Etiquette :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="etiquette_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Etiquette :\\nTitre du champ.\\n\\nFACULTATIF\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">Nom du champ :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="nom_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Le nom que portera le champ, utilisé par le script\\n\\nOBLIGATOIRE\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">Type du champ :</td><TD CLASS="texte_w"><SELECT NAME="type_$i" $STYLE><OPTION VALUE="text">Champ de texte</OPTION><OPTION VALUE="password">Champ password</OPTION>
<OPTION VALUE="textarea">Zone de texte</OPTION><OPTION VALUE="checkbox">Case à cocher</OPTION>
<OPTION VALUE="radio">Bouton radio</OPTION><OPTION VALUE="SELECT">Liste / Menu</OPTION><OPTION VALUE="file">Champ de fichier</OPTION>
<OPTION VALUE="hidden">Champ masqué</OPTION><OPTION VALUE="submit">Bouton de soumission</OPTION><OPTION VALUE="reset">Bouton reset</OPTION>
<OPTION VALUE="image">Bouton image</OPTION>
</SELECT></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Type de champ...')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">Valeur par default :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="value_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Valeur par défault du champ\\n\\nOBLIGATOIRE pour les champs :\\n- bouton radio\\n- case à cocher\\n- champ caché\\n\\nDans le cas d\\'un champ de type Liste/Menu :\\nséparez les valeurs par une virgule !\\n\\nDans le cas d\\'un champ image, mettre l\\'adresse url ce celle-ci\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" AJOUTER UN CHAMP "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
</FORM></TABLE><BR><BR>
Code html du formulaire à copier / coller dans le code source de votre page html :<BR>
<TEXTAREA $STYLE cols="90" ROWS="10" readonly>
<FORM METHOD="post" ACTION="$CGI" ENCTYPE="multipart/form-data">
<INPUT TYPE="HIDDEN" NAME="F" VALUE="$Fa">
$plus_form
</FORM>
</TEXTAREA><br><br>
Attention, pour le bon fonctionnement du formulaire, les champs suivant doivent obligatoirement être présents :<BR>
TO,submit,$C_FORM{'REQUIS'}
|;
 
 
$aff .= &bout_retour;
&affiche_admin('<B>ADMINISTRATION</B>',$aff);
}
sub admin_sup_form
{
&pass_verif;
&style;
$aff = &bout_retour;
open (FIC, "<$PFORM_DATAS_DIR/F_$Form{Fs}.dat" );
while ($line=<FIC> )
                 {
                 chomp($line);
                 if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) )
                    {  
                    if ($1 eq 'NAME') { $name = $2; }
                    }
                 }
close(FIC);
&affiche_admin('<B>ADMINISTRATION</B>',qq|<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
<INPUT TYPE="HIDDEN" NAME="Fs" VALUE="$Form{Fs}"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="admin_sup_form_confirm">
<INPUT $STYLE TYPE="submit" VALUE="Confirmer la suppression du formulaire $name ?">
</FORM>$aff|);
}
sub admin_sup_form_confirm
{
&pass_verif;
&style;
$aff = &bout_retour;
$Fs = $Form{'Fs'};
unlink("$PFORM_DATAS_DIR/F_$Fs.dat" );
unlink("$PFORM_DATAS_DIR/F_temp_b_$Fs.dat" );
unlink("$PFORM_DATAS_DIR/F_temp_h_$Fs.dat" );
&affiche_admin('<B>ADMINISTRATION</B>',qq|Le formulaire a été supprimé !<br>$aff|);
}
sub admin_new_form
{
&pass_verif;
&style;
$aff = &configuration_form(1);
$aff .= &bout_retour;
&affiche_admin("<B>ADMINISTRATION</B>",qq|<B>Créer un nouveau formulaire :</B><br>$aff|);
}
sub admin_modif_form
{
&pass_verif;
&style;
$Fm = $Form{'Fm'};
$aff = &configuration_form(2);
$aff .= &bout_retour;
&affiche_admin("<B>ADMINISTRATION</B>",qq|<B>Modifier le formulaire :</B><br>$aff|);
}
sub configuration_form
{
$sel_c1 = ''; $sel_c2 = ''; $sel_i1 = ''; $sel_i2 = ''; $sel_r1 = ''; $sel_r2 = '';
$sel_o1 = ''; $sel_o2 = ''; $sel_o3 = ''; $hid = '';
if ($_[0] == 1)  
   {  
   $Val_submit = 'CREER';
   $Val_T_H = qq|<HTML>\n<HEAD>\n<STYLE type="text/css">\n.lien { FONT-SIZE: 9pt; COLOR: #3E4044; FONT-FAMILY: Arial; }\n.texte { FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial; }\n</STYLE>\n<TITLE>\nCONTACT\n</TITLE></HEAD>\n<BODY>\n|;
   $Val_T_B = "</BODY>\n</HTML>\n";
   $C_FORM{'DOMAINES'} = $DOMAIN;
   $C_FORM{'CONFIRM_MESS'} = qq~&lt;b&gt;Confirmation !&lt;/b&gt;&lt;BR&gt;\nPour valider le formulaire, merci de confirmer les informations suivantes :~;
   $C_FORM{'CONFIRM_STYLE'} = 'FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 8pt; BACKGROUND-COLOR: #EAB522';
   $C_FORM{'REDIRECT_URL'} = 'http://';
   $C_FORM{'REDIRECT_MESS'} = "&lt;b&gt;Merci !&lt;/b&gt;&lt;BR&gt;
&lt;i&gt;Votre message a bien &eacute;t&eacute; envoy&eacute;.&lt;/i&gt;&lt;br&gt;Nous vous r&eacute;pondrons dans les plus brefs
d&eacute;lais.&lt;BR&gt;Voici les informations que vous nous avez soumises :";
   }
if ($_[0] == 2)  
   {  
   $Val_submit = 'MODIFIER';    
   open(FIC_T_H, "<$PFORM_DATAS_DIR/F_temp_h_$Fm.dat" ); while (<FIC_T_H> ) { $Val_T_H .= $_; } close(FIC_T_H);
   open(FIC_T_B, "<$PFORM_DATAS_DIR/F_temp_b_$Fm.dat" ); while (<FIC_T_B> ) { $Val_T_B .= $_; } close(FIC_T_B);
   open (CONF_FORM,"<$PFORM_DATAS_DIR/F_$Fm.dat" );
   while ($line=<CONF_FORM> )
         {
         chomp($line);
         if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
         }
   close (CONF_FORM);
   $C_FORM{'DOMAINES'} =~ s/,/\n/g;
   $C_FORM{'DESTINATAIRES'} =~ s/\|/\n/g;
   if ($C_FORM{'CONFIRM'} == 1) { $sel_c1 = ' selected'; } else { $sel_c2 = ' selected'; }
   if ($C_FORM{'INFOS'} == 1) { $sel_i1 = ' selected'; } else { $sel_i2 = ' selected'; }
   if ($C_FORM{'REDIRECT'} == 1) { $sel_r1 = ' selected'; } else { $sel_r2 = ' selected'; }
   if ($C_FORM{'ORDRE_TYPE'} == 1) { $sel_o2 = ' selected'; }
   elsif ($C_FORM{'ORDRE_TYPE'} == 2) { $sel_o3 = ' selected'; }
   else { $sel_o1 = ' selected'; }
   $hid = qq~<INPUT TYPE="HIDDEN" NAME="Fm" VALUE="$Fm">~;
   }
return<<FORM;
<br><TABLE WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="creer_new_form">
$hid
<TR><TD CLASS="texte" valign="top">Configuration :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Nom du formulaire :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="25" maxlength="25" name="NAME" $STYLE VALUE="$C_FORM{NAME}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Nom du formulaire :\\nIl permettra de vous y retrouver parmi les différents formulaires\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Noms de domaine autorisés à utiliser ce formulaire :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="DOMAINES" COLS="35" ROWS="4">$C_FORM{DOMAINES}\n</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Les noms de domaine qui pourront appeler\\nle script pour ce formulaire de leur site\\n\\nAttention : 1 par ligne !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Pseudos et emails des destinataires de ce formulaire :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="DESTINATAIRES" COLS="35" ROWS="4">$C_FORM{DESTINATAIRES}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Mettre un pseudo et un email par ligne, séparé par une virgule\\n\\nexemple :\\nToto,toto\@toto.com\\nTiti,titi\@titi.org\\n\\nCeci permet de ne pas avoir d\\'email visible dans le code source de vos pages\\n\\nSi vous mettez plusieurs destinataires vous pourrez soit :\\n- faire choisir au visiteur à qui écrire\\n- soit mettre les pseudos dans un champ caché séparé par une virgule\\npour que le résultat du formulaire soit envoyé à tous en même temps\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Option 1 : confirmation :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Demander une confirmation avant validation du formulaire ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="CONFIRM"><OPTION VALUE="1"$sel_c1>OUI</OPTION><OPTION VALUE="0"$sel_c2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Avant de valider le formulaire, l\\'utilisateur\\ndevra relire ce qu\\'il a écrit avant de valider\\n\\nATTENTION : Dans le cas de champs de type \\'fichier\\', l\\'utilisateur sera invité, dans ce cas, à rechercher à nouveau les fichiers à envoyer !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Si oui, message sur la page de confirmation :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="CONFIRM_MESS" COLS="35" ROWS="4">$C_FORM{CONFIRM_MESS}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Message que l\\'utilisateur verra sur la page de confirmation\\nau dessus des informations à valider\\n\\nVous pouvez utiliser du code html !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Si oui, style du bouton de soumission :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" $STYLE NAME="CONFIRM_STYLE" SIZE="30" MAXLENGTH="255" VALUE="$C_FORM{CONFIRM_STYLE}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Bouton de soumission :\\npolice de caractère,couleur,taille de la police, couleur de fond .ect... ')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Option 2 : informations sur l'utilisateur :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Recevoir des informations complémentaires sur l'utilisateur ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="INFOS"><OPTION VALUE="1"$sel_i1>OUI</OPTION><OPTION VALUE="0"$sel_i2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Informations complémentaires sur l\\'utilisateur\\ndans l\\'email recu :\\n\\n- adresse IP\\n- nom d\\'hote\\n- systeme d\\'exploitation\\n- langue\\n- page référente\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Option 3 : après validation du formulaire :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Utiliser une page de redirection après envoi ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="REDIRECT"><OPTION VALUE="1"$sel_r1>OUI</OPTION><OPTION VALUE="0"$sel_r2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Si oui :\\n après envoi, l\\'utilisateur sera redirigé vers une page de votre choix.\\n\\nSi non :\\nl\\'utilisateur verra alors un message que vous déterminez\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Si oui, url de redirection :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="REDIRECT_URL" $STYLE VALUE="$C_FORM{REDIRECT_URL}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Url de redirection après validation du formulaire si vous utilisez cette option.\\n\\nL\\'url doit commencer par : http://\n')&#034;&gt;$IMG_POINT&lt [...] lt;/TR&gt;
<TR><TD CLASS="texte_w" valign="top">Si non, message de remerciement après envoi :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="REDIRECT_MESS" COLS="35" ROWS="4">$C_FORM{REDIRECT_MESS}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Message que l\\'utilisateur verra après envoi du formulaire\\n\\nVous pouvez utiliser du code html !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Champs obligatoires :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Champs obligatoires :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="REQUIS" $STYLE name="REQUIS" VALUE="$C_FORM{REQUIS}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Ces champs devront obligatoirement être remplis par le visiteur.\\n\\nSéparez chaque nom de champ par une virgule, exemple :\\n\\nemail,nom,message\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Ordre des champs :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Choix de l'ordre des champs :</td><TD CLASS="texte_w" valign="top"><SELECT name="ORDRE_TYPE" $STYLE><OPTION VALUE="0"$sel_o1>DESORDRE</OPTION><OPTION VALUE="1"$sel_o2>ORDRE ALPHABETIQUE</OPTION><OPTION VALUE="2"$sel_o3>ORDRE AU CHOIX</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Ordre dans lequel les champs seront recus :\\n\\n- désordre : pas d\\'ordre préci.\\n- alphabétique : les champs seront envoyés dans l\\'ordre alphabétique en fonction leur noms.\\n- Au choix : vous définissez l\\'ordre d\\'envoi.\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top">Si ordre 'AU CHOIX', nom des champs :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="ORDRE" $STYLE VALUE="$C_FORM{ORDRE}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Les champs seront envoyés dans l\\'ordre que vous spécifiez.\\n\\nSéparez chaque nom de champ par une virgule, exemple :\\n\\nsujet,nom,email,message\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Fichiers joints :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
<TR><TD CLASS="texte_w" valign="top">Pièces jointes autorisées :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="EXTENSIONS" $STYLE VALUE="$C_FORM{EXTENSIONS}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Uniquement si votre formulaire donne la possibilité d\\'envoyer un ou plusieurs fichiers joints.\\n\\nDans ce cas :\\n\\n- Laissez vide si vous ne souhaitez pas limiter les extensions de fichier.\\n\\n- Entrez les extensions de fichier autorisées, séparées par une virgule et sans point\\nsi vous souhaitez n\\'autoriser que certains types de fichiers.\\nEx : jpg,jpeg,gif,bmp,png,mp3,txt\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte" valign="top">Affichage :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('- Créez une page html\\n- Coupez son code html en 2 parties\\n- Entre ces 2 parties s\\'afficheront les messages générés par le script \\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w" valign="top" colspan="3">Code html de haut de page :<BR>
<TEXTAREA $STYLE NAME="HTML_TEMP_HAUT" COLS="90" ROWS="12">
$Val_T_H
</TEXTAREA><BR>
<BR><font color="#666666"><i>-= ici s'afficheront les messages =-</i></FONT><BR><BR>
Code html de bas de page :<BR>
<TEXTAREA $STYLE NAME="HTML_TEMP_BAS" COLS="90" ROWS="12">
$Val_T_B
</TEXTAREA><BR>
</td></TR>
<TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE="-= $Val_submit LE FORMULAIRE =-"></TD><TD CLASS="texte_w">&nbsp;</td></TR>
</FORM></TABLE>
FORM
}
 
sub creer_new_form
{
&pass_verif;
&style;
$err = 0; $Fm = $Form{'Fm'};
if (!$Form{'NAME'} || $Form{'NAME'} =~ /^\s+$/) { $err++; $aff_err = "- NOM DU FORMULAIRE<br>\n"; }
if (!$Form{'DOMAINES'} || $Form{'DOMAINES'} =~ /^\s+$/) { $err++; $aff_err .= "- Noms de domaines autorisés<br>\n"; }
if (!$Form{'DESTINATAIRES'} || $Form{'DESTINATAIRES'} =~ /^\s+$/) { $err++; $aff_err .= "- Pseudos, Emails<br>\n"; }
if ($Form{'CONFIRM'} && ($Form{'CONFIRM_MESS'} =~ /^\s+$/ || !$Form{'CONFIRM_MESS'})) { $err++; $aff_err .= "- Message de confirmation<br>\n"; }
if ($Form{'REDIRECT'} && $Form{'REDIRECT_URL'} !~ /http:\/\/\S+?\.\S+/) { $err++; $aff_err .= "- Url de redirection<br>\n"; }
if (!$Form{'REDIRECT'} && ($Form{'REDIRECT_MESS'} =~ /^\s+$/ || !$Form{'REDIRECT_MESS'})) { $err++; $aff_err .= "- Message après envoi<br>\n"; }
if (!$Form{'HTML_TEMP_HAUT'} || $Form{'HTML_TEMP_HAUT'} =~ /^\s+$/) { $err++; $aff_err = "- code html du haut de page<br>\n"; }
if (!$Form{'HTML_TEMP_BAS'} || $Form{'HTML_TEMP_BAS'} =~ /^\s+$/) { $err++; $aff_err = "- code html du bas de page<br>\n"; }
if ($Form{'ORDRE_TYPE'} == 2 && ($Form{'ORDRE'} =~ /^\s+$/ || !$Form{'ORDRE'})) { $err++; $aff_err .= "- ordre des champs<br>\n"; }
@DESTINATAIRES = split(/\r\n/, $Form{'DESTINATAIRES'});
$Form{'DESTINATAIRES'} = join('|',@DESTINATAIRES);
@DEST = split(/\|/,$Form{'DESTINATAIRES'});
foreach (@DEST) { ($pseud,$mail) = split(/,/, $_); if (!&verifie_email($mail)) { $err++; $aff_err .= "- emails : mauvais format<br>\n"; last; } push(@EMAILS, "$pseud" ); }
if ($err != 0) { &affiche_admin('ERREUR !',&bad_form); }
$DEST = join(',', @EMAILS);
@DOMAINES = split(/\r\n/, $Form{'DOMAINES'});
$Form{'DOMAINES'} = join(',',@DOMAINES);
if (!$Fm) { $num = &date(1); } else { $num = $Fm; }
open(N_FORM, ">$PFORM_DATAS_DIR/F_$num.dat" );
print N_FORM<<CONF_FORM;
NAME=================$Form{'NAME'}
DOMAINES=================$Form{'DOMAINES'}
DESTINATAIRES=================$Form{'DESTINATAIRES'}
CONFIRM=================$Form{'CONFIRM'}
CONF_FORM
if ($Form{'CONFIRM'} == 1)  
   {
   $Form{'CONFIRM_MESS'} =~ s/\r\n//g;
   print N_FORM qq|CONFIRM_MESS=================$Form{'CONFIRM_MESS'}\nCONFIRM_STYLE=================$Form{'CONFIRM_STYLE'}\n|;
   }
print N_FORM qq|INFOS=================$Form{'INFOS'}\nREDIRECT=================$Form{'REDIRECT'}\n|;
if ($Form{'REDIRECT'} == 1) { print N_FORM qq|REDIRECT_URL=================$Form{'REDIRECT_URL'}\n|; }
if ($Form{'REDIRECT'} == 0) { $Form{'REDIRECT_MESS'} =~ s/\r\n//g; print N_FORM qq|REDIRECT_MESS=================$Form{'REDIRECT_MESS'}\n|; }
print N_FORM qq|REQUIS=================$Form{'REQUIS'}\nORDRE_TYPE=================$Form{'ORDRE_TYPE'}\n|;
if ($Form{'ORDRE_TYPE'} == 2) { print N_FORM qq|ORDRE=================$Form{'ORDRE'}\n|; }
if ($Form{'EXTENSIONS'}) { print N_FORM qq|EXTENSIONS=================$Form{'EXTENSIONS'}\n|; }
close(N_FORM);
eval { chmod(0777,"$PFORM_DATAS_DIR/F_$num.dat" ); };
open(N_FORM_th, ">$PFORM_DATAS_DIR/F_temp_h_$num.dat" );
print N_FORM_th $Form{'HTML_TEMP_HAUT'};
close(N_FORM_th);
eval { chmod(0777,"$PFORM_DATAS_DIR/F_temp_h_$num.dat" ); };
open(N_FORM_tb, ">$PFORM_DATAS_DIR/F_temp_b_$num.dat" );
print N_FORM_tb $Form{'HTML_TEMP_BAS'};
close(N_FORM_tb);
eval { chmod(0777,"$PFORM_DATAS_DIR/F_temp_b_$num.dat" ); };
$aff = &bout_retour;
$pas_oubli = '';
if ($Form{'REQUIS'}) { $pas_oubli = qq~<BR>N'oubliez pas que les champs suivant doivent être présent dans votre formulaire :<br><b>$Form{'REQUIS'}</b><BR>~; }
&affiche_admin("<B>ADMINISTRATION</B>",qq|Le formulaire &quot;<i>$Form{'NAME'}</i>&quot; a été créé ou modifié !<br><br>Il porte le numéro <b>$num</b>.<br><br>
Voici le code html d'entête de votre formulaire :<br>
<TEXTAREA $STYLE COLS="90" ROWS="10">
<FORM METHOD="post" ACTION="$CGI" ENCTYPE="multipart/form-data">
<INPUT TYPE="HIDDEN" NAME="F" VALUE="$num">
<INPUT TYPE="HIDDEN" NAME="TO" VALUE="$DEST">
 
ICI LE RESTE DU CODE DE VOTRE FORMULAIRE
 
</FORM>
</TEXTAREA>
<BR>$pas_oubli
$aff|);
}
sub pass_verif { if ($Form{'pass'} ne $CONF{'PASSWORD'}) { $badpass = q| : <B><font color="#FF0000">password incorrect !</font></B>|;  &admin_enter; } }
sub form_config
{
&style;
if ($CONF{'INSTALL'} != 1) { $Val_act = 'INSTALL'; $hid = ''; } else { $Val_act = 'modif_conf'; $hid = qq~<INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">~; }
@sendm = ('sendmail','/usr/lib/sendmail','/usr/bin/sendmail','/bin/sendmail','/usr/sbin/sendmail','/usr/local/bin/sendmail','/usr/local/lib/sendmail');
foreach $s_mail(@sendm) { if (($s_mail ne '') && (-e "$s_mail" ) && (-x "$s_mail" )) { $path_sendmail .= $s_mail.'\n\n'; } }
if (!$path_sendmail) { $path_sendmail = 'AUCUN !!\n\nRenseignez vous auprès de votre hébergeur !\n'; }
return<<FORM_CONFIG;
<TABLE WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="0" CELLSPACING="0">
<FORM METHOD="POST" ACTION="$CGI">
<INPUT TYPE="HIDDEN" NAME="ACT" VALUE="$Val_act">$hid
<TR><TD CLASS="texte_w">PASSWORD :</td><TD CLASS="texte_w"><INPUT TYPE="password" size="20" maxlength="20" name="PASSWORD" $STYLE VALUE="$CONF{PASSWORD}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Votre mot de passe pour la section d\\'administration.\\n\\n20 caractères maximum !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">PASSWORD (confirmation) :</td><TD CLASS="texte_w"><INPUT TYPE="password" size="20" maxlength="20" name="PASSWORD2" $STYLE VALUE="$CONF{PASSWORD}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Entrez à nouveau votre mot de passe.\\n\\n20 caractères maximum !\\n')">$IMG_POINT</A></TD></TR>
<TR><TD CLASS="texte_w">Nom de domaine :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="30" maxlength="255" name="DOMAIN" $STYLE VALUE="$DOMAIN"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Votre nom de domaine\\n avec ou sans www.')&#034;&gt;$IMG_POINT&lt;/A&g [...] lt;/TR&gt;
<TR><TD CLASS="texte_w">Chemin vers 'sendmail' :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="30" maxlength="150" name="SENDMAIL" $STYLE VALUE="$CONF{SENDMAIL}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('SENDMAIL\\n\\nprogramme serveur mail\\n\\nChemin\\(s\\) détecté\\(s\\) :  \\n\\n$path_sendmail')">$IMG_POINT</A></td></TR>
<TR><TD CLASS="texte_w">Taille maximum des fichiers uploadés :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="10" maxlength="10" name="MAX_UPLOAD" $STYLE VALUE="$CONF{MAX_UPLOAD}"> Ko</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Il s\\'agit de la taille maximale que font l\\'ensemble des pièces jointes envoyé en même temps\\n\\nTaille approximative en Ko\\n')">$IMG_POINT</A></td></TR>
<TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" VALIDER "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
</FORM></TABLE>
FORM_CONFIG
}
sub admin_config
{
&pass_verif;
&style;
$aff = q~Configuration principale du script :<BR><BR>~;
$aff .= &form_config;
$aff .= &bout_retour;
&affiche_admin('<B>ADMINISTRATION</B>',$aff);
}
sub admin_modif_conf
{
&style;
&pass_verif;
&modif_config;
$aff = 'La configuration du script a été modifié.';
$Form{'pass'} = $CONF{'PASSWORD'};
$aff .= &bout_retour;
&affiche_admin('<B>ADMINISTRATION</B>',$aff);
}
sub modif_config
{
$err = 0;
if (!$Form{'PASSWORD'} || $Form{'PASSWORD'} =~ /^\s+$/) { $err++; $aff_err = "- PASSWORD<br>\n"; }
if (!$Form{'PASSWORD2'} || $Form{'PASSWORD2'} =~ /^\s+$/) { $err++; $aff_err .= "- PASSWORD (confirmation)<br>\n"; }
if ($Form{'PASSWORD2'} ne $Form{'PASSWORD'}) { $err++; $aff_err .= "- password différent de password (confirmation)<br>\n"; }
if ($Form{'DOMAIN'} !~ /$ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'}/i || $Form{'DOMAIN'} =~ /^http/) { $err++; $aff_err .= "- Nom de DOMAINE<br>\n"; }
if (!$Form{'SENDMAIL'} || $Form{'SENDMAIL'} =~ /^\s+$/ || !-e $Form{'SENDMAIL'} || !-x $Form{'SENDMAIL'}) { $err++; $aff_err .= "- Chemin du programme SENDMAIL<br>\n"; }
if ($Form{'MAX_UPLOAD'} !~ /^\d+$/) { $err++; $aff_err .= "- Taille maximale de l'ensemble des fichiers joints.<br>\n"; }
if ($err != 0) { &style; &affiche_admin('ERREUR !',&bad_form); }
&modif_conf('PASSWORD' => $Form{'PASSWORD'},'DOMAIN' => $Form{'DOMAIN'},'SENDMAIL' => $Form{'SENDMAIL'},'MAX_UPLOAD' => $Form{'MAX_UPLOAD'});
}
sub bout_retour { return qq|<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="ADMIN"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}"><INPUT TYPE="submit" $STYLE VALUE=" RETOUR AU MENU "></FORM>\n|;  }
sub bad_form { return qq|Votre formulaire comporte des erreurs, veuillez vérifier les champs suivants :<br><br>$aff_err<br><br><A HREF="javascript:history.back()" CLASS="texte">$IMG_BACK Retour au formulaire</A><BR>\n|; }
sub style {
$STYLE = qq|STYLE="FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 8pt; BACKGROUND-COLOR: #EAB522"|;
$IMG_POINT = qq|<IMG SRC="http://vs6.hostfr.net/EXT/PForm/point_i.gif" BORDER="0" ALIGN="absmiddle">|;
$IMG_BACK = qq|<IMG SRC="http://vs6.hostfr.net/EXT/PForm/back.gif" BORDER="0" ALIGN="absmiddle">|;
}
sub form_install
{
if (!-d "$PFORM_DATAS_DIR" ) { &affiche_admin('<b>Installation : ERREUR !</b>',"Le répertoire <i>$PFORM_DATAS_DIR</i> n'est pas présent !<br>Veuillez le créer avant l'installation du script !" ); }
if (!-w "$PFORM_DATAS_DIR" ) { &affiche_admin('<b>Installation : ERREUR !</b>',"Le répertoire <i>$PFORM_DATAS_DIR</i> doit être en CHMOD 777 !" ); }
$aff = "Pour finir l'installation du script, veuillez remplir le formulaire suivant :<br><br>\n";
$aff .= &form_config;
&affiche_admin('<b>INSTALLATION</b>',"$aff" );
}
sub install
{
&make_fic("$PFORM_DATAS_DIR/\.htaccess","<Limit GET>\norder deny,allow\ndeny from all\n</Limit>" );
&make_fic("$PFORM_DATAS_DIR/CONFIG\.dat","INSTALL=================0\n" );
eval { chmod(0777,"$PFORM_DATAS_DIR/CONFIG\.dat" ); };
$CONF{'INSTALL'} = 1;
&modif_config;
&affiche_admin('<b>INSTALLATION : FIN !</b>',qq|L'installation du script est maintenant terminée !<BR>
Pour commencer à créer vos formulaires,<br>rendez vous à l'adresse du script pour entrer dans votre section d'administration :<BR><BR>
<A HREF="$CGI" CLASS="texte">$CGI</A><BR>|);
}
sub copy_du_fichier
{
my $file = $_[0];
if ($file =~ /([^\/\\]+)$/)
   {
   $Filename = $1;
   $Filename =~ s/^\.+//;
   $File_Handle = $file;
   }
$Filename =~ s/ /_/g;
$out_file = $PFORM_DATAS_DIR.'/'.$Filename;
if (!open(OUTFILE, ">$out_file" )) { $aff = "<b>PROBLEME DE CHMOD OU DE CHEMIN DU REPERTOIRE : $PFORM_DATAS_DIR !</b>"; &affichage; }
undef $BytesRead; undef $Buffer;
while ($Bytes = read($File_Handle,$Buffer,1024)) { $BytesRead += $Bytes;  print OUTFILE $Buffer; }
close($File_Handle);
close(OUTFILE);
eval { chmod(0777, "$out_file" ); };
$i++;
}
sub affiche_admin
{
print "Content-type: text/html\n\n";
print<<EOF;
<html>
<head>
<title>P-Form v5.0 Gold - Administration !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
A:link { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none }
A:visited { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none }
A:hover { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: underline; color: #FFFFFF }
.titre { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 12pt; FONT-WEIGHT: bold }
.lien { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #CCCCCC; FONT-SIZE: 7pt; }
.texte_pt { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 7pt; }
.texte { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 10pt; }
.texte_w { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 10pt; }
</style>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<br>
<table width="650" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#023A69" bgColor="#BFC9D3">
  <tr>  
    <td align="center" bgcolor="#023A69" class="titre">Section d'administration  
      de P-Form v5.0 Gold</td>
  </tr>
  <tr>  
    <td><br> <table width="75%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#EAB522">
        <tr>  
          <td align="center" class="texte">
          $_[0]
               </td>
        </tr>
      </table>
      <hr align="center" width="75%" size="1" noshade color="#023A69">
            <table width="75%" border="0" align="center" cellpadding="0" cellspacing="0">
        <tr>
          <td class="texte_w">
          $_[1]
               </td>
        </tr>
      </table>
      <hr align="center" width="75%" size="1" noshade color="#023A69">
      <br> </td>
  </tr>
  <tr>  
    <td align="center" bgcolor="#023A69" class="texte_pt">P-Form 5.0 gold <a class="lien" href="http://www.perl-fr.com" target="_blank">&copy;  
      Perl-fr.com</a></td>
  </tr>
</table>
</body>
</html>
EOF
exit;
}
sub make_fic
{
open (FIC_CREATE, ">$_[0]" ) || &affiche_admin("<b>Impossible de créer le fichier $_[0] !</b>" );
print FIC_CREATE "$_[1]";
close (FIC_CREATE);
}
sub recup_conf
{
open (CONF_FIC,"$PFORM_DATAS_DIR/CONFIG.dat" ) or goto NOHERE;
while ($line=<CONF_FIC> )
      {
      chomp($line);
      if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $CONF{"$1"}="$2"; }
      }
close (CONF_FIC);
NOHERE:
}
sub modif_conf
{
my (%NEW_CONF) = @_;
foreach (keys (%NEW_CONF)) { $CONF{"$_"} = $NEW_CONF{"$_"}; }
open (CONF_W,">$PFORM_DATAS_DIR/CONFIG.dat" );
foreach (sort keys(%CONF)) { print CONF_W ($_."=================".$CONF{"$_"}."\n" ) unless $CONF{"$_"} eq ''; }
close (CONF_W);
}
sub date
{
local($sec,$min,$heure,$jour,$mois,$an,$date,$numero);
($sec,$min,$heure,$jour,$mois,$an) = localtime(time);
$mois++;
$an+=1900;
if ($jour < 10) {$jour='0'.$jour;}
if ($mois < 10)  {$mois='0'.$mois;}
if ($min < 10) {$min='0'.$min;}
if ($heure < 10) {$heure='0'.$heure;}
if ($sec < 10) {$sec='0'.$sec;}
$date = $jour.'/'.$mois.'/'.$an.' à '.$heure.'h'.$min;
$numero = $an.$mois.$jour.$heure.$min.$sec;
if ($_[0] == 1) { return $numero; } else { return $date; }
}
sub verifie_email
{
local ($email)=@_;
$email=~ s/\.\@/\@/;
if ($email =~ /^$/) { return(0);}
if ($email =~ /^\s+$/) { return(0);}
if ($email!~ /\@/) { return(0);}
if (length $email > 255) { return(0); }
if ($email=~ /[\,|\s|\;]/) {return (0);}
if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/ || ($email !~ /^.+\@localhost$/ && $email !~ /^.+\@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) {
return(0);
}else{
return(1);
  }
}

Reply

Marsh Posté le 23-09-2008 à 21:52:48   

Reply

Marsh Posté le 24-09-2008 à 12:33:40    

Bon, mettons déja cela en forme avec un numéro de ligne:
 

Code :
  1. #!/usr/bin/perl
  2. $PFORM_DATAS_DIR = 'PFORM_datas'; # nom du sous-répertoires qui contiendra les données.
  3. &recup_conf;
  4. $MAX_UP = $CONF{'MAX_UPLOAD'} * 1024;
  5. if ($CONF{'DOMAIN'}) { $DOMAIN = $CONF{'DOMAIN'}; } else { $DOMAIN = ($ENV{'SERVER_NAME'} || $ENV{'HTTP_HOST'}); }
  6. $script = ($ENV{'REQUEST_URI'} || $ENV{'SCRIPT_NAME'});
  7. $script =~ s/\?.*//gs;
  8. $site_base = 'http://'.$DOMAIN;
  9. $CGI = $site_base.$script;
  10. use CGI;
  11. $qw = new CGI;
  12. %Form=();
  13. foreach ($qw->param) { s/^\s//; s/\s$//; $Form{$_}=$qw->param($_); }
  14. ## INSTALLATION ##
  15. if ($Form{'ACT'} eq 'INSTALL' && $CONF{'INSTALL'} != 1) { &install; }
  16. elsif ($CONF{'INSTALL'} != 1) { &form_install; }
  17. ## ADMINISTRATION ##
  18. elsif ($Form{'ACT'} eq 'ADMIN') { &admin_menu; }
  19. elsif ($Form{'ACT'} eq 'admin_config') { &admin_config; }
  20. elsif ($Form{'ACT'} eq 'modif_conf') { &admin_modif_conf; }
  21. elsif ($Form{'ACT'} eq 'admin_new_form') { &admin_new_form; }
  22. elsif ($Form{'ACT'} eq 'creer_new_form') { &creer_new_form; }
  23. elsif ($Form{'ACT'} eq 'admin_sup_form') { &admin_sup_form; }
  24. elsif ($Form{'ACT'} eq 'admin_sup_form_confirm') { &admin_sup_form_confirm; }
  25. elsif ($Form{'ACT'} eq 'admin_modif_form') { &admin_modif_form; }
  26. elsif ($Form{'ACT'} eq 'admin_aide_form') { &admin_aide_form; }
  27. ## GESTION DU FORMULAIRE ##
  28. elsif ($Form{'F'} && $Form{'F'} =~ /^\d{14}$/ && -e "$PFORM_DATAS_DIR/F_$Form{F}.dat" ) { &form_gestion; }
  29. else { &admin_enter; }
  30. ###############################
  31. sub form_gestion
  32. {
  33. $F = $Form{'F'}; $F_fic = $PFORM_DATAS_DIR.'/F_'.$F.'.dat';
  34. if ($ENV{'CONTENT_LENGTH'} > $MAX_UP) { $aff = "L'ensemblre des fichiers attachés que vous envoyez a une taille trop grande !!<BR>Taille d'upload limitée pour raison de sécurité !"; &affichage; }
  35. open (CONF_FORM,"<$F_fic" );
  36. while ($line=<CONF_FORM> )
  37.       {
  38.       chomp($line);
  39.       if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
  40.       }
  41. close (CONF_FORM);
  42. &verifie_referer;
  43. if ($C_FORM{'REQUIS'} !~ /^$/) { &verifie_oblig; }
  44. $from = $Form{'email'}; $subject = $Form{'sujet'}; $name = $Form{'nom'}; $t_to = 0;
  45. if ($Form{'TO'}) { @TO = split(/,/, $Form{'TO'}); } else { $t_to = 0; }
  46. &order_Form;
  47. if ($Form{'TO'}) {
  48. @DEST = split(/\|/,$C_FORM{'DESTINATAIRES'});
  49. foreach(@DEST)
  50.       {
  51.       ($pseud,$mail) = split(/,/, $_);
  52.       foreach(@TO) { if ($_ eq $pseud) { $t_to++; push(@EMAILS, "$mail" ); } }
  53.       }
  54. }
  55. if ($t_to == 0)  { $aff = "<b>ERREUR DE CONFIGURATION</b><br>Il n'y a pas de champ 'TO' !"; &affichage; }
  56. if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
  57.    {
  58.    $aff .= $C_FORM{'CONFIRM_MESS'}.qq~\n<FORM METHOD="POST" ACTION="$CGI" ENCTYPE="multipart/form-data">
  59.    <TABLE cellspacing="0" cellpadding="4" border="0">
  60.    $aff_recap
  61.    </TABLE>
  62.    <INPUT TYPE="HIDDEN" NAME="valid" VALUE="1">
  63.    <BR>
  64.    <INPUT TYPE="button" VALUE=" RETOUR " STYLE="$C_FORM{'CONFIRM_STYLE'}" OnClick="javascript:history.back()">  <INPUT TYPE="SUBMIT" NAME="submit" VALUE=" VALIDER " STYLE="$C_FORM{'CONFIRM_STYLE'}">
  65.    </FORM>
  66.    ~;
  67.    &affichage;
  68.    }
  69. else { # else 1
  70. $i = 0;
  71. if ($C_FORM{'EXTENSIONS'}) { @EXT_AUTORISE = split(/,/, $C_FORM{'EXTENSIONS'}); }
  72. foreach (keys %Form)
  73.         {
  74.         if ($_ =~ /^fichier/ && $Form{$_})
  75.            {
  76.            if ($C_FORM{'EXTENSIONS'})
  77.               {
  78.               foreach $ext(@EXT_AUTORISE) { if ($Form{$_} =~ /$ext$/i) { $ext_ok = 1; last; } }
  79.               if ($ext_ok != 1)
  80.                  {
  81.                  $aff = qq~<b>Extension de fichier non autorisée !</b><BR><br>
  82.                  L'extension de la pièce jointe "$_" n'est pas autorisée !<br><br>
  83.                  <A HREF="javascript:history.back()" CLASS="lien">RETOUR AU FORMULAIRE</A><BR>
  84.                  ~;
  85.                  &affichage;
  86.                  } 
  87.               }
  88.            &copy_du_fichier($Form{$_});
  89.            $out_file[$i] = $out_file; 
  90.            }
  91.         }
  92. &sendmail;
  93. if (!$C_FORM{'REDIRECT'})
  94.    {
  95.    $aff .= $C_FORM{'REDIRECT_MESS'}.qq~\n<BR><TABLE cellspacing="0" cellpadding="4" border="0">
  96.    $aff_recap
  97.    </TABLE><BR>
  98.    ~;
  99.    &affichage;
  100.    }
  101. else { print $qw->header(-LOCATION => $C_FORM{'REDIRECT_URL'}); exit; }
  102.               }  # fin else 1
  103. }
  104. ## CLASSEMENT DANS L'ORDRE ##
  105. sub order_Form
  106. {
  107. if (!$C_FORM{'ORDRE_TYPE'})
  108.    {
  109.    foreach (keys %Form)
  110.            {
  111.            if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '' && $Form{$_} !~ /^\s+$/)
  112.               {
  113.               $form_temp = $Form{"$_"};
  114.               $form_temp =~ s/\r\n/<BR>/g;
  115.               $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
  116.               if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
  117.                  {
  118.                  $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
  119.                  if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}" STYLE="$C_FORM{'CONFIRM_STYLE'}">\n~; }
  120.                  }
  121.               if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'})
  122.                  {
  123.                  $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
  124.                  }
  125.               $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
  126.               }
  127.            }
  128.    }
  129. elsif ($C_FORM{'ORDRE_TYPE'} == 1)
  130.       {
  131.       foreach (sort keys %Form)
  132.               {
  133.               if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '' && $Form{$_} !~ /^\s+$/)
  134.                  {
  135.                  $form_temp = $Form{"$_"};
  136.                  $form_temp =~ s/\r\n/<BR>/g;
  137.                  $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
  138.                  if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
  139.                     {
  140.                     $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
  141.                     if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}" STYLE="$C_FORM{'CONFIRM_STYLE'}">\n~; }
  142.                     }
  143.                  if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/; }
  144.                  $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
  145.                  }
  146.                }
  147.       }  # ici
  148. else {
  149.      local(@order) = split(/\,/, $C_FORM{'ORDRE'});
  150.      foreach (@order)
  151.              {
  152.              if ($Form{$_} ne '') {
  153.              $form_temp = $Form{"$_"};
  154.              $form_temp =~ s/\r\n/<BR>/g;
  155.              $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">\n$form_temp\n~;
  156.              if ($C_FORM{'CONFIRM'} && !$Form{'valid'}) { $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~; }
  157.              if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~; }
  158.              $aff_recap .= q~</TD></TR>~;
  159.              delete($Form{$_});
  160.                                }
  161.              }
  162.      foreach (sort keys %Form)
  163.              {
  164.              if ($_ !~ /submit/i && $_ ne 'valid' && $Form{$_} ne '')
  165.                 {
  166.                 $form_temp = $Form{"$_"};
  167.                 $form_temp =~ s/\r\n/<BR>/g;
  168.                 $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> :</TD><TD CLASS="texte" valign="top">$form_temp\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/;
  169.                 if ($C_FORM{'CONFIRM'} && !$Form{'valid'})
  170.                     {
  171.                     $aff_recap .= qq~<INPUT TYPE="HIDDEN" NAME="$_" VALUE="$Form{"$_"}">\n~ unless $_ =~ /^fichier/;
  172.                     if ($_ =~ /^fichier/) { $aff_recap .= qq~<TR><TD CLASS="texte" valign="top"><i>$_</i> (Veuillez entrer à nouveau le fichier):</TD><TD CLASS="texte" valign="top"><INPUT TYPE="file" NAME="$_" VALUE="$Form{"$_"}">\n~; }
  173.                     }
  174.                 if (($C_FORM{'CONFIRM'} && $Form{'valid'}) || !$C_FORM{'CONFIRM'}) { $corps_mail .= qq~- $_ :\n$Form{"$_"}\n~ unless $_ =~ /^TO$|^PRIORITY$|^F$|^fichier/; }
  175.                 }
  176.               $aff_recap .= q~</TD></TR>~ unless $_ =~ /^TO$|^PRIORITY$|^F$/;
  177.               }
  178.      }
  179. }
  180. ## ENVOI EMAIL ##
  181. sub sendmail
  182. {
  183. if (!$subject) { $subject = "Formulaire envoyé du web !"; }
  184. $mail = 'From: '.$from;
  185. if ($name !~ /^\s+$/ && $name ne '') { $mail .= ' ('.$name.')'; }
  186. if ($Form{'PRIORITY'} !~ /^1$|^3$|^5$/) { $Form{'PRIORITY'} = 3; }
  187. $to = join(',',@EMAILS);
  188. $mail .= "\n".'Reply-To: '.$from."\n".'To: '.$to."\n".'X-Mailer: P-FORM V5.0 PRO/http://www.perl-fr.com'."\n".'X-Priority: '.$Form{'PRIORITY'}."\n".'Subject: '.$subject."\n";
  189. $date = &date(0);
  190. $mail .= 'Voici le résultat du formulaire envoyé du web du site '.$site_base.' le '.$date.' :'."\n\n".$corps_mail."\n";
  191. if ($C_FORM{'INFOS'})
  192.    {
  193.    $mail .= '-' x 70;
  194.    $mail .= "\n".q~Informations complémentaires sur l'utilisateur :~."\n".'Ip : '.$ENV{'REMOTE_ADDR'}."\n";
  195.    if ($ENV{'REMOTE_HOST'}) { $mail .= 'Host : '.$ENV{'REMOTE_HOST'}."\n"; }
  196.    $mail .= 'Langue : '.$ENV{'HTTP_ACCEPT_LANGUAGE'}."\n".'Systeme : '.$ENV{'HTTP_USER_AGENT'}."\n".'Page référente : '.$ENV{'HTTP_REFERER'}."\n";
  197.    $mail .= '-' x 70;
  198.    $mail .= "\n";
  199.    }
  200. open(MAIL, "|$CONF{SENDMAIL} -t" ) || die "ne peut ouvrir $sendmail!\n";
  201. print MAIL $mail;
  202. if ($i > 0)
  203.    {
  204.    foreach $i(1..$i) {
  205.    if (-e $out_file[$i])
  206.       {
  207.       $n_file = $out_file[$i]; $n_file =~ s/^.*[\/|\\|\:]//g;
  208.       open(FILE, "uuencode $out_file[$i] $n_file|" ) or die;
  209.       while(<FILE> ) { print MAIL; }
  210.       close(FILE);
  211.       }
  212.       unlink("$out_file[$i]" );
  213.        }
  214.    }
  215. close(MAIL);
  216. }
  217. ## VERIFICATION DES CHAMPS OBLIGATOIRES ##
  218. sub verifie_oblig
  219. {
  220. local(@oblig) = split (/\,/,$C_FORM{'REQUIS'});
  221. local($err) = 0; local($aff_err);
  222. foreach(@oblig)
  223.        {
  224.        $_ =~ s/^\s//; $_ =~ s/\s$//;  
  225.        if ($_ eq 'email') { if (&verifie_email("$Form{email}" ) == 0) { $err++; $aff_err .= '- email<br>'."\n"; } }
  226.        else { if (!$Form{"$_"} || $Form{"$_"} =~ /^\s+$/) { $err++; $aff_err .= '- '.$_.'<br>'."\n"; } }
  227.        }
  228. if ($err > 0)
  229.    {
  230.    $aff = qq~<b>Erreur : CHAMPS OBLIGATOIRES !!</b><BR>
  231.    Veuillez vérifier votre formulaire !<br>
  232.    Les $err champ(s) obligatoire(s) suivants n'ont pas été remplis correctement :<br><br>
  233.    $aff_err
  234.    <BR><a href="javascript:history.back()" class="lien"> Retour au formulaire !</a><BR>
  235.    ~;
  236.    &affichage;
  237.    }
  238. }
  239. sub verifie_referer
  240. {
  241. local($trouv) = 0;
  242. if (!$ENV{'HTTP_REFERER'}) { goto FIN_VR; }
  243. @DOMAINES = split(/,/, "$C_FORM{'DOMAINES'}" );
  244. foreach(@DOMAINES) { if ($ENV{'HTTP_REFERER'} =~ /$_/i) { $trouv = 1; last; } }
  245. FIN_VR:
  246. if ($trouv == 0) { $aff = '<b>ERREUR !!<BR><BR>Le script n\'a pas été appelé d\'un site autorisé !!</b>'; &affichage; }
  247. }
  248. sub affichage
  249. {
  250. print "Content-type: text/html\n\n";
  251. open(HAUT_HTML,"<$PFORM_DATAS_DIR/F_temp_h_$F.dat" );
  252. while (<HAUT_HTML> ){ print $_; }
  253. close(HAUT_HTML);
  254. print $aff;
  255. open(BAS_HTML,"<$PFORM_DATAS_DIR/F_temp_b_$F.dat" );
  256. while (<BAS_HTML> ){ print $_; }
  257. close(BAS_HTML);
  258. exit;
  259. }
  260. ###############################
  261. sub admin_enter
  262. {
  263. &style;
  264. &affiche_admin("<B>ADMINISTRATION</B>$badpass",qq|<TABLE BORDER="0" WIDTH="100%" ALIGN="CENTER" CELLPADDING="0" CELLSPACING="0">
  265. <FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="ADMIN">
  266. <TR><TD CLASS="texte_w" valign="top" align="center"><A HREF="http://www.perl-fr.com" target="_blank"><IMG SRC="http://vs6.hostfr.net/EXT/PForm/Pform.jpg" BORDER="0" ALIGN="absmiddle"></A></td><TD CLASS="texte_w">PASSWORD :<BR><INPUT TYPE="password" size="20" maxlength="20" name="pass" $STYLE>
  267. <BR><INPUT TYPE="submit" $STYLE VALUE=" ENTRER "></TD></TR></FORM></TABLE>|);
  268. }
  269. sub admin_menu
  270. {
  271. &pass_verif;
  272. &style;
  273. opendir (DIR, "$PFORM_DATAS_DIR" );
  274. $nb_f = @files = grep(/^F_\d{14}\.dat$/,readdir(DIR));
  275. closedir(DIR);
  276. $sel = '';
  277. if ($nb_f > 0)
  278.    {
  279.    foreach (@files)
  280.            {
  281.            if ($_ =~ /^F_(\d{14})\.dat$/) { $id = $1; }
  282.            open (CONF_FIC,"<$PFORM_DATAS_DIR/$_" );
  283.            while ($line=<CONF_FIC> )
  284.                  {
  285.                  chomp($line);
  286.                  if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) )
  287.                     {
  288.                     if ($1 eq 'NAME') { $name = $2; }
  289.                     }
  290.                  }
  291.            close(CONF_FIC);     
  292.            $opt_f .= qq|<OPTION VALUE="$id">$name</OPTION>\n|;
  293.            }
  294. $sel = qq|\n<TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_modif_form"> <SELECT NAME="Fm" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Configuration du formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Modifiez la configuration du formulaire sélectionné  ')">$IMG_POINT</A></TD></TR>
  295. <TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_sup_form"> <SELECT NAME="Fs" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Supprimer le formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Supprimez le formulaire sélectionné  \\n')">$IMG_POINT</A></td></TR>
  296. <TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_aide_form"> <SELECT NAME="Fa" $STYLE>\n$opt_f</OPTION>\n</td><TD CLASS="texte_w">Créér un formulaire html</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Outil d\\'aide à la création de votre formulaire html ! \\n')">$IMG_POINT</A></td></TR>\n|;
  297.    }
  298. &affiche_admin("<B>ADMINISTRATION</B>",qq|<TABLE BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
  299. <FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
  300. <TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_config" checked></td><TD CLASS="texte_w">Configuration du script</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Modifiez la configuration principale du script  \\n')">$IMG_POINT</A></TD></TR>
  301. <TR><TD CLASS="texte_w"><INPUT TYPE="RADIO" NAME="ACT" VALUE="admin_new_form"></td><TD CLASS="texte_w">Nouveau formulaire</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Créez un nouveau formulaire  \\n')">$IMG_POINT</A></TD></TR>$sel
  302. <TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" VALIDER "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
  303. </FORM></TABLE>|);
  304. }
  305. sub admin_aide_form
  306. {
  307. &pass_verif;
  308. &style;
  309. $Fa = $Form{'Fa'};
  310. if ($Form{'i'}) { $i = $Form{'i'}; } else { $i = 0; }
  311. open (CONF_FORM,"<$PFORM_DATAS_DIR/F_$Fa.dat" );
  312. while ($line=<CONF_FORM> )
  313.       {
  314.       chomp($line);
  315.       if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
  316.       }
  317. close (CONF_FORM);
  318. if ($i >0)
  319.    {
  320.     foreach $i(1..$i)
  321.             {
  322.             if (!$Form{"nom_$i"}) {
  323.               &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  324.               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|);
  325.               }
  326.             $hid .= qq~<INPUT TYPE="hidden" NAME="etiquette_$i" VALUE="$Form{"etiquette_$i"}">
  327.             <INPUT TYPE="hidden" NAME="nom_$i" VALUE="$Form{"nom_$i"}">
  328.             <INPUT TYPE="hidden" NAME="type_$i" VALUE="$Form{"type_$i"}">
  329.             <INPUT TYPE="hidden" NAME="value_$i" VALUE="$Form{"value_$i"}">~;
  330.             if ($Form{"type_$i"} eq 'text' || $Form{"type_$i"} eq 'password')
  331.                {
  332.                if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
  333.                $plus_form .= qq~<INPUT TYPE="$Form{"type_$i"}" NAME="$Form{"nom_$i"}"~;
  334.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  335.                if ($Form{"value_$i"}) { $plus_form .= qq~ VALUE="$Form{"value_$i"}"~; }
  336.                $plus_form .= qq~><BR>\n~;
  337.                }
  338.             if ($Form{"type_$i"} eq 'select')
  339.                {
  340.                if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  341.               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  342.                if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; } 
  343.                $plus_form .= qq~<SELECT NAME="$Form{"nom_$i"}"~;
  344.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  345.                $plus_form .= qq~>\n~;
  346.                $n_tab = 'val'.$i; @$n_tab = split(/,/, $Form{"value_$i"});
  347.                foreach(@$n_tab) { $plus_form .= q~<OPTION>$_</OPTION>\n~; }
  348.                $plus_form = '<BR>\n';
  349.                }
  350.             if ($Form{"type_$i"} eq 'textarea')
  351.                {
  352.                if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
  353.                $plus_form .= qq~&lt;TEXTAREA NAME="$Form{"nom_$i"}"~;
  354.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  355.                $plus_form .= qq~&gt;\n~;
  356.                if ($Form{"value_$i"}) { $plus_form .= qq~$Form{"value_$i"}~; }
  357.                $plus_form .= qq~\n&lt;/TEXTAREA&gt;<BR>\n~;
  358.                }
  359.             if ($Form{"type_$i"} =~ /^radio$|^checkbox$/)
  360.                {
  361.               if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  362.               <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  363.                $plus_form .= qq~<INPUT TYPE="$Form{"type_$i"}" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}">~;
  364.                if ($Form{"etiquette_$i"}) { $plus_form .= qq~ $Form{"etiquette_$i"}~; }
  365.                $plus_form .= "<BR>\n";
  366.                }
  367.              if ($Form{"type_$i"} eq 'hidden')
  368.                {
  369.                if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  370.                <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  371.                $plus_form .= qq~<INPUT TYPE="hidden" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}">\n~;
  372.                } 
  373.             if ($Form{"type_$i"} eq 'file')
  374.                {
  375.                if ($Form{"nom_$i"} !~ /fichier/) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champs fichier doit avoir le mot 'fichier' dans son nom.<br><br>
  376.                <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  377.                if ($Form{"etiquette_$i"}) { $plus_form .= qq~$Form{"etiquette_$i"}<BR>\n~; }
  378.                $plus_form .= qq~<INPUT TYPE="file" NAME="$Form{"nom_$i"}"~;
  379.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  380.                $plus_form .= "><BR>\n";
  381.                }
  382.              if ($Form{"type_$i"} eq 'submit')
  383.                {
  384.                if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  385.                <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  386.                if ($Form{"nom_$i"} !~ /submit/i) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champ image ou bouton de soummision doit avoir obligatoirement dans son nom le mot : submit !.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  387.                $plus_form .= qq~<INPUT TYPE="submit" NAME="submit" VALUE="$Form{"value_$i"}"~;
  388.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  389.                $plus_form .= "><BR>\n";
  390.                }
  391.              if ($Form{"type_$i"} eq 'reset')
  392.                {
  393.                if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>
  394.                <A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  395.                $plus_form .= qq~<INPUT TYPE="reset" NAME="$Form{"nom_$i"}" VALUE="$Form{"value_$i"}"~;
  396.                if ($C_FORM{CONFIRM_STYLE}) { $plus_form .= qq~ STYLE="$C_FORM{CONFIRM_STYLE}"~; }
  397.                $plus_form .= "><BR>\n";
  398.                }
  399.              if ($Form{"type_$i"} eq 'image')
  400.                {
  401.                if (!$Form{"value_$i"}) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Veuillez remplir tous les champs obligatoires.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  402.                if ($Form{"nom_$i"} !~ /submit/i) { &affiche_admin('<B>ADMINISTRATION</B>',qq|<b>Erreur</b> :<br>Un champ image ou bouton de soummision doit avoir obligatoirement dans son nom le mot : submit !.<br><br>\n<A HREF="javascript:history.back()">Retour au formulaire</a><BR>\n|); }
  403.                $plus_form .= qq~<INPUT TYPE="image" NAME="submit" SRC="$Form{"value_$i"}" BORDER="0"><BR>\n~;
  404.                }
  405.             }
  406.    }
  407. $i++;
  408. $aff = qq|<b>Aide à la création d'un formulaire html pour '$C_FORM{NAME}'.</b><BR>
  409. <TABLE BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
  410. <FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
  411. <INPUT TYPE="HIDDEN" NAME="ACT" VALUE="admin_aide_form"><INPUT TYPE="HIDDEN" NAME="Fa" VALUE="$Fa">
  412. <INPUT TYPE="HIDDEN" NAME="i" VALUE="$i">
  413. $hid
  414. <TR><TD CLASS="texte_w">Etiquette :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="etiquette_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Etiquette :\\nTitre du champ.\\n\\nFACULTATIF\\n')">$IMG_POINT</A></TD></TR>
  415. <TR><TD CLASS="texte_w">Nom du champ :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="nom_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Le nom que portera le champ, utilisé par le script\\n\\nOBLIGATOIRE\\n')">$IMG_POINT</A></TD></TR>
  416. <TR><TD CLASS="texte_w">Type du champ :</td><TD CLASS="texte_w"><SELECT NAME="type_$i" $STYLE><OPTION VALUE="text">Champ de texte</OPTION><OPTION VALUE="password">Champ password</OPTION>
  417. <OPTION VALUE="textarea">Zone de texte</OPTION><OPTION VALUE="checkbox">Case à cocher</OPTION>
  418. <OPTION VALUE="radio">Bouton radio</OPTION><OPTION VALUE="SELECT">Liste / Menu</OPTION><OPTION VALUE="file">Champ de fichier</OPTION>
  419. <OPTION VALUE="hidden">Champ masqué</OPTION><OPTION VALUE="submit">Bouton de soumission</OPTION><OPTION VALUE="reset">Bouton reset</OPTION>
  420. <OPTION VALUE="image">Bouton image</OPTION>
  421. </SELECT></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Type de champ...')">$IMG_POINT</A></TD></TR>
  422. <TR><TD CLASS="texte_w">Valeur par default :</td><TD CLASS="texte_w"><INPUT TYPE="text" NAME="value_$i" $STYLE size="20"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Valeur par défault du champ\\n\\nOBLIGATOIRE pour les champs :\\n- bouton radio\\n- case à cocher\\n- champ caché\\n\\nDans le cas d\\'un champ de type Liste/Menu :\\nséparez les valeurs par une virgule !\\n\\nDans le cas d\\'un champ image, mettre l\\'adresse url ce celle-ci\\n')">$IMG_POINT</A></TD></TR>
  423. <TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" AJOUTER UN CHAMP "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
  424. </FORM></TABLE><BR><BR>
  425. Code html du formulaire à copier / coller dans le code source de votre page html :<BR>
  426. <TEXTAREA $STYLE cols="90" ROWS="10" readonly>
  427. <FORM METHOD="post" ACTION="$CGI" ENCTYPE="multipart/form-data">
  428. <INPUT TYPE="HIDDEN" NAME="F" VALUE="$Fa">
  429. $plus_form
  430. </FORM>
  431. </TEXTAREA><br><br>
  432. Attention, pour le bon fonctionnement du formulaire, les champs suivant doivent obligatoirement être présents :<BR>
  433. TO,submit,$C_FORM{'REQUIS'}
  434. |;
  435. $aff .= &bout_retour;
  436. &affiche_admin('<B>ADMINISTRATION</B>',$aff);
  437. }
  438. sub admin_sup_form
  439. {
  440. &pass_verif;
  441. &style;
  442. $aff = &bout_retour;
  443. open (FIC, "<$PFORM_DATAS_DIR/F_$Form{Fs}.dat" );
  444. while ($line=<FIC> )
  445.                  {
  446.                  chomp($line);
  447.                  if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) )
  448.                     {
  449.                     if ($1 eq 'NAME') { $name = $2; }
  450.                     }
  451.                  }
  452. close(FIC);
  453. &affiche_admin('<B>ADMINISTRATION</B>',qq|<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">
  454. <INPUT TYPE="HIDDEN" NAME="Fs" VALUE="$Form{Fs}"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="admin_sup_form_confirm">
  455. <INPUT $STYLE TYPE="submit" VALUE="Confirmer la suppression du formulaire $name ?">
  456. </FORM>$aff|);
  457. }
  458. sub admin_sup_form_confirm
  459. {
  460. &pass_verif;
  461. &style;
  462. $aff = &bout_retour;
  463. $Fs = $Form{'Fs'};
  464. unlink("$PFORM_DATAS_DIR/F_$Fs.dat" );
  465. unlink("$PFORM_DATAS_DIR/F_temp_b_$Fs.dat" );
  466. unlink("$PFORM_DATAS_DIR/F_temp_h_$Fs.dat" );
  467. &affiche_admin('<B>ADMINISTRATION</B>',qq|Le formulaire a été supprimé !<br>$aff|);
  468. }
  469. sub admin_new_form
  470. {
  471. &pass_verif;
  472. &style;
  473. $aff = &configuration_form(1);
  474. $aff .= &bout_retour;
  475. &affiche_admin("<B>ADMINISTRATION</B>",qq|<B>Créer un nouveau formulaire :</B><br>$aff|);
  476. }
  477. sub admin_modif_form
  478. {
  479. &pass_verif;
  480. &style;
  481. $Fm = $Form{'Fm'};
  482. $aff = &configuration_form(2);
  483. $aff .= &bout_retour;
  484. &affiche_admin("<B>ADMINISTRATION</B>",qq|<B>Modifier le formulaire :</B><br>$aff|);
  485. }
  486. sub configuration_form
  487. {
  488. $sel_c1 = ''; $sel_c2 = ''; $sel_i1 = ''; $sel_i2 = ''; $sel_r1 = ''; $sel_r2 = '';
  489. $sel_o1 = ''; $sel_o2 = ''; $sel_o3 = ''; $hid = '';
  490. if ($_[0] == 1)
  491.    {
  492.    $Val_submit = 'CREER';
  493.    $Val_T_H = qq|<HTML>\n<HEAD>\n<STYLE type="text/css">\n.lien { FONT-SIZE: 9pt; COLOR: #3E4044; FONT-FAMILY: Arial; }\n.texte { FONT-SIZE: 10pt; COLOR: #000000; FONT-FAMILY: Arial; }\n</STYLE>\n<TITLE>\nCONTACT\n</TITLE></HEAD>\n<BODY>\n|;
  494.    $Val_T_B = "</BODY>\n</HTML>\n";
  495.    $C_FORM{'DOMAINES'} = $DOMAIN;
  496.    $C_FORM{'CONFIRM_MESS'} = qq~&lt;b&gt;Confirmation !&lt;/b&gt;&lt;BR&gt;\nPour valider le formulaire, merci de confirmer les informations suivantes :~;
  497.    $C_FORM{'CONFIRM_STYLE'} = 'FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 8pt; BACKGROUND-COLOR: #EAB522';
  498.    $C_FORM{'REDIRECT_URL'} = 'http://';
  499.    $C_FORM{'REDIRECT_MESS'} = "&lt;b&gt;Merci !&lt;/b&gt;&lt;BR&gt;
  500. &lt;i&gt;Votre message a bien &eacute;t&eacute; envoy&eacute;.&lt;/i&gt;&lt;br&gt;Nous vous r&eacute;pondrons dans les plus brefs
  501. d&eacute;lais.&lt;BR&gt;Voici les informations que vous nous avez soumises :";
  502.    }
  503. if ($_[0] == 2)
  504.    {
  505.    $Val_submit = 'MODIFIER'; 
  506.    open(FIC_T_H, "<$PFORM_DATAS_DIR/F_temp_h_$Fm.dat" ); while (<FIC_T_H> ) { $Val_T_H .= $_; } close(FIC_T_H);
  507.    open(FIC_T_B, "<$PFORM_DATAS_DIR/F_temp_b_$Fm.dat" ); while (<FIC_T_B> ) { $Val_T_B .= $_; } close(FIC_T_B);
  508.    open (CONF_FORM,"<$PFORM_DATAS_DIR/F_$Fm.dat" );
  509.    while ($line=<CONF_FORM> )
  510.          {
  511.          chomp($line);
  512.          if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $C_FORM{"$1"}="$2"; }
  513.          }
  514.    close (CONF_FORM);
  515.    $C_FORM{'DOMAINES'} =~ s/,/\n/g;
  516.    $C_FORM{'DESTINATAIRES'} =~ s/\|/\n/g;
  517.    if ($C_FORM{'CONFIRM'} == 1) { $sel_c1 = ' selected'; } else { $sel_c2 = ' selected'; }
  518.    if ($C_FORM{'INFOS'} == 1) { $sel_i1 = ' selected'; } else { $sel_i2 = ' selected'; }
  519.    if ($C_FORM{'REDIRECT'} == 1) { $sel_r1 = ' selected'; } else { $sel_r2 = ' selected'; }
  520.    if ($C_FORM{'ORDRE_TYPE'} == 1) { $sel_o2 = ' selected'; }
  521.    elsif ($C_FORM{'ORDRE_TYPE'} == 2) { $sel_o3 = ' selected'; }
  522.    else { $sel_o1 = ' selected'; }
  523.    $hid = qq~<INPUT TYPE="HIDDEN" NAME="Fm" VALUE="$Fm">~;
  524.    }
  525. return<<FORM;
  526. <br><TABLE WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="2" CELLSPACING="0">
  527. <FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="creer_new_form">
  528. $hid
  529. <TR><TD CLASS="texte" valign="top">Configuration :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  530. <TR><TD CLASS="texte_w" valign="top">Nom du formulaire :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="25" maxlength="25" name="NAME" $STYLE VALUE="$C_FORM{NAME}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Nom du formulaire :\\nIl permettra de vous y retrouver parmi les différents formulaires\\n')">$IMG_POINT</A></TD></TR>
  531. <TR><TD CLASS="texte_w" valign="top">Noms de domaine autorisés à utiliser ce formulaire :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="DOMAINES" COLS="35" ROWS="4">$C_FORM{DOMAINES}\n</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Les noms de domaine qui pourront appeler\\nle script pour ce formulaire de leur site\\n\\nAttention : 1 par ligne !\\n')">$IMG_POINT</A></TD></TR>
  532. <TR><TD CLASS="texte_w" valign="top">Pseudos et emails des destinataires de ce formulaire :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="DESTINATAIRES" COLS="35" ROWS="4">$C_FORM{DESTINATAIRES}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Mettre un pseudo et un email par ligne, séparé par une virgule\\n\\nexemple :\\nToto,toto\@toto.com\\nTiti,titi\@titi.org\\n\\nCeci permet de ne pas avoir d\\'email visible dans le code source de vos pages\\n\\nSi vous mettez plusieurs destinataires vous pourrez soit :\\n- faire choisir au visiteur à qui écrire\\n- soit mettre les pseudos dans un champ caché séparé par une virgule\\npour que le résultat du formulaire soit envoyé à tous en même temps\\n')">$IMG_POINT</A></TD></TR>
  533. <TR><TD CLASS="texte" valign="top">Option 1 : confirmation :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  534. <TR><TD CLASS="texte_w" valign="top">Demander une confirmation avant validation du formulaire ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="CONFIRM"><OPTION VALUE="1"$sel_c1>OUI</OPTION><OPTION VALUE="0"$sel_c2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Avant de valider le formulaire, l\\'utilisateur\\ndevra relire ce qu\\'il a écrit avant de valider\\n\\nATTENTION : Dans le cas de champs de type \\'fichier\\', l\\'utilisateur sera invité, dans ce cas, à rechercher à nouveau les fichiers à envoyer !\\n')">$IMG_POINT</A></TD></TR>
  535. <TR><TD CLASS="texte_w" valign="top">Si oui, message sur la page de confirmation :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="CONFIRM_MESS" COLS="35" ROWS="4">$C_FORM{CONFIRM_MESS}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Message que l\\'utilisateur verra sur la page de confirmation\\nau dessus des informations à valider\\n\\nVous pouvez utiliser du code html !\\n')">$IMG_POINT</A></TD></TR>
  536. <TR><TD CLASS="texte_w" valign="top">Si oui, style du bouton de soumission :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" $STYLE NAME="CONFIRM_STYLE" SIZE="30" MAXLENGTH="255" VALUE="$C_FORM{CONFIRM_STYLE}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Bouton de soumission :\\npolice de caractère,couleur,taille de la police, couleur de fond .ect... ')">$IMG_POINT</A></TD></TR>
  537. <TR><TD CLASS="texte" valign="top">Option 2 : informations sur l'utilisateur :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  538. <TR><TD CLASS="texte_w" valign="top">Recevoir des informations complémentaires sur l'utilisateur ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="INFOS"><OPTION VALUE="1"$sel_i1>OUI</OPTION><OPTION VALUE="0"$sel_i2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Informations complémentaires sur l\\'utilisateur\\ndans l\\'email recu :\\n\\n- adresse IP\\n- nom d\\'hote\\n- systeme d\\'exploitation\\n- langue\\n- page référente\\n')">$IMG_POINT</A></TD></TR>
  539. <TR><TD CLASS="texte" valign="top">Option 3 : après validation du formulaire :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  540. <TR><TD CLASS="texte_w" valign="top">Utiliser une page de redirection après envoi ?</td><TD CLASS="texte_w" valign="top"><SELECT $STYLE NAME="REDIRECT"><OPTION VALUE="1"$sel_r1>OUI</OPTION><OPTION VALUE="0"$sel_r2>NON</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Si oui :\\n après envoi, l\\'utilisateur sera redirigé vers une page de votre choix.\\n\\nSi non :\\nl\\'utilisateur verra alors un message que vous déterminez\\n')">$IMG_POINT</A></TD></TR>
  541. <TR><TD CLASS="texte_w" valign="top">Si oui, url de redirection :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="REDIRECT_URL" $STYLE VALUE="$C_FORM{REDIRECT_URL}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Url de redirection après validation du formulaire si vous utilisez cette option.\\n\\nL\\'url doit commencer par : http://\n')&#034;&gt;$IMG_POINT&lt [...] lt;/TR&gt;
  542. <TR><TD CLASS="texte_w" valign="top">Si non, message de remerciement après envoi :</td><TD CLASS="texte_w" valign="top"><TEXTAREA $STYLE NAME="REDIRECT_MESS" COLS="35" ROWS="4">$C_FORM{REDIRECT_MESS}</TEXTAREA></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Message que l\\'utilisateur verra après envoi du formulaire\\n\\nVous pouvez utiliser du code html !\\n')">$IMG_POINT</A></TD></TR>
  543. <TR><TD CLASS="texte" valign="top">Champs obligatoires :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  544. <TR><TD CLASS="texte_w" valign="top">Champs obligatoires :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="REQUIS" $STYLE name="REQUIS" VALUE="$C_FORM{REQUIS}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Ces champs devront obligatoirement être remplis par le visiteur.\\n\\nSéparez chaque nom de champ par une virgule, exemple :\\n\\nemail,nom,message\\n')">$IMG_POINT</A></TD></TR>
  545. <TR><TD CLASS="texte" valign="top">Ordre des champs :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  546. <TR><TD CLASS="texte_w" valign="top">Choix de l'ordre des champs :</td><TD CLASS="texte_w" valign="top"><SELECT name="ORDRE_TYPE" $STYLE><OPTION VALUE="0"$sel_o1>DESORDRE</OPTION><OPTION VALUE="1"$sel_o2>ORDRE ALPHABETIQUE</OPTION><OPTION VALUE="2"$sel_o3>ORDRE AU CHOIX</OPTION></SELECT></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Ordre dans lequel les champs seront recus :\\n\\n- désordre : pas d\\'ordre préci.\\n- alphabétique : les champs seront envoyés dans l\\'ordre alphabétique en fonction leur noms.\\n- Au choix : vous définissez l\\'ordre d\\'envoi.\\n')">$IMG_POINT</A></TD></TR>
  547. <TR><TD CLASS="texte_w" valign="top">Si ordre 'AU CHOIX', nom des champs :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="ORDRE" $STYLE VALUE="$C_FORM{ORDRE}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Les champs seront envoyés dans l\\'ordre que vous spécifiez.\\n\\nSéparez chaque nom de champ par une virgule, exemple :\\n\\nsujet,nom,email,message\\n')">$IMG_POINT</A></TD></TR>
  548. <TR><TD CLASS="texte" valign="top">Fichiers joints :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top">&nbsp;</TD></TR>
  549. <TR><TD CLASS="texte_w" valign="top">Pièces jointes autorisées :</td><TD CLASS="texte_w" valign="top"><INPUT TYPE="text" size="30" maxlength="255" name="EXTENSIONS" $STYLE VALUE="$C_FORM{EXTENSIONS}"></TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('Uniquement si votre formulaire donne la possibilité d\\'envoyer un ou plusieurs fichiers joints.\\n\\nDans ce cas :\\n\\n- Laissez vide si vous ne souhaitez pas limiter les extensions de fichier.\\n\\n- Entrez les extensions de fichier autorisées, séparées par une virgule et sans point\\nsi vous souhaitez n\\'autoriser que certains types de fichiers.\\nEx : jpg,jpeg,gif,bmp,png,mp3,txt\\n')">$IMG_POINT</A></TD></TR>
  550. <TR><TD CLASS="texte" valign="top">Affichage :</td><TD CLASS="texte_w" valign="top">&nbsp;</TD><TD CLASS="texte_w" valign="top"><A HREF="javascript:alert('- Créez une page html\\n- Coupez son code html en 2 parties\\n- Entre ces 2 parties s\\'afficheront les messages générés par le script \\n')">$IMG_POINT</A></TD></TR>
  551. <TR><TD CLASS="texte_w" valign="top" colspan="3">Code html de haut de page :<BR>
  552. <TEXTAREA $STYLE NAME="HTML_TEMP_HAUT" COLS="90" ROWS="12">
  553. $Val_T_H
  554. </TEXTAREA><BR>
  555. <BR><font color="#666666"><i>-= ici s'afficheront les messages =-</i></FONT><BR><BR>
  556. Code html de bas de page :<BR>
  557. <TEXTAREA $STYLE NAME="HTML_TEMP_BAS" COLS="90" ROWS="12">
  558. $Val_T_B
  559. </TEXTAREA><BR>
  560. </td></TR>
  561. <TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE="-= $Val_submit LE FORMULAIRE =-"></TD><TD CLASS="texte_w">&nbsp;</td></TR>
  562. </FORM></TABLE>
  563. FORM
  564. }
  565. sub creer_new_form
  566. {
  567. &pass_verif;
  568. &style;
  569. $err = 0; $Fm = $Form{'Fm'};
  570. if (!$Form{'NAME'} || $Form{'NAME'} =~ /^\s+$/) { $err++; $aff_err = "- NOM DU FORMULAIRE<br>\n"; }
  571. if (!$Form{'DOMAINES'} || $Form{'DOMAINES'} =~ /^\s+$/) { $err++; $aff_err .= "- Noms de domaines autorisés<br>\n"; }
  572. if (!$Form{'DESTINATAIRES'} || $Form{'DESTINATAIRES'} =~ /^\s+$/) { $err++; $aff_err .= "- Pseudos, Emails<br>\n"; }
  573. if ($Form{'CONFIRM'} && ($Form{'CONFIRM_MESS'} =~ /^\s+$/ || !$Form{'CONFIRM_MESS'})) { $err++; $aff_err .= "- Message de confirmation<br>\n"; }
  574. if ($Form{'REDIRECT'} && $Form{'REDIRECT_URL'} !~ /http:\/\/\S+?\.\S+/) { $err++; $aff_err .= "- Url de redirection<br>\n"; }
  575. if (!$Form{'REDIRECT'} && ($Form{'REDIRECT_MESS'} =~ /^\s+$/ || !$Form{'REDIRECT_MESS'})) { $err++; $aff_err .= "- Message après envoi<br>\n"; }
  576. if (!$Form{'HTML_TEMP_HAUT'} || $Form{'HTML_TEMP_HAUT'} =~ /^\s+$/) { $err++; $aff_err = "- code html du haut de page<br>\n"; }
  577. if (!$Form{'HTML_TEMP_BAS'} || $Form{'HTML_TEMP_BAS'} =~ /^\s+$/) { $err++; $aff_err = "- code html du bas de page<br>\n"; }
  578. if ($Form{'ORDRE_TYPE'} == 2 && ($Form{'ORDRE'} =~ /^\s+$/ || !$Form{'ORDRE'})) { $err++; $aff_err .= "- ordre des champs<br>\n"; }
  579. @DESTINATAIRES = split(/\r\n/, $Form{'DESTINATAIRES'});
  580. $Form{'DESTINATAIRES'} = join('|',@DESTINATAIRES);
  581. @DEST = split(/\|/,$Form{'DESTINATAIRES'});
  582. foreach (@DEST) { ($pseud,$mail) = split(/,/, $_); if (!&verifie_email($mail)) { $err++; $aff_err .= "- emails : mauvais format<br>\n"; last; } push(@EMAILS, "$pseud" ); }
  583. if ($err != 0) { &affiche_admin('ERREUR !',&bad_form); }
  584. $DEST = join(',', @EMAILS);
  585. @DOMAINES = split(/\r\n/, $Form{'DOMAINES'});
  586. $Form{'DOMAINES'} = join(',',@DOMAINES);
  587. if (!$Fm) { $num = &date(1); } else { $num = $Fm; }
  588. open(N_FORM, ">$PFORM_DATAS_DIR/F_$num.dat" );
  589. print N_FORM<<CONF_FORM;
  590. NAME=================$Form{'NAME'}
  591. DOMAINES=================$Form{'DOMAINES'}
  592. DESTINATAIRES=================$Form{'DESTINATAIRES'}
  593. CONFIRM=================$Form{'CONFIRM'}
  594. CONF_FORM
  595. if ($Form{'CONFIRM'} == 1)
  596.    {
  597.    $Form{'CONFIRM_MESS'} =~ s/\r\n//g;
  598.    print N_FORM qq|CONFIRM_MESS=================$Form{'CONFIRM_MESS'}\nCONFIRM_STYLE=================$Form{'CONFIRM_STYLE'}\n|;
  599.    }
  600. print N_FORM qq|INFOS=================$Form{'INFOS'}\nREDIRECT=================$Form{'REDIRECT'}\n|;
  601. if ($Form{'REDIRECT'} == 1) { print N_FORM qq|REDIRECT_URL=================$Form{'REDIRECT_URL'}\n|; }
  602. if ($Form{'REDIRECT'} == 0) { $Form{'REDIRECT_MESS'} =~ s/\r\n//g; print N_FORM qq|REDIRECT_MESS=================$Form{'REDIRECT_MESS'}\n|; }
  603. print N_FORM qq|REQUIS=================$Form{'REQUIS'}\nORDRE_TYPE=================$Form{'ORDRE_TYPE'}\n|;
  604. if ($Form{'ORDRE_TYPE'} == 2) { print N_FORM qq|ORDRE=================$Form{'ORDRE'}\n|; }
  605. if ($Form{'EXTENSIONS'}) { print N_FORM qq|EXTENSIONS=================$Form{'EXTENSIONS'}\n|; }
  606. close(N_FORM);
  607. eval { chmod(0777,"$PFORM_DATAS_DIR/F_$num.dat" ); };
  608. open(N_FORM_th, ">$PFORM_DATAS_DIR/F_temp_h_$num.dat" );
  609. print N_FORM_th $Form{'HTML_TEMP_HAUT'};
  610. close(N_FORM_th);
  611. eval { chmod(0777,"$PFORM_DATAS_DIR/F_temp_h_$num.dat" ); };
  612. open(N_FORM_tb, ">$PFORM_DATAS_DIR/F_temp_b_$num.dat" );
  613. print N_FORM_tb $Form{'HTML_TEMP_BAS'};
  614. close(N_FORM_tb);
  615. eval { chmod(0777,"$PFORM_DATAS_DIR/F_temp_b_$num.dat" ); };
  616. $aff = &bout_retour;
  617. $pas_oubli = '';
  618. if ($Form{'REQUIS'}) { $pas_oubli = qq~<BR>N'oubliez pas que les champs suivant doivent être présent dans votre formulaire :<br><b>$Form{'REQUIS'}</b><BR>~; }
  619. &affiche_admin("<B>ADMINISTRATION</B>",qq|Le formulaire &quot;<i>$Form{'NAME'}</i>&quot; a été créé ou modifié !<br><br>Il porte le numéro <b>$num</b>.<br><br>
  620. Voici le code html d'entête de votre formulaire :<br>
  621. <TEXTAREA $STYLE COLS="90" ROWS="10">
  622. <FORM METHOD="post" ACTION="$CGI" ENCTYPE="multipart/form-data">
  623. <INPUT TYPE="HIDDEN" NAME="F" VALUE="$num">
  624. <INPUT TYPE="HIDDEN" NAME="TO" VALUE="$DEST">
  625. ICI LE RESTE DU CODE DE VOTRE FORMULAIRE
  626. </FORM>
  627. </TEXTAREA>
  628. <BR>$pas_oubli
  629. $aff|);
  630. }
  631. sub pass_verif { if ($Form{'pass'} ne $CONF{'PASSWORD'}) { $badpass = q| : <B><font color="#FF0000">password incorrect !</font></B>|;  &admin_enter; } }
  632. sub form_config
  633. {
  634. &style;
  635. if ($CONF{'INSTALL'} != 1) { $Val_act = 'INSTALL'; $hid = ''; } else { $Val_act = 'modif_conf'; $hid = qq~<INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}">~; }
  636. @sendm = ('sendmail','/usr/lib/sendmail','/usr/bin/sendmail','/bin/sendmail','/usr/sbin/sendmail','/usr/local/bin/sendmail','/usr/local/lib/sendmail');
  637. foreach $s_mail(@sendm) { if (($s_mail ne '') && (-e "$s_mail" ) && (-x "$s_mail" )) { $path_sendmail .= $s_mail.'\n\n'; } }
  638. if (!$path_sendmail) { $path_sendmail = 'AUCUN !!\n\nRenseignez vous auprès de votre hébergeur !\n'; }
  639. return<<FORM_CONFIG;
  640. <TABLE WIDTH="100%" BORDER="0" ALIGN="CENTER" CELLPADDING="0" CELLSPACING="0">
  641. <FORM METHOD="POST" ACTION="$CGI">
  642. <INPUT TYPE="HIDDEN" NAME="ACT" VALUE="$Val_act">$hid
  643. <TR><TD CLASS="texte_w">PASSWORD :</td><TD CLASS="texte_w"><INPUT TYPE="password" size="20" maxlength="20" name="PASSWORD" $STYLE VALUE="$CONF{PASSWORD}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Votre mot de passe pour la section d\\'administration.\\n\\n20 caractères maximum !\\n')">$IMG_POINT</A></TD></TR>
  644. <TR><TD CLASS="texte_w">PASSWORD (confirmation) :</td><TD CLASS="texte_w"><INPUT TYPE="password" size="20" maxlength="20" name="PASSWORD2" $STYLE VALUE="$CONF{PASSWORD}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Entrez à nouveau votre mot de passe.\\n\\n20 caractères maximum !\\n')">$IMG_POINT</A></TD></TR>
  645. <TR><TD CLASS="texte_w">Nom de domaine :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="30" maxlength="255" name="DOMAIN" $STYLE VALUE="$DOMAIN"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('Votre nom de domaine\\n avec ou sans www.')&#034;&gt;$IMG_POINT&lt;/A&g [...] lt;/TR&gt;
  646. <TR><TD CLASS="texte_w">Chemin vers 'sendmail' :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="30" maxlength="150" name="SENDMAIL" $STYLE VALUE="$CONF{SENDMAIL}"></TD><TD CLASS="texte_w"><A HREF="javascript:alert('SENDMAIL\\n\\nprogramme serveur mail\\n\\nChemin\\(s\\) détecté\\(s\\) :  \\n\\n$path_sendmail')">$IMG_POINT</A></td></TR>
  647. <TR><TD CLASS="texte_w">Taille maximum des fichiers uploadés :</td><TD CLASS="texte_w"><INPUT TYPE="text" size="10" maxlength="10" name="MAX_UPLOAD" $STYLE VALUE="$CONF{MAX_UPLOAD}"> Ko</TD><TD CLASS="texte_w"><A HREF="javascript:alert('Il s\\'agit de la taille maximale que font l\\'ensemble des pièces jointes envoyé en même temps\\n\\nTaille approximative en Ko\\n')">$IMG_POINT</A></td></TR>
  648. <TR><TD CLASS="texte_w">&nbsp;</td><TD CLASS="texte"><INPUT TYPE="submit" $STYLE VALUE=" VALIDER "></TD><TD CLASS="texte_w">&nbsp;</td></TR>
  649. </FORM></TABLE>
  650. FORM_CONFIG
  651. }
  652. sub admin_config
  653. {
  654. &pass_verif;
  655. &style;
  656. $aff = q~Configuration principale du script :<BR><BR>~;
  657. $aff .= &form_config;
  658. $aff .= &bout_retour;
  659. &affiche_admin('<B>ADMINISTRATION</B>',$aff);
  660. }
  661. sub admin_modif_conf
  662. {
  663. &style;
  664. &pass_verif;
  665. &modif_config;
  666. $aff = 'La configuration du script a été modifié.';
  667. $Form{'pass'} = $CONF{'PASSWORD'};
  668. $aff .= &bout_retour;
  669. &affiche_admin('<B>ADMINISTRATION</B>',$aff);
  670. }
  671. sub modif_config
  672. {
  673. $err = 0;
  674. if (!$Form{'PASSWORD'} || $Form{'PASSWORD'} =~ /^\s+$/) { $err++; $aff_err = "- PASSWORD<br>\n"; }
  675. if (!$Form{'PASSWORD2'} || $Form{'PASSWORD2'} =~ /^\s+$/) { $err++; $aff_err .= "- PASSWORD (confirmation)<br>\n"; }
  676. if ($Form{'PASSWORD2'} ne $Form{'PASSWORD'}) { $err++; $aff_err .= "- password différent de password (confirmation)<br>\n"; }
  677. if ($Form{'DOMAIN'} !~ /$ENV{'SERVER_NAME'}|$ENV{'HTTP_HOST'}/i || $Form{'DOMAIN'} =~ /^http/) { $err++; $aff_err .= "- Nom de DOMAINE<br>\n"; }
  678. if (!$Form{'SENDMAIL'} || $Form{'SENDMAIL'} =~ /^\s+$/ || !-e $Form{'SENDMAIL'} || !-x $Form{'SENDMAIL'}) { $err++; $aff_err .= "- Chemin du programme SENDMAIL<br>\n"; }
  679. if ($Form{'MAX_UPLOAD'} !~ /^\d+$/) { $err++; $aff_err .= "- Taille maximale de l'ensemble des fichiers joints.<br>\n"; }
  680. if ($err != 0) { &style; &affiche_admin('ERREUR !',&bad_form); }
  681. &modif_conf('PASSWORD' => $Form{'PASSWORD'},'DOMAIN' => $Form{'DOMAIN'},'SENDMAIL' => $Form{'SENDMAIL'},'MAX_UPLOAD' => $Form{'MAX_UPLOAD'});
  682. }
  683. sub bout_retour { return qq|<FORM METHOD="POST" ACTION="$CGI"><INPUT TYPE="HIDDEN" NAME="ACT" VALUE="ADMIN"><INPUT TYPE="HIDDEN" NAME="pass" VALUE="$Form{pass}"><INPUT TYPE="submit" $STYLE VALUE=" RETOUR AU MENU "></FORM>\n|;  }
  684. sub bad_form { return qq|Votre formulaire comporte des erreurs, veuillez vérifier les champs suivants :<br><br>$aff_err<br><br><A HREF="javascript:history.back()" CLASS="texte">$IMG_BACK Retour au formulaire</A><BR>\n|; }
  685. sub style {
  686. $STYLE = qq|STYLE="FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 8pt; BACKGROUND-COLOR: #EAB522"|;
  687. $IMG_POINT = qq|<IMG SRC="http://vs6.hostfr.net/EXT/PForm/point_i.gif" BORDER="0" ALIGN="absmiddle">|;
  688. $IMG_BACK = qq|<IMG SRC="http://vs6.hostfr.net/EXT/PForm/back.gif" BORDER="0" ALIGN="absmiddle">|;
  689. }
  690. sub form_install
  691. {
  692. if (!-d "$PFORM_DATAS_DIR" ) { &affiche_admin('<b>Installation : ERREUR !</b>',"Le répertoire <i>$PFORM_DATAS_DIR</i> n'est pas présent !<br>Veuillez le créer avant l'installation du script !" ); }
  693. if (!-w "$PFORM_DATAS_DIR" ) { &affiche_admin('<b>Installation : ERREUR !</b>',"Le répertoire <i>$PFORM_DATAS_DIR</i> doit être en CHMOD 777 !" ); }
  694. $aff = "Pour finir l'installation du script, veuillez remplir le formulaire suivant :<br><br>\n";
  695. $aff .= &form_config;
  696. &affiche_admin('<b>INSTALLATION</b>',"$aff" );
  697. }
  698. sub install
  699. {
  700. &make_fic("$PFORM_DATAS_DIR/\.htaccess","<Limit GET>\norder deny,allow\ndeny from all\n</Limit>" );
  701. &make_fic("$PFORM_DATAS_DIR/CONFIG\.dat","INSTALL=================0\n" );
  702. eval { chmod(0777,"$PFORM_DATAS_DIR/CONFIG\.dat" ); };
  703. $CONF{'INSTALL'} = 1;
  704. &modif_config;
  705. &affiche_admin('<b>INSTALLATION : FIN !</b>',qq|L'installation du script est maintenant terminée !<BR>
  706. Pour commencer à créer vos formulaires,<br>rendez vous à l'adresse du script pour entrer dans votre section d'administration :<BR><BR>
  707. <A HREF="$CGI" CLASS="texte">$CGI</A><BR>|);
  708. }
  709. sub copy_du_fichier
  710. {
  711. my $file = $_[0];
  712. if ($file =~ /([^\/\\]+)$/)
  713.    {
  714.    $Filename = $1;
  715.    $Filename =~ s/^\.+//;
  716.    $File_Handle = $file;
  717.    }
  718. $Filename =~ s/ /_/g;
  719. $out_file = $PFORM_DATAS_DIR.'/'.$Filename;
  720. if (!open(OUTFILE, ">$out_file" )) { $aff = "<b>PROBLEME DE CHMOD OU DE CHEMIN DU REPERTOIRE : $PFORM_DATAS_DIR !</b>"; &affichage; }
  721. undef $BytesRead; undef $Buffer;
  722. while ($Bytes = read($File_Handle,$Buffer,1024)) { $BytesRead += $Bytes;  print OUTFILE $Buffer; }
  723. close($File_Handle);
  724. close(OUTFILE);
  725. eval { chmod(0777, "$out_file" ); };
  726. $i++;
  727. }
  728. sub affiche_admin
  729. {
  730. print "Content-type: text/html\n\n";
  731. print<<EOF;
  732. <html>
  733. <head>
  734. <title>P-Form v5.0 Gold - Administration !</title>
  735. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  736. <style type="text/css">
  737. A:link { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none }
  738. A:visited { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: none }
  739. A:hover { FONT-FAMILY: Arial, Helvetica, sans-serif; TEXT-DECORATION: underline; color: #FFFFFF }
  740. .titre { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 12pt; FONT-WEIGHT: bold }
  741. .lien { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #CCCCCC; FONT-SIZE: 7pt; }
  742. .texte_pt { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 7pt; }
  743. .texte { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #000000; FONT-SIZE: 10pt; }
  744. .texte_w { FONT-FAMILY: Arial, Helvetica, sans-serif; COLOR: #FFFFFF; FONT-SIZE: 10pt; }
  745. </style>
  746. </head>
  747. <body bgcolor="#FFFFFF" text="#000000">
  748. <br>
  749. <table width="650" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#023A69" bgColor="#BFC9D3">
  750.   <tr>
  751.     <td align="center" bgcolor="#023A69" class="titre">Section d'administration
  752.       de P-Form v5.0 Gold</td>
  753.   </tr>
  754.   <tr>
  755.     <td><br> <table width="75%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#EAB522">
  756.         <tr>
  757.           <td align="center" class="texte">
  758.           $_[0]
  759.                </td>
  760.         </tr>
  761.       </table>
  762.       <hr align="center" width="75%" size="1" noshade color="#023A69">
  763.             <table width="75%" border="0" align="center" cellpadding="0" cellspacing="0">
  764.         <tr>
  765.           <td class="texte_w">
  766.           $_[1]
  767.                </td>
  768.         </tr>
  769.       </table>
  770.       <hr align="center" width="75%" size="1" noshade color="#023A69">
  771.       <br> </td>
  772.   </tr>
  773.   <tr>
  774.     <td align="center" bgcolor="#023A69" class="texte_pt">P-Form 5.0 gold <a class="lien" href="http://www.perl-fr.com" target="_blank">&copy;
  775.       Perl-fr.com</a></td>
  776.   </tr>
  777. </table>
  778. </body>
  779. </html>
  780. EOF
  781. exit;
  782. }
  783. sub make_fic
  784. {
  785. open (FIC_CREATE, ">$_[0]" ) || &affiche_admin("<b>Impossible de créer le fichier $_[0] !</b>" );
  786. print FIC_CREATE "$_[1]";
  787. close (FIC_CREATE);
  788. }
  789. sub recup_conf
  790. {
  791. open (CONF_FIC,"$PFORM_DATAS_DIR/CONFIG.dat" ) or goto NOHERE;
  792. while ($line=<CONF_FIC> )
  793.       {
  794.       chomp($line);
  795.       if ( ($line !~ /^$/) && ($line !~ /^\s+$/) && ($line !~ /^#/) && ($line =~ /^(.*)=================(.*)$/) ) { $CONF{"$1"}="$2"; }
  796.       }
  797. close (CONF_FIC);
  798. NOHERE:
  799. }
  800. sub modif_conf
  801. {
  802. my (%NEW_CONF) = @_;
  803. foreach (keys (%NEW_CONF)) { $CONF{"$_"} = $NEW_CONF{"$_"}; }
  804. open (CONF_W,">$PFORM_DATAS_DIR/CONFIG.dat" );
  805. foreach (sort keys(%CONF)) { print CONF_W ($_."=================".$CONF{"$_"}."\n" ) unless $CONF{"$_"} eq ''; }
  806. close (CONF_W);
  807. }
  808. sub date
  809. {
  810. local($sec,$min,$heure,$jour,$mois,$an,$date,$numero);
  811. ($sec,$min,$heure,$jour,$mois,$an) = localtime(time);
  812. $mois++;
  813. $an+=1900;
  814. if ($jour < 10) {$jour='0'.$jour;}
  815. if ($mois < 10)  {$mois='0'.$mois;}
  816. if ($min < 10) {$min='0'.$min;}
  817. if ($heure < 10) {$heure='0'.$heure;}
  818. if ($sec < 10) {$sec='0'.$sec;}
  819. $date = $jour.'/'.$mois.'/'.$an.' à '.$heure.'h'.$min;
  820. $numero = $an.$mois.$jour.$heure.$min.$sec;
  821. if ($_[0] == 1) { return $numero; } else { return $date; }
  822. }
  823. sub verifie_email
  824. {
  825. local ($email)=@_;
  826. $email=~ s/\.\@/\@/;
  827. if ($email =~ /^$/) { return(0);}
  828. if ($email =~ /^\s+$/) { return(0);}
  829. if ($email!~ /\@/) { return(0);}
  830. if (length $email > 255) { return(0); }
  831. if ($email=~ /[\,|\s|\;]/) {return (0);}
  832. if ($email =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/ || ($email !~ /^.+\@localhost$/ && $email !~ /^.+\@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/)) {
  833. return(0);
  834. }else{
  835. return(1);
  836.   }
  837. }


 
Tu confirmes que c'est cette ligne qui provoque le plantage?
$aff = qq~<b>Erreur : CHAMPS OBLIGATOIRES !!</b><BR>
parce que ca n'a pas l'air d'être lié à la notion de pièce jointe, ça...
A+,


Message édité par gilou le 24-09-2008 à 12:39:13

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 24-09-2008 à 21:13:42    

Non c'est celle la:open(FILE, "uuencode $out_file[$i] $n_file|" ) or die;

Reply

Marsh Posté le 24-09-2008 à 22:46:26    

Si tu imprimes $! au moment du die, tu obtiens quoi ?

Reply

Marsh Posté le 24-09-2008 à 23:35:18    

Je sai pas faire ca comment on fais?
Je tien juste a preciser que ce script avait fonctionne il y a 4 ans avec le meme formulaire cree sous front page
j'avais eu des probleme pour recevoir les piece jointe car je les recevais en format texte ,mais la je comprend pas je recois pas les pieces jointes

Reply

Marsh Posté le 25-09-2008 à 07:54:03    

ben tu écris :
open(blabla) or die $!;
 
Ça te donnera la raison de l'échec d'ouverture du pipe.

Reply

Marsh Posté le 25-09-2008 à 11:37:28    

Tu as un bout de code (reformaté pour plus de lisibilité):

Code :
  1. if ($i > 0) {
  2.     foreach $i(1..$i) {
  3.         if (-e $out_file[$i]) {
  4.             $n_file = $out_file[$i]; $n_file =~ s/^.*[\/|\\|\:]//g;  
  5.             open(FILE, "uuencode $out_file[$i] $n_file|" ) or die;
  6.             while (<FILE> ) {
  7.                 print MAIL;
  8.             }
  9.             close(FILE);
  10.         }
  11.         unlink("$out_file[$i]" );
  12.     }
  13. }


Je ne vois pas trop l'intérêt du unlink la, car si le test avec -e a repondu faux, il n'y a rien a supprimer. D'autre part, l'usage double de $i dans la ligne
foreach $i(1..$i) {
me semble tres dangereux.
 
On pourrait donc avoir, en renommant la variable $n_file en $file_name afin que ce soit plus explicite:

Code :
  1. if ($i > 0) {
  2.     foreach $k (1..$i) {
  3.         if (-e $out_file[$k]) {
  4.             $file_name = $out_file[$k]; $file_name =~ s/^.*[\/|\\|\:]//g;
  5.             open(FILE, "uuencode $out_file[$k] $file_name |" ) or die $!;
  6.             while (<FILE> ) {
  7.                 print MAIL;
  8.             }
  9.             close(FILE);
  10.             unlink("$out_file[$k]" );
  11.         }
  12.     }
  13. }

Je serais toi, je testerais déja avec cette version.  
 
On peut pousser plus loin: Si on regarde la ligne  
$file_name = $out_file[$k]; $file_name =~ s/^.*[\/|\\|\:]//g;  
Clairement, tu veux recuperer le non du fichier sans son path dans $file_name pour que uudecode le prenne comme nom du fichier en interne.
Essayes une solution a la perl donnant le même résultat:
use File::Basename;
my($file_name, $directories, $suffix) = fileparse($out_file[$k]);
d'autre part, voyant cela, on comprend que le test if (-e $out_file[$k]) { teste si le fichier $out_file[$k] existe, et donc que l'on pourrait écrire:
if (-e $out_file[$k] and -f _) {
ou on teste si le fichier existe et est un fichier
 
Ce qui aboutit a ce type de code:

Code :
  1. if ($i > 0) {
  2.     foreach $k (1..$i) {
  3.         if (-e $out_file[$k] and -f _) {
  4.             use File::Basename; #plutot a coller en tête de fichier
  5.             my($file_name, $directories, $suffix) = fileparse($out_file[$k]);
  6.             open(FILE, "uuencode $out_file[$k] $file_name |" ) or die $!;
  7.             while (<FILE> ) {
  8.                 print MAIL;
  9.             }
  10.             close(FILE);
  11.             unlink("$out_file[$k]" );
  12.         }
  13.     }
  14. }


A+,


Message édité par gilou le 25-09-2008 à 12:02:24

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-09-2008 à 11:53:12    

J'avoue pour ma part avoir la grosse flemme de lire le script, t'as du courage gilou [:cosmoschtroumpf]

Reply

Marsh Posté le 25-09-2008 à 11:58:10    

Ben il a une erreur dans un petit bout de code facilement isolable :)
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-09-2008 à 18:55:38    

J'ai essaye ce que vous m'avais dis mais toujour la meme erreur avec piece jointe INTERNAL SERVEUR ERROR
ET dans les logs j'ai ca
No such file or directory at /web/sites/vhbu3/1/205/105681/public/www/cgi-bin/PForm.pl line 233.
No such file or directory at /web/sites/vhbu3/1/205/105681/public/www/cgi-bin/PForm.pl line 233.
No such file or directory at /web/sites/vhbu3/1/205/105681/public/www/cgi-bin/PForm.pl line 234.
qui concerne toujour la ligne open(FILE, "uuencode $out_file[$k] $file_name |" ) or die $!;
le probleme pourait il venir d'ailleur et causer une erreur sur cette ligne

Reply

Marsh Posté le 25-09-2008 à 18:55:38   

Reply

Marsh Posté le 25-09-2008 à 20:38:34    

La, il va falloir que tu traces les valeurs de $out_file[$k] et $file_name pour verifier qu'elles sont bonnes.
Si ca vient pas de la, je ne vois qu'une autre possibilité: uuencode n'est pas trouvé au moment de l'execution du shell. Ton uuencode est bien un executable, pas un script?
A+,


Message édité par gilou le 25-09-2008 à 20:41:22

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 25-09-2008 à 23:57:02    

je ne sai pas ce que c'est uuencode ,ca doit etre ou sur le serveur ?
moi je n'utilise que ce script qui traite les données de mon formulaire et qui les envois a mon adresse email
j'ai donnés comme info dans le parametrage du script que le chemin sendmail usr/sbin/sendmail et le site autorisé a utiliser le script(referer)

Reply

Marsh Posté le 26-09-2008 à 00:02:55    

remytiti a écrit :

je ne sai pas ce que c'est uuencode


Encodage de données en base 64, pour pouvoir les faire transiter de manière standard par divers médias (surtout utilisé pour des fichiers binaires en pièces-jointes dans des mails)

 
remytiti a écrit :

ca doit etre ou sur le serveur ?


Dans l'un des répertoires décrit dans le $PATH (ou %PATH selon l'OS sur lequel le serveur se trouve).


Message édité par Elmoricq le 26-09-2008 à 00:03:24
Reply

Marsh Posté le 26-09-2008 à 13:12:37    

Sinon, tu peux toujours l'ajouter a ton programme, en pur perl:

Code :
  1. ############################################################################
  2. #                                                                          #
  3. # uuencode()                        Version 2.0                            #
  4. # Written by Matthew Wright         mattw@worldwidemart.com                #
  5. # Created 10/4/96                   Last Modified 4/7/97                   #
  6. #                                                                          #
  7. # Copyright 1997 Craig Patchett & Matthew Wright.  All Rights Reserved.    #
  8. # This subroutine is part of The CGI/Perl Cookbook from John Wiley & Sons. #
  9. # License to use this program or install it on a server (in original or    #
  10. # modified form) is granted only to those who have purchased a copy of The #
  11. # CGI/Perl Cookbook. (This notice must remain as part of the source code.) #
  12. #                                                                          #
  13. # Function:      Uuencodes a file.                                         #
  14. #                                                                          #
  15. # Usage:         &uuencode($filename);                                     #
  16. #                                                                          #
  17. # Variables:     $filename   --  Full path to file to uuencode             #
  18. #                                Example "/path/to/filename.gif"           #
  19. #                                                                          #
  20. # Returns:       String containing uuencoded file data if successful       #
  21. #                0 if specified file could no be opened                    #
  22. #                                                                          #
  23. # Uses Globals:  $Error_Message --  Set to text message if error           #
  24. #                                                                          #
  25. # Files Created: None                                                      #
  26. #                                                                          #
  27. ############################################################################
  28. sub uuencode {
  29.     local($file) = @_;
  30.     local($uuencoded_data, $line);
  31.    
  32.     if (open(ATTCH, $file)) {
  33.         # Process the file
  34.    
  35.         while (read(ATTCH, $line, 45)) {
  36.             $uuencoded_data .= pack("u", $line);
  37.         }
  38.         close(ATTCH);
  39.         return($uuencoded_data);
  40.     }
  41.     else {
  42.        
  43.         # Return error if file couldn't be opened
  44.        
  45.         $Error_Message = "Could not open uuencode attachment: $file ($!)";
  46.         return('');
  47.     }
  48. }


 
ou utiliser le module perl Convert::UU

remytiti a écrit :

je ne sai pas ce que c'est uuencode ,ca doit etre ou sur le serveur ?
moi je n'utilise que ce script qui traite les données de mon formulaire et qui les envois a mon adresse email
j'ai donnés comme info dans le parametrage du script que le chemin sendmail usr/sbin/sendmail et le site autorisé a utiliser le script(referer)

Rassures moi, tu sais programmer en perl?
 
A+,


Message édité par gilou le 26-09-2008 à 13:15:52

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 26-09-2008 à 18:24:44    

Non pas du tout enfin a force d'aller sur les forum je comprend un peu mieu mais pas au point de comprendre un script comme celui la  
ce que je comprend pas je l'ai utilise dans les meme condition il y a 4 ans et ca marchais sauf au debut ou je recevais les pieces jointe en format texte

Reply

Marsh Posté le 27-09-2008 à 10:51:51    

remytiti a écrit :

Non pas du tout enfin a force d'aller sur les forum je comprend un peu mieu mais pas au point de comprendre un script comme celui la

[:buggy]  
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed