PHP

Formulaire de contact en PHP

Non Résolu

Bonjour, j'ai récemment vu sur internet un tutoriel pour faire un formulaire en PHP. En fait, vous avez le formulaire, et quand vous le remplissez et que vous cliquez sur envoyer, les informations vont sur une autre page PHP protégée par un MDP. Et c'est ce système là que je cherche à exploiter. De mon côté, j'ai repris un formulaire libre de droit et je l'ai modifié, voici le code:


<form class="form-contact contact_form" method="post" id="contactForm" novalidate="novalidate">
                            <div class="row">
                                <div class="col-12">
                                    <div class="form-group">
                                        <textarea class="form-control w-100" name="message" id="message" cols="30" rows="9" onfocus="this.placeholder = 'Inscrivez votre message'" onblur="this.placeholder = 'Inscrivez votre message'" placeholder="Inscrivez votre message"></textarea>
                                    </div>
                                </div>
                                <div class="col-sm-6">
                                    <div class="form-group">
                                        <input class="form-control valid" name="name" id="name" type="text" onfocus="this.placeholder = 'Entrez votre nom et prénom'" onblur="this.placeholder = 'Entrez votre nom et prénom'" placeholder="Entrez votre nom et prénom">
                                    </div>
                                </div>
                                <div class="col-sm-6">
                                    <div class="form-group">
                                        <input class="form-control valid" name="email" id="email" type="email" onfocus="this.placeholder = 'Entrez votre adresse mail'" onblur="this.placeholder = 'Entrez votre adresse mail'" placeholder="Entrez votre adresse mail">
                                    </div>
                                </div>
                                <div class="col-12">
                                    <div class="form-group">
                                        <input class="form-control" name="subject" id="subject" type="text" onfocus="this.placeholder = 'Sujet de votre message'" onblur="this.placeholder = 'Sujet de votre message'" placeholder="Sujet de votre message">
                                    </div>
                                </div>
                            </div>
                            <div class="form-group mt-3">
                                <button type="submit" class="button button-contactForm boxed-btn">Envoyer</button>
                            </div>
                        </form>


De plus, j'ai un fichier JS qui gère le formulaire (par exemple si un des champs n'est pas complété lorsque l'utilisateur clique sur le bouton "Envoyer", un texte apparaît en dessous du champs pour le prévenir), le voici: 


$(document).ready(function(){
     
    (function($) {
        "use strict";
 
     
    jQuery.validator.addMethod('answercheck'function (value, element) {
        return this.optional(element) || /^\bcat\b$/.test(value)
    }, "type the correct answer -_-");
 
    // validate contactForm form
    $(function() {
        $('#contactForm').validate({
            rules: {
                name: {
                    requiredtrue,
                    minlength: 2
                },
                subject: {
                    requiredtrue,
                    minlength: 4
                },
                number: {
                    requiredtrue,
                    minlength: 5
                },
                email: {
                    requiredtrue,
                    emailtrue
                },
                message: {
                    requiredtrue,
                    minlength: 20
                }
            },
            messages: {
                name: {
                    required"Veuillez inscrire votre nom et prénom",
                    minlength"Ce champ doit être complété avec 2 caractères au minimum"
                },
                subject: {
                    required"Veuillez inscrire le sujet",
                    minlength"Votre sujet doit contenir au moins 4 caractères"
                },
                number: {
                    required"come on, you have a number, don't you?",
                    minlength"your Number must consist of at least 5 characters"
                },
                email: {
                    required"Veuillez inscrire votre e-mail"
                },
                message: {
                    required"Veuillez inscrire votre message",
                    minlength"Votre message doit être plus long"
                }
            },
            submitHandlerfunction(form) {
                $(form).ajaxSubmit({
                    type:"POST",
                    data: $(form).serialize(),
                    url:"contact_process.php",
                    successfunction() {
                        $('#contactForm :input').attr('disabled', 'disabled');
                        $('#contactForm').fadeTo( "slow", 1, function() {
                            $(this).find(':input').attr('disabled', 'disabled');
                            $(this).find('label').css('cursor','default');
                            $('#success').fadeIn()
                            $('.modal').modal('hide');
                            $('#success').modal('show');
                        })
                    },
                    errorfunction() {
                        $('#contactForm').fadeTo( "slow", 1, function() {
                            $('#error').fadeIn()
                            $('.modal').modal('hide');
                            $('#error').modal('show');
                        })
                    }
                })
            }
        })
    })
         
 })(jQuery)
})


Enfin, voici le code du formulaire que je veux exploiter sur le mien (en PHP):


<html>
<!--
   Ce script est gratuit et peut être librement utilisé et modifié.
   © Jean Claude Meier, Fleury, 3/04
     Site PedagoJiC : http://jc.meier.free.fr
     v 060304
   1 ère partie :
 
   on construit un formulaire formul.php qui s'appelle lui-même et qui va transmettre
     au fichier texte fic.txt les renseignements :
       - retour (champ caché pour savoir que l'envoi a bien été fait)
       - etcivil (bouton radio pour l'état civil : mr, mme ou mle)
       - nom (champ texte pour le nom du correspondant)
       - prenom (idem pour son prénom)
       - message (champ texte sur plusieurs lignes)
       - email (son adresse de courrier électronique)
     Ici, à titre d'exemple, seuls les champs email et message sont obligatoires.
     Aucun contôle sur la validité de l'email n'est fait mais cela pourrait être
     utile (d'après mon expérience, 1 à 2 personnes sur 10, en moyenne, se trompent en
     remplissant ce champ !)
     Les renseignements fournis sont traités ci-dessous et récupérés par le
     2 ème script litformul.php
     Ces 2 scripts devraient fonctionner avec toutes les versions de php4 (?)
 
   I) Création et envoi du formulaire
    
   06/03/12
   Remplacement de $HTTP_POST_VARS par $_POST nécessaire pour les dernières versions de PHP
   et obligatoire sur certains serveurs ex : SFR, ORANGE...
-->
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
  <title>Essai de formulaire presque automatique</title>
</head>
<body>
<form action="formul.php" method="post" name="formu">
  <br><br>
  <table bgcolor="#CCCCFF" align="center">
    <tr>
      <td>
        <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="radio" name="etcivil" value="monsieur">
          Monsieur </font></div>
      </td>
      <td>
        <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="radio" name="etcivil" value="madame">
          Madame </font></div>
      </td>
      <td valign="middle">
        <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="radio" name="etcivil" value="mademoiselle">
          Mademoiselle </font></div>
      </td>
      <td rowspan="4" valign="top">
        <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <textarea name="message" cols="30" rows="5"></textarea>
          </font></div>
      </td>
    </tr>
    <tr>
      <td>
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Nom
          :</font></div>
      </td>
      <td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="text" name="nom">
        </font></td>
      <td valign="middle">
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
          Message :</font></div>
      </td>
    </tr>
    <tr>
      <td>
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Prenom
          :</font></div>
      </td>
      <td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="text" name="prenom">
        </font></td>
      <td valign="middle"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        </font><font size="2"></font></td>
    </tr>
    <tr>
      <td>
        <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
          e-mail :</font></div>
      </td>
      <td colspan="2">
        <div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="text" name="email" size="40">
          </font></div>
        <div align="center"> </div>
      </td>
    </tr>
    <tr>
      <td> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
        <input type="hidden" name="retour" value="1">
        </font></td>
      <td>
        <div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="submit" value="Envoyer" name="submit2">
          </font></div>
      </td>
      <td>
        <div align="center"> <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
          <input type="reset" name="submit" value="R&eacute;tablir">
          </font></div>
      </td>
      <td valign="middle">
        <div align="center"><font face="Verdana, Arial, Helvetica, sans-serif" size="2">(*)
          champs obligatoires</font></div>
      </td>
    </tr>
  </table>
</form>
<?php
      // II) Récupération des données et préparation de la réponse
      // prêt pour les nouvelles versions de PHP et les
      // variables globales à OFF
      // $_POST["   "]  ne mache pas chez tout le monde : Tiscali PHP v 4.0.5  (3/04)
 
      // le formulaire  a bien été envoyé
       if(isset($_POST["retour"])) {
 
       $etcivil = $_POST["etcivil"];
       $nom = htmlspecialchars($_POST["nom"]);
       $prenom = htmlspecialchars($_POST["prenom"]);
       $message = htmlspecialchars($_POST["message"]);
       $email = htmlspecialchars($_POST["email"]);
 
//htmlspecialchars pour contrer les éventuels injections pirates de code
//   html, javascript... (XSS) en filtrant les entrées
 
      // les champs message et email sont bien remplis
             if(($message != "") && ($email != ""))
             {
      // Ecriture dans le fichier texte en ajout
                 $fp = fopen("fic.txt", "a+");
      // heure et date d'envoi
                 fputs ($fp,"----------------------- ".date("d/m/Y - H:i:s").' ----------------------'."\n");
 
      // Ecriture des renseignements : id, nom, prénom
                 fputs ($fp,"état civil = $etcivil\n");
                 fputs ($fp,"nom = $nom\n");
                 fputs ($fp,"prénom = $prenom\n");
 
      // Préparation du message pour la réponse presque automatique
      // c'est à dire que l'on va mettre automatiquement :
      // - l'adresse  du destinataire
      // - le sujet du message
      // - le corps du message sur plusieurs lignes
 
 
      // On code en "dur" (valeur hexadécimale) la valeur du caractère espace
                 $_ = "%20";
 
      // Et ici 2 versions pour mettre le corps du message sur plusieurs lignes
      // d'après les 2 logiciels de messagerie que j'ai pu tester :
 
                 // $entree = "<br>" ; // pour Mozilla (Thunderbird pour moi)
 
                 $entree = "%0A"; // pour Outlook Express (5.5 ?)!!!!
 
 
                 $sujet = "Gestion".$_."presque".$_."automatique".$_."de".$_."formulaires";
                 $ligne1 = "Merci".$_."pour".$_."votre".$_."message";
                 $ligne2 = "qui".$_."m\'a".$_."fait".$_."bien".$_."plaisir.";
                 $ligne3 = "Cordialement.";
                 $ligne4 = "A".$_."bientôt.";
                 $ligne5 = "";
                 $body = $ligne1.$entree.$ligne2.$entree.$entree.$ligne3.$entree.$entree.$ligne4;
 
      // Ecriture dans le fichier texte
                 fputs($fp,"email = <a href=\"mailto:$email?subject=$sujet&body=$body\">$email</a>\n");
      // Ecriture du message
                 fputs ($fp,"message = $message\n");
                 fclose($fp);
      // L'envoi est correct, on adresse un message de remerciement
                 echo "<center>Merci pour votre message $etcivil $prenom $nom.<br>";
                 echo "Une réponse vous sera envoyée dès que possible.<br>";
                 echo "Vous pouvez maintenant refermer cette fenêtre.</center>";
               }
      // 1 des 2 champs obligatoires n'a pas été rempli
             else echo "Veuillez obligatoirement <b>remplir</b> les champs <b>e-mail</b> et <b>message</b>";
         }
     ?>
</body>
</html>


Et la page protégée par un MDP: 


<html>
<!--
   Ce script est gratuit et peut être librement utilisé et modifié.
   © Jean Claude Meier, Fleury, 3/04
     Site PedagoJiC : http://jc.meier.free.fr
     v 060304
   2 ème partie :
 
   à partir des renseignements envoyés dans le fichier texte (fic.txt), par le
   formulaire formul.php, on va envoyer, au correspondant, en 2 clics, (1 sur son adresse et 1 sur
   le bouton Envoyer de votre gestionnaire de courrier (Mozilla/ Outlook Express))
   un message automatiquement préparé.
    
 06/03/12
   Remplacement de $HTTP_POST_VARS par $_POST nécessaire pour les dernières versions de PHP
   et obligatoire sur certains serveurs ex : SFR, ORANGE...  
-->
<head>
<title>Lecture des messages envoyés par formul</title>
</head>
<body>
<?php
// effacement du fichier texte
function vider($le_fic)
 {
   $fp=fopen($le_fic,"w");
   if (flock($fp,2))
     {
      fputs($fp,"");
      }
   flock($fp,3);
   fclose($fp);
 }
// chargement et affichage du fichier texte
function lire($le_fic)
  {
    echo "<center>-------------------- [".date("d M Y H:i:s")."] ---------------------</center><br>";
    $contenu=fread(fopen($le_fic,"r"),filesize($le_fic));
// On enlève les antislashes (ex : j\'ai) et on met les retours chariots (Entrée) HTML
    echo stripslashes(nl2br($contenu));
// Pour éventuellement imprimer la page avec tous les formulaires
   echo "<br><form><input type=\"button\" value=\"imprimer\" onclick=\"print();\"></form>";
 }
 ?>
 <!--  Il est préférable que le lecteur de formulaires soit protégé par un mot
       de passe, afin que n'importe qui ne puisse pas lire/effacer vos messages
 -->
<form method="post" action="litformul.php">
<table align=center>
<tr>
<td>Mot de passe : </td>
<td><input type="password" size="40" name="mot_de_passe"></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="ouvrir"></td>
</tr>
</table>
</form>
<?php
  $fic = "fic.txt";
  if (isset($_POST["mot_de_passe"]))
   {
     if ($_POST["mot_de_passe"] =="azerty")    // à changer évidemment !
      {
// le formulaire s'appelle lui-même  et selon votre choix
// lit, efface ou lit et efface la page qui contient les formulaires
 
    // le nom du script, donc litformul.php,  ici
         $nom_fic =  "litformul.php"; // ou basename($PHP_SELF);
         echo "<form method=\"post\" action=\"$nom_fic\">";
         echo "<center><table bgcolor=\"#D1F3DD\" align=\"center\"  width=\"60%\" border=\"1\">";
         echo "<tr>";
         echo "<td width=\"33%\"><center>lire</center></td>";
         echo "<td width=\"33%\" colspan=\"2\"><center>vider</center></td>";
         echo "<td width=\"33%\"><center>lire&vider</center></td>";
         echo "</tr>";
         echo "<tr>";
         echo "<td><center><input type=\"radio\" name=\"rbchoix\" value=\"lire\" checked></center></td>";
         echo "<td colspan=\"2\"><center><input type=\"radio\" name=\"rbchoix\" value=\"vider\"></center></td>";
         echo "<td><center><input type=\"radio\" name=\"rbchoix\" value=\"lire&vider\" ></center></td>";
         echo "</tr>";
         echo "<tr>";
         echo "<td colspan=\"4\" align=\"center\"><input type=\"submit\" value=\"envoyer\"></td>";
         echo "</tr></table></center>";
         echo "</form>";
      }
      else
      {
        echo "Mot de passe incorrect !";
       }
    }
  if (file_exists($fic) && isset($_POST["rbchoix"]))
  {
   if ($_POST["rbchoix"] == "lire")
     {
      lire($fic);
     }
   if ($_POST["rbchoix"] == "vider")
     {
      vider($fic);
     }
  if ($_POST["rbchoix"] == "lire&vider")
     {
      lire($fic);
      vider($fic);
     }
  }
 ?>
</body>
</html>


Voilà, merci infiniment d'avance ! 

628 vues
01 mai 2020 à 19:11 (Édité)
Cette pub permet au site de vivre ...

1 commentaire

Hello @Loussio,


N'hésite pas à mettre un peu d'espace entre ton code et ton texte et attention aux titres (j'ai réédité cela) 😉

En fait je ne comprends pas le sens de protéger cette page avec un mot de passe...

Quand l'utilisateur remplis ton formulaire, les données sont automatiquement envoyé sur ton adresse email, donc l'utilisateur ne peux plus modifier quoi que ce soit car les données sont côté serveur et non côté client...

Tu devrais jeter un coup d'oeil à ce tutoriel 😉

Cette pub permet au site de vivre ...