Se connecter Recherche

Dans cet article, je vais mettre à votre disposition un code source vous permettant d’insérer un formulaire de contact sur votre site. Cette première version est « light », j’entend par là qu’elle contient le minimum de champ requis pour votre visiteur puisse vous contacter et que vous puissiez lui répondre. Est intégré un champ Nom, un champ Email, un champ de Message et un petit filtre anti-spam afin que ces petits robots qui viennent pourrir nos boîtes emails vous laisse tranquille.

Je ne vais pas vous détailler sa conception étape par étape car la page deviendrais longue et je crains que ce type de méthode vous perde plus que ne vous apporte de réponse. Je vais donc, dans un premier temps, vous afficher le code HTML (et un peu PHP) que je vous expliquerais, puis répeterais l’opération pour le code de traitement PHP, car ce formulaire nécessite la création de 2 fichiers. Ce qui sont intéressés par les explications pourrons ainsi y avoir accès, et ceux qui recherche simplement un code fonctionnel pourrons le récupérer rapidement.

Voir la demo du formulaire

Afin de respecter les chemin de fichiers inclus dans le code, je conseille au plus néophytes d’utiliser les mêmes noms que ce des explications et de placer ces fichiers dans le même dossier (dont le nom n’a pas d’importance). Les plus expérimentés maîtrisant la réécriture de chemin de fichiers, vous avez carte blanche.

La structure établie

Voici l’arborescence mise en place pour ce formulaire :

  • Un fichier contact.php hébergeant le code HTML du formulaire et quelques directives de traitement.
  • Un fichier send_form.php s’occupant de traiter le formulaire de contact, vérifier les erreurs, et vous le transmettre sur votre boite email.

Les extensions ont une importance, veillez à ce que ces 2 fichiers soit bien .php, pas de .html sous risque de vous retrouver avec un formulaire inutilisable.

Le code HTML de ce formulaire de contact

Voici donc le code HTML qui vous permettra de récréer le modèle de démo. Vous remarquerez que j’utilise le CSS de Bootstrap pour cet exemple. Ce choix a une raison très simple: cela m’évite d’avoir à recréer un CSS spécifique pour la démo (les devs sont des gens un peu paresseux …). Aucune obligation de faire de même, cet appel de CSS n’ayant aucune influence sur le fonctionnement du formulaire.

<?php
  session_start();
  ?>
  <!doctype html>
  <html>
  <head>
  <meta charset="utf-8">
  <title>Formulaire de contact - Version minimale</title>
  <!-- call bootstrap -->
  <link href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
</head>
<body style="padding:100px 0 200px 0">
  <div style="padding-bottom:100px" class="container">
  <div class="row">
  <div class="col-md-12">
  <hr>
  <div class="alert alert-info"><b>INFOS:</b> Ce formulaire est une démo, le fonctionnement est complet mais le message n'arrivera nul part, les spammer peuvent passer leur chemin!</div>
  <hr>
  </div>
  </div>
  </div>
<!-- CONTENT -->
  <div class="container">
  <?php if(array_key_exists('errors',$_SESSION)): ?>
  <div class="alert alert-danger">
  <?= implode('<br>', $_SESSION['errors']); ?>
  </div>
  <?php endif; ?>
  <?php if(array_key_exists('success',$_SESSION)): ?>
  <div class="alert alert-success">
  Votre email à bien été transmis !
  </div>
  <?php endif; ?>
<form action="send_form.php" method="post">
  <div class="row">
<div class="col-md-6">
  <div class="form-group">
  <label for="inputname">Votre nom</label>
  <input required type="text" name="name" class="form-control" id="inputname" value="<?php echo isset($_SESSION['inputs']['name'])? $_SESSION['inputs']['name'] : ''; ?>">
  </div><!--/*.form-group-->
  </div><!--/*.col-md-6-->
<div class="col-md-6">
  <div class="form-group">
  <label for="inputemail">Votre email</label>
  <input required type="email" name="email" class="form-control" id="inputemail" value="<?php echo isset($_SESSION['inputs']['email'])? $_SESSION['inputs']['email'] : ''; ?>">
  </div><!--/*.form-group-->
  </div><!--/*.col-md-6-->
<div class="col-md-12">
  <div class="form-group">
  <label for="inputmessage">Votre message</label>
  <textarea required id="inputmessage" name="message" class="form-control"><?php echo isset($_SESSION['inputs']['message'])? $_SESSION['inputs']['message'] : ''; ?></textarea>
  </div><!--/*.form-group-->
  </div><!--/*.col-md-12-->
<div class="col-md-12">
  <div class="checkbox">
  <label for="checkspam">
  <input type="checkbox" name="antispam" id="checkspam">Je suis un spammer et je l'assume!
  </label>
  </div>
  </div><!--/*.col-md-12-->
<div class="col-md-12">
  <button type='submit' class='btn btn-primary'>Envoyer</button>
  </div><!--/*.col-md-12-->
</div><!--/*.row-->
  </form>
</div><!--/*.container-->
  <!-- END CONTENT -->
</body>
  </html>
  <?php
unset($_SESSION['inputs']); // on nettoie les données précédentes
  unset($_SESSION['success']);
  unset($_SESSION['errors']);

Vous remarquerez, en entrée de code, une commande de démarrage de session. Celle-ci nous permettra de récupérer les informations de session (celle du visiteur utilisant le formulaire) afin de pouvoir restituer dans les différents champs les informations saisies au cas où une erreur surviendrais lors de la soumission, évitant ainsi à l’utilisateur de devoir réécrire les informations déjà saisie dans les différents champs.

Nous créons ensuite 2 conditions, l’une chargée de restituer les erreurs (s’il y en a) afin d’informer l’utilisateur et une seconde permettant d’informer l’utilisateur du bon envoi de son message.

Nous créons ensuite le formulaire, en utilisant la balise form, auquel nous indiquons que la page de traitement est send_form.php et que nous utiliserons une méthode POST (informations masquées, pas de limite de taille de données).

la structure de div et class attribuée découle directement de l’utilisation de Bootstrap, ces éléments ne sont qu’à but d’un résultat Front-End correct.

Nous allons ensuite créer un champ Nom en utilisant un input de type text, nous lui assignons un name unique et requis pour la récupération d’information lors du traitement, puis un id lié au for du label pour une question d’optimisation UX (expérience utilisateur). L’attribut value sera destiné à restituer des informations préalablement saisie si il y a erreur lors de la soumission (utilisation de la session). Nous créons une array [inputs] contenant les différentes saisies spécifiques à chaque champ (filtré par nom).

Nous utilisons le même principe pour la création du champ email mais en spécifiant cette fois que le input est de type email, permettant ainsi au navigateur de faire les premières vérifications de saisie.

Puis nous créons un champ textarea destiné au message que le visiteur souhaite vous transmettre.

Chacun de ces champs dispose de l’attribut required, le rendant ainsi obligatoire. Cet attribut est, à mon point de vue, un élément de confort pour l’utilisateur qui aura connaissance des champs obligatoire par un petit message s’affichant sur la page en cas d’oubli, mais n’est absolument pas un élément de sécurité en termes de vérification de champ. C’est pourquoi ces champs auront une double validation (HTML et PHP) que nous verrons dans la suite.

Nous créons ensuite notre petit filet anti-spam. Le procédé est simple, mais les robots spammer ne sont pas très « intelligents ». Leur principe étant de tout remplir et cocher, ils validerons donc cette checkbox, se bloquant ainsi l’envoi du formulaire. Cette méthode ne garantie pas 100% d’arret, mais vous devriez tout de même avoir la paix.

Et pour finir, l’indispensable bouton de type submit qui nous permettra d’envoyer les informations au destinataires.

La fin de page contiendra nos derniers éléments PHP, de type unset, destinés à nettoyer les informations obsolètes (anciennes saisies après envoi, messages d’erreurs ou de confirmation).

Le code PHP de ce formulaire de contact

Nous passons maintenant à la partie traitement de ce formulaire. Nous allons y faire la vérification de nos champs, valider ou non l’envoi du formulaire et, le cas échéant, contruire l’email que vous recevrez.

<?php
session_start();//on démarre la session
// $errors = [];
  $errors = array(); // on crée une vérif de champs
if(!array_key_exists('name', $_POST) || $_POST['name'] == '') {// on verifie l'existence du champ et d'un contenu
  $errors ['name'] = "vous n'avez pas renseigné votre nom";
  }
if(!array_key_exists('email', $_POST) || $_POST['email'] == '' || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {// on verifie existence de la clé
  $errors ['mail'] = "vous n'avez pas renseigné votre email";
  }
if(!array_key_exists('message', $_POST) || $_POST['message'] == '') {
  $errors ['message'] = "vous n'avez pas renseigné votre message";
  }
if(array_key_exists('antispam', $_POST)) {// on place un petit filet anti robots spammers
  $errors ['antispam'] = "Vous êtes un robots spammer";
  }
//On check les infos transmises lors de la validation
  if(!empty($errors)){ // si erreur on renvoie vers la page précédente
  $_SESSION['errors'] = $errors;//on stocke les erreurs
  $_SESSION['inputs'] = $_POST;
  header('Location: contact.php');
  }else{
  $_SESSION['success'] = 1;
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  $headers .= 'FROM:' . htmlspecialchars($_POST['email']);
  $to = 'Votre_adresse_email_est_ici@mail.fr'; // Insérer votre adresse email ICI
  $subject = 'Message envoyé par ' . htmlspecialchars($_POST['name']) .' - <i>' . htmlspecialchars($_POST['email']) .'</i>';
  $message_content = '
  <table>
  <tr>
  <td><b>Emetteur du message:</b></td>
  </tr>
  <tr>
  <td>'. $subject . '</td>
  </tr>
  <tr>
  <td><b>Contenu du message:</b></td>
  </tr>
  <tr>
  <td>'. htmlspecialchars($_POST['message']) .'</td>
  </tr>
  </table>
  ';
mail($to, $subject, $message_content, $headers);
  header('Location: contact.php');
  }

Nous demarrons notre session pour les mêmes raisons que précédemment puis créons une variable $errors chargée d’enregistrer les différentes erreurs afin de les restituer si besoin sur notre page hébergeant le formulaire.

Nous allons ensuite mettre en place la vérification des champs obligatoires. La méthode est simple: nous allons vérifier si le champ existe existe (array_key_exists) et vérifié si ce dernier contient bien une valeur; le cas contraire, nous retournons un message d’erreur à renvoyer sur la page du formulaire si soumission de ce dernier il y a.

Nous vérifions que notre filtre anti-spam n’est pas coché, sinon nous retournons une erreur qui a pour effet de bloquer l’envoi du contenu du formulaire.

Si notre formulaire contient des erreurs, nous retournons les erreurs et récupérons les valeurs précédemment renseigné par le visiteur. Si tout est OK, nous retournons le message de confirmation (success) et construisons notre email.

Nous utilisons la fonction mail() pour laquelle certains éléments sont requis: la construction d’un header, un élément $to désignant l’adresse email à laquelle le message doit être envoyé (pensez à modifier ce champ pour y mettre votre adresse email), un élément $subject étant le sujet du message et le message en lui même.

Le message sera ici construit dans la variable $message_content que nous utiliserons pour construire notre structure de message et récupérer les informations. Dans cet exemple, j’utilise une simple structure de tableau (table), je « nettoie » le contenu du message avec un htmlspecialchars qui a pour but de prévenir toute injection de code. Bien que non obligatoire, je vous conseille vivement d’utiliser ce procédé.

Conclusion

Ce code est une base, vous pouvez ajouter des champs, modifier le style, les messages, désactiver des obligation de champs, etc… Ne pouvant répondre à tout les besoins avec un seul exemple, je pense vous apporter ici un point de départ pour votre formulaire. Dans tous les cas, je mettrais sous peu à votre disposition une version un peu bodybuildé de ce formulaire.

Commentaires Écrire un commentaire

  • Stéphanie le 30 décembre 2014 at 14 h 25 min Répondre

    Bonjour,

    Il y a quelque temps j’avais créé un formulaire via votre site DBM où on pouvait choisir tout un tas d’options pour avoir un formulaire assez complet. Je souhaiterais en réaliser un nouveau mais je ne le retrouve pas sur votre nouveau site. Pourriez-vous m’aider s’il vous plait.
    Cordialement

    Stéphanie

    • EpicaDesign administrateurle 30 décembre 2014 - 14 h 41 min Répondre

      Bonjour,

      DBM est suspendu. Je réfléchi à réintégré le générateur de formulaire sur ce site, mais avec une nouvelle version plus optimisée que la précédente (pour les utilisateurs et moi même) permettant de créer un formulaire plus léger et plus simple à intégrer. Dès que celle-ci sera disponible, je publierais un nouvel article/documentation pour son utilisation.
      Cordialement

      • Lolincolc le 1 janvier 2015 at 4 h 09 min

        Je me réjouis de cette nouvelle version et j’espère qu’elle sera disponible très prochainement. Ne serait-il pas possible de remettre l’ancienne version en ligne en attendant la nouvelle ?

        Merci par avance,
        Bonnes fêtes.

    • EpicaDesign administrateurle 1 janvier 2015 - 15 h 24 min Répondre

      Bonne fêtes à vous aussi!
      Pour des raisons techniques et de sécurité, l’ancienne version ne sera plus disponible en ligne. Je comprend bien l’utilité de l’ancien générateur pour un grand nombre d’entre vous, mais je ne peux le remettre à disposition actuellement.

      • Lolincolc le 1 janvier 2015 at 22 h 23 min

        Merci pour votre réponse rapide !
        J’attend dans ce cas avec impatience la mise en place d’un nouvel outil.

        Encore merci :)
        PS: Bravo pour le système de commentaire qui ne nécessite par d’inscription, c’est devenu rare !

  • Romain le 3 mars 2015 at 4 h 57 min Répondre

    Bonjour,
    j’ai repris votre code cependant je me retrouve avec un ‘, $_SESSION[‘errors’]); ?> au dessus du formulaire lorsque j’ouvre la page. Je ne vois pas comment régler cette erreur, si vous pouviez m’aiguiller.
    Cordialement

    • EpicaDesign administrateurle 3 mars 2015 - 9 h 08 min Répondre

      Bonjour,
      cela doit provenir d’une erreur de code. Vérifiez votre fichier pour voir si un caractère ne serait pas manquant ou ajouté sur la ligne correspondante.

  • thorgahl le 3 mars 2015 at 16 h 55 min Répondre

    bonjour, j’ai repris votre code du formulaire le problème je ne peux mettre de caractères accentués dans le texte du message je reçois en retour un message vide
    où pourrais être le problème
    Merci

    • EpicaDesign administrateurle 3 mars 2015 - 19 h 53 min Répondre

      Bonjour,
      surement un problème de déclaration de charset.
      testez sur les 2 versions
      meta http-equiv="Content-Type" content="text/html; charset=utf-8"
      ou
      meta http-equiv="Content-Type" content="text/plain; charset=iso-8859-1"

  • thorgahl le 4 mars 2015 at 11 h 02 min Répondre

    Merci pour cette aide rapide, mais j’ai testé les deux, pas concluant:
    meta http-equiv= »Content-Type » content= »text/html; charset=utf-8″ – – j’obtiens des grigris à la place des caractères accentués ou spéciaux

    meta http-equiv= »Content-Type » content= »text/plain; charset=iso-8859-1″ – – mail reçu avec les rubriques « nom » et « message » vides !

  • thorgahl le 4 mars 2015 at 11 h 11 min Répondre

    j’ai trouvé ! enfin j’espère en enlevant le « htmlspecialchars dans

    ‘. htmlspecialchars($_POST[‘message’]) .’ ligne 42 pour la rubrique « message »
    et
    $subject = ‘Message envoyé par ‘ . $_POST[‘name’] .’ – ‘ . htmlspecialchars($_POST[’email’]) .’‘; pour l’affichage du nom avec accentuation

    c’est peut-être pas très orthodoxe comme solution mais çà fonctionne

  • jb75020 le 16 mars 2015 at 11 h 53 min Répondre

    Bonjour,
    Désolé de vous posez une question qui va peut être vous paraître idiote mais si le formulaire de contact laisse visible la case à cocher de la checkbox antispam les visiteurs du site risque de cocher la case ou ne pas comprendre le libellé. Est-il nécessaire de laisser cette case à cocher visible ? Je ne comprends pas très bien…
    Merci de votre réponse.

  • EpicaDesign administrateurle 16 mars 2015 - 12 h 52 min Répondre

    Bonjour,

    :)
    Effectivement ces possibilité sont à prendre en compte. Absolument rien ne vous empêche de mettre ce champ en CSS display:none ou visibility:hidden, mais pour la démo il était plus adéquat que je laisse ce champ visible.

    • jb75020 le 16 mars 2015 at 15 h 03 min Répondre

      Merci de votre réponse. C’est plus clair pour moi.
      Bien cordialement.

  • PetitTesteur le 29 avril 2015 at 23 h 19 min Répondre

    Bonsoir, après avoir essayer votre solution, quand je remplace le mail à la bonne adresse je ne reçoit rien.
    Si vous pourriez m’aider merci.

    • EpicaDesign administrateurle 30 avril 2015 - 11 h 38 min Répondre

      Bonjour,
      Vous faites l’essai en local ou sur un serveur? En local, il est classique de ne pas recevoir d’email car Wamp ou Xamp (ou autres) ne sont pas configurés nativement pour l’envoi.

    • EnObliO le 21 juin 2015 at 15 h 15 min Répondre

      Bonjour, a tu réussi a résoudre ton problème ?
      Car je possède exactement la même chose que toi… Serveur hébergé sur Hostinger. Lorsque je remplace le mail par le mien, je rempli tout les champs du formulaire et je clique sur envoyer ! Sa affiche bien votre mail a été envoyé, mais je ne reçois rien…
      Tiens moi au courant. Merci

  • Sayo le 1 mai 2015 at 16 h 29 min Répondre

    Bonjour,
    Tout d’abord merci pour ce formulaire. Assez simple à comprendre pour un néophyte en php tel que moi, je rencontre un seul petit problème.
    J’ai bien le message « Votre message a bien été envoyé » mais rien dans la boite mail (ni dans spam). Je suis sur un serveur en ligne (hebergé par Hostinger).
    J’ai modifié les chemins mais je ne pense pas que le problème vienne de là. Dans les journaux d’e-mails disponible dans mon compte Hostinger je vois bien les mails envoyé, le « sendmail service » autorisant l’envoi par fichier php étant activé.

    Après relecture du code php et inspection de mon compte hostinger je vous avoue être un peu à court d’idée… J’ai essayé d’envoyer à plusieurs « types » d’adresses au cas où ça filtrerait sur certaines mais sans succès.

    • EpicaDesign administrateurle 2 mai 2015 - 14 h 45 min Répondre

      Bonjour,
      Je n’ai pas vraiment de réponse à votre problème … Si les emails ont bien été envoyés, c’est que le problème se trouve entre Hostinger et la boite email de réception, et ceci est en dehors de l’aide que je peux vous apporter.

  • secavi le 6 mai 2015 at 17 h 53 min Répondre

    Bonjour, tout est installé sauf que le serveur envoi cette erreur lorsque je renseigne mal le email: Fatal error: Call to undefined function: filter_var() in send_form.php on line 9.
    Si je supprime la ligne 9 tout se passe bien, sauf sur les tablettes, l’erreur est encore présente si on renseigne mal le mail.
    Merci d’avance

  • Marie le 9 mai 2015 at 1 h 16 min Répondre

    Bonjour, je m’excuse si la question est bête, mais je débute tout juste avec le php et je ne comprend pas comment tester votre démo de formulaire ou l’inclure dans mon site.
    Si j’enregistre les deux fichiers dont vous donnez le code en .php, je ne peux pas les ouvrir avec chrome et si j’enregistre le premier où il y a la partie html du formulaire en .html je me retrouve avec la version de démo mais avec les cadres d’erreurs et de validation de mail en même temps avec du code php à l’intérieur, ainsi que dans les cases à remplir du formulaire. Pourriez-vous me dire quelle est mon erreur?
    J’ai aussi remarqué que vous ne refermiez pas vos balises de php, est-ce normal?

    Merci beaucoup,
    Cordialement,
    Marie

    • EpicaDesign administrateurle 9 mai 2015 - 8 h 27 min Répondre

      Bonjour,
      Vous ne pouvez pas ouvrir les fichiers PHP car les navigateurs ne l’interprète pas s’il est ouvert en dehors d’un serveur (c’est lui qui interprète le php). Utiliser Wamp ou Xamp pour avoir un affichage fonctionnel du formulaire.
      Modifier ces fichiers vers un .html fait que le PHP n’est plus interprété comme tel et est donc renvoyé comme du texte à l’affichage (notamment dans les input).
      il n’est pas obligatoire de refermer une balise PHP s’il n’y a pas de code à suivre.
      Cordialement,

      • Marie le 9 mai 2015 at 13 h 53 min

        Bonjour!
        Merci beaucoup pour votre réponse rapide, en effet c’est beaucoup mieux avec Mamp! :)
        Et pour ce qui est des balises je ne le savais pas, merci c’est bon à savoir.
        Bonne continuation et merci beaucoup pour ce tuto!

  • pensae le 10 mai 2015 at 11 h 14 min Répondre

    Bonjour,
    J’ai après l’envoie du formulaire je suis redirigé vers la page send-form.php qui s’affiche vide.

    Sinon tout marche

    • EpicaDesign administrateurle 10 mai 2015 - 11 h 29 min Répondre

      Bonjour,

      Dans le fichier send-form.php, vérifier la bonne correspondance de votre page hébergeant le formulaire avec cette ligne, en fin de script, header(‘Location: contact.php’)

  • alexwebfr le 20 mai 2015 at 16 h 12 min Répondre

    Pour envoyer un email il faut le port de la fai ( hotmail , yahoo , free ) !

    • EpicaDesign administrateurle 20 mai 2015 - 20 h 33 min Répondre

      Bonjour,
      Si c’est une affirmation, je répondrais que Non.
      Si c’est une question, je répondrais non.
      Par contre je vous retourne une question: Comment connaitre la FAI d’un hébergeur (1&1, OVH, …) ?
      Cordialement,

  • Sébastien le 21 mai 2015 at 15 h 05 min Répondre

    Bonjour,
    et merci pour ce formulaire simple et efficace ceci dit j’aimerais faire un rajout (liste déroulante) pouvez vous me donnez quelques conseils pour m’orientez sur la bonne voie ?

    <OPTION value=" »>opt1
    <OPTION value=" »>opt2
    <OPTION value=" »>opt3

    il y a surement des erreurs mais le formulaire m’indique de sélectionner une option or c’est bien sélectionner..

    Séb.

  • EpicaDesign administrateurle 21 mai 2015 - 17 h 24 min Répondre

    Bonjour,
    Je vous laisse consulter la version upgrade de ce formulaire qui contient une liste déroulante.
    http://epicadesign.fr/creer-un-formulaire-de-contact-avec-html5-et-php-version-upgrade/
    Vous y trouverez vos réponses

  • Brawcks le 26 mai 2015 at 23 h 29 min Répondre

    Coucou !

    Juste une petite question qui me tauraude, j’ai modifié certaines valeurs du formulaire (en fait simplement les noms de fichiers) rien de bien compliqué (puisque j’ai déjà des fichiers à ces noms ^^).
    Je travaille pour l’instant en local, et je voulais savoir si cla avait un impact sur l’envoi du mail, malgré que je sois connecté à internet en même temps que le local.

    Et du coup si c’est pour cela que je ne reçois pas le mail ^^

    Encore débutant !

    Merci d’avance :)

    • EpicaDesign administrateurle 27 mai 2015 - 23 h 01 min Répondre

      Bonjour,
      le fait de renommer les fichiers, si la modification est bien reportée dans le code, n’a aucune incidence. Le fait de ne pas recevoir les mails vient plutôt du développement en local car cet étape ne doit pas être paramétrée sur votre système (Wamp, Xamp, ou autre).
      J’ai fait un article pour palier à ceci, voici le lien:
      http://epicadesign.fr/mailcatcher-envoyer-des-emails-en-local/
      cordialement,

  • gael_libat le 30 mai 2015 at 10 h 48 min Répondre

    Bonjour, votre formulaire est super, je l’ai réalisé, mais je ne reçoit pas les mails (j’ai changer $to = ‘Votre_adresse_email_est_ici@mail.fr’; avec mon email)

  • EpicaDesign administrateurle 30 mai 2015 - 17 h 47 min Répondre

    Bonjour,
    Vous avez effectuez le changement au bon endroit. Mais si vous êtes en développement local avec une plateforme de type Wamp, à moins que vous ayez paramétré cette dernière pour l’envoi d’email, c’est normal. Une fois en ligne, le formulaire fonctionnera. En alternative vous pouvez utiliser une solution que j’ai expliqué dans ce tuto: http://epicadesign.fr/mailcatcher-envoyer-des-emails-en-local/

  • denyro le 21 juin 2015 at 15 h 46 min Répondre

    Très beau tuto.
    Je ne peux que vous féliciter.

    Bonne continuation !

  • joreveur54 le 22 juin 2015 at 20 h 22 min Répondre

    Bonjour
    tout à l’air de fonctionner, bravo !
    Est-ce qu’on peut prendre tout ou partie du code pour mettre sur un site ?
    Sinon quand je fais des essais en mettant le message sur plusieurs lignes, le résultat dans l’email est que tout est sur la même ligne..
    merci de votre aide
    cordialement

    • EpicaDesign administrateurle 22 juin 2015 - 21 h 23 min Répondre

      Bonjour, vous pouvez reprendre le code pour partager. Il serait appréciable que vous en citiez la source mais je ne vous oblige pas. Je vais regarder pour les retour à la ligne et vous informe. A bientôt.

  • IVE le 22 juillet 2015 at 16 h 43 min Répondre

    Félicitation pour ce tuto
    ça marche très bien

    vraiment merci!

    • EpicaDesign administrateurle 22 juillet 2015 - 17 h 59 min Répondre

      Merci :)

  • Patserra le 7 août 2015 at 10 h 20 min Répondre

    Bonjour,

    Bien qu’habitué aux anciens formulaires, j’ai des problèmes avec le fichier send_form.php
    Pouvez-vous me dire où je dois placer le script global
    – en head
    – ou en body
    ou partiellement ,
    D’avance, merci
    Bien cordialement.

  • Patserra le 7 août 2015 at 10 h 21 min Répondre

    Bonjour,

    Quelques soucis avec le fichier send_contact.php
    Le script est-il à mettre en head ou en body ou autre répartition ?
    Merci
    Bien cordialement

  • Patserra le 7 août 2015 at 10 h 47 min Répondre

    Re

    J’ai oublié de dire que je travaille avec Dreamweaver CS6
    Bien cordialement

    • EpicaDesign administrateurle 7 août 2015 - 12 h 35 min Répondre

      Bonjour,

      le fichier send_form n’est pas à intégrer dans le formulaire, il est appelé via l’attribut action de la balise form (ligne 37 du code 1), il vous faut juste vérifier l’exactitude du chemin de fichier.
      idem pour contact.php, dont le chemin écrit dans send_form.php doit renvoyer vers le fichier contact.php

  • Pat le 8 août 2015 at 9 h 45 min Répondre

    Bonjour,
    désolé, mais cela ne fonctionne pas. que je sois en ligne ou en interne, lorsque je fais un aperçu sous mon navigateur, il m’est demandé de télécharger le formulaire
    Lorsque je suis sur Dreamweaver, seul le code source apparaît en aperçu ?
    J’ai tout relu, fait copier coller en attendant d’améliorer, mais cela ne fonctionne pas.
    Pouvez-vous me guider.
    Merci
    Bien cordialement.

  • dingo77 le 27 août 2015 at 17 h 49 min Répondre

    bonjour
    super tuto j ai un problème avec filter_var voila mon message d erreur :Fatal error: Call to undefined function filter_var() in /mnt/108/sdb/9/e/*******************/post_contact.php on line 9.
    j ai créer un fichue .htaccess a la racine de mon site avec php 1 dedans
    je suis héberge chez free
    merci davance de votre aide

  • FRED BRIFF le 31 août 2015 at 13 h 16 min Répondre

    Bonjour,

    J essaye d’intégrer ce formulaire dans un Template HTML (yebo).
    Comment dois je l’intégré dans l’index.html et quel sera arborescence des fichiers ?
    Merci de votre aide
    Fred

  • Alfred le 17 septembre 2015 at 9 h 37 min Répondre

    Bonjour,
    Outils vraiment très sympa ! Merci.
    Petite question, je ne parviens pas à changer la langue « fr » du message « veuillez complétez ce champs ».
    J’aimerais que le message soit en anglais.
    Encore merci,
    A

    • EpicaDesign administrateurle 17 septembre 2015 - 9 h 51 min Répondre

      Bonjour,
      la modification des textes d’erreur se fait dans le fichier de traitement du formulaire.
      rechercher les $errors [‘…’] = …
      Le message d’erreur affiché est inscrit, à vous de le modifier comme vous le souhaitez

      • Jérômé le 4 octobre 2015 at 17 h 26 min

        Bonjour et merci pour votre tuto !
        Comme Alfred, j’aimerais changer le texte « Veuillez compléter ce champ. » qui apparaît lorsque l’on clique sur « envoyer » sans avoir rempli le formulaire mais aussi lorsque l’on place le curseur au dessus d’un des champs du formulaire.
        J’ai beau changer les textes sur les lignes $errors [‘…’] = … mais rien n’y fait.
        Si vous avez des idées, je suis tout ouïe!
        Merci et à bientôt! =)
        Jérôme

      • EpicaDesign administrateurle 4 octobre 2015 - 18 h 53 min

        Bonjour,
        le message « Veuillez compléter ce champ. » n’est pas un code écrit, celui est généré par votre navigateur web qui réagit à l’attribut required du champ de formulaire. Si vous voulez créer des messages personnalisés, à l’utilisation, il faudra supprimer cet attribut et utiliser du javascript pour une pré-validation avant celle du code php ou, pour des message au survol, utiliser un onmouseover.

  • Ice le 3 octobre 2015 at 13 h 25 min Répondre

    Bonjour, j’aimerais que la personne qui coche la case « antispam » soit autorisé à envoyer le message, je ne sais pas comment m’y prendre :
    if(array_key_exists(‘antispam’, $_POST)) {// on place un petit filet anti robots spammers
    $errors [‘antispam’] = « Veuillez accepter nos CGV »;

    J’aimerais : « si le visiteur n’a pas cocher la case alors on lui affiche : « Veuillez accepter nos CGV » »
    Est ce possible ?
    Merci d’avance et bonne journée.

    • EpicaDesign administrateurle 3 octobre 2015 - 19 h 15 min Répondre

      Bonjour,
      Actuellement,un message et un blocage sont retournés si la case est cochée. Pour arriver à votre fonction, il vous suffit d’inverser la vérification:

      if(!array_key_exists(‘antispam’, $_POST)) { $errors [‘antispam’] = « Veuillez accepter nos CGV »;}

      Notez l’ajout d’un point d’exclamation.

      if(!array ...

      Qui, en clair, veut dire: si la case anti-spam n’est pas cochée, retourner une erreur (blocage de l’envoi) et retourner ce message ( » bla bla bla »).

  • Ice le 4 octobre 2015 at 13 h 46 min Répondre

    Merci bien :)

  • amandine le 8 octobre 2015 at 15 h 29 min Répondre

    Bonjour,
    très bon tuto mais un petit souci
    J’envoie le message et je suis bien transférer vers send_form.php mais le message « votre email a bien été transmis » ne s’affiche pas .
    J’ai bien vérifié sur ma boite mail je reçois bien le mail venant du formulaire.
    Pouvez-vous m’aider ?
    Merci :)

    • EpicaDesign administrateurle 9 octobre 2015 - 17 h 36 min Répondre

      Bonjour,
      désolé pour la modération tardive.
      Lors de l’envoi, vous ne devez pas être redirigé vers send_form.php , ce fichier sert au fonctionnement du formulaire mais uniquement en arrière plan, tout se déroule sur le fichier contact.php dont l’affichage du message de confirmation.
      Avez vous une url où votre test est accessible?
      Si les fichiers ont été renommé, avez vous pensez à répercuter cette modification dans send_form.php pour modifier ces lignes:

      header('Location: contact.php');
  • Jean Noël le 14 octobre 2015 at 18 h 59 min Répondre

    Bonjour,
    Merci vraiment pour ce formulaire !

    Le formulaire semble fonctionné chez moi mais je rencontre un problème: Les codes php de value= » apparaîssent dans les champs du formulaire comme si ces codes php ne sont pas pris en charge.

    Pouvez-vous m’aider ?

    Merci.

    • EpicaDesign administrateurle 15 octobre 2015 - 8 h 12 min Répondre

      Bonjour,
      plusieurs possibilités:
      votre fichier n’a pas une extension .php
      vous ouvrez le fichier en dehors d’une application gérant le php (ex: wamp)
      une erreur de syntaxe dans le code

      si vous avez un exemple visible en ligne je pourrais surement vous apporter une solution.

  • Mathieu le 15 octobre 2015 at 9 h 01 min Répondre

    Bonjour, j’ai utilisé votre tuto pour envoyer un mail. J’ai modifié l’adresse mail mais ca ne marche pas. Je suis en développement local sous ubuntu avec apache. Pouvez-vous m’aider ?

    • EpicaDesign administrateurle 15 octobre 2015 - 9 h 47 min Répondre

      Bonjour,
      Les essais en local ne gère pas l’envoi d’email. Si vous voulez tester le bon fonctionnement de réception d’email, je vous conseille de compléter votre installation avec Mailcatcher (vous trouverez un article sur ce blog).

  • William le 30 octobre 2015 at 15 h 50 min Répondre

    Bonjour,
    merci pour ce super tuto,
    cependant j’ai quelques petits problèmes :
    J’ai personnalisé le formulaire de fond en comble et il semblait marcher mais lorsque j’ai rempli toute mes cases il m’est renvoyé je n’ai pas rempli certaines de celles ci. comment faire ?

    Autre point, je voudrais savoir si il est possible d’integrer ce formulaire en php a un site internet en html, je me doute qu’il doit y avoir une balise ou commande pour l’integrer mais je ne la connais pas encore.

    Merci d’avance :)

  • Gabriel le 6 novembre 2015 at 19 h 16 min Répondre

    Bonjour, si jamais je veux ajouter le Captcha ? Comment pourrais-je faire ? Merci de votre réponse !

  • AngryKiller le 21 novembre 2015 at 19 h 06 min Répondre

    Bon tutoriel, malheureusement l’email est envoyé dans le dossier indésirable et je voudrais savoir comment résoudre ce problème très embêtant. c’est le 2ème code que je trouve et qui fait sa. J’utilise un email gMail.

    • EpicaDesign administrateurle 21 novembre 2015 - 20 h 11 min Répondre

      Bonjour,
      ce type de filtre (« indesirable » ou « approuvé ») dépend du client mail, il n’y a pas de solution à apporter par le code de création du formulaire.

  • Mick le 25 novembre 2015 at 17 h 42 min Répondre

    Bonjour,
    Et merci pour ce tuto que je n’ai pas eu encore l’occasion d’essayer (mais ça ne va pas tarder :) ).
    Comme vous je suis autodidacte et mes connaissances en php sont encore très limitées. Un petit coup de pouce serait sympa.
    Je cherche à faire un formulaire dans lequel les erreurs s’affiche au dessus de chaque champ (à la droite des « label ») et comprenant un champ téléphone en plus (composé de 10 chiffres donc).
    Pourriez-vous m’aider?
    Merci

  • patrick le 16 janvier 2016 at 22 h 12 min Répondre

    Bonjour,

    Comment puis intégrer ma page html avec ma barre de navigation dans contact.php ?

    Cordialement.

    • EpicaDesign administrateurle 17 janvier 2016 - 8 h 48 min Répondre

      Bonjour,
      Le formulaire ne nécessite que les éléments compris entre les balises < ? php et ?> ainsi que l’ensemble du code situé en les commentaires < ! -- CONTENT -- >. Il vous suffit de copier l’ensemble de ces éléments dans votre page qui doit avoir impérativement l’extension.php et non .html

  • olivier01234 le 2 mars 2016 at 20 h 12 min Répondre

    Bonjour,
    Du coup, comment faire pour que cela fonctionne en vrai, sur mon serveur ?
    Merci
    « INFOS: Ce formulaire est une démo, le fonctionnement est complet mais le message n’arrivera nul part, les spammer peuvent passer leur chemin! »

  • olivier01234 le 2 mars 2016 at 20 h 27 min Répondre

    Et qui pourrait me guider pour mettre un captcha de ce style. https://www.google.com/recaptcha/intro/index.html
    J’ai le code pour le captcha mais je ne sais pas comment faire pour l’intégrer correctement.
    J’arrive à l’afficher mais il ne bloque pas le bouton « envoyer».
    Donc comment faire ?
    Merci

  • Jipou le 4 mars 2016 at 9 h 17 min Répondre

    Bonjour,
    merci pour ce code, qui semble très bien fait.
    Tout fonctionne, sauf que lorsque l’on ne remplit pas un champ, les alertes ne s’affichent pas (comme « vous n’avez pas renseigné votre nom », « vous n’avez pas renseigné votre email ». J’ai juste « Veuillez compléter ce champ » dans Firefox et « Champ requis » dans IE. Mais aucune alerte personnalisée.
    Une idée du problème ?
    Merci par avance.

  • bil le 28 mars 2016 at 12 h 10 min Répondre

    merci pour tout
    Tout fonctionne a merveille.Je me suis permis de récupérer le fichier css pour l’héberger sur mon site.J’espère que cela ne pose pas de problème.

    • EpicaDesign administrateurle 28 mars 2016 - 14 h 17 min Répondre

      Bonjour,
      Aucun problème, vous pouvez utiliser le CSS

  • Anne le 25 avril 2016 at 9 h 56 min Répondre

    Merci pour ce formulaire.
    Si vous avez une solution pour ne pas recevoir l’email dans mes spams, je suis preneuse !

    • EpicaDesign administrateurle 25 avril 2016 - 12 h 12 min Répondre

      Bonjour,
      Ceci ne dépend pas du formulaire mais de votre client mail qui détermine l’adresse d’expédition comme étant potentiellement un spam.

  • Thomas le 25 avril 2016 at 20 h 27 min Répondre

    Bonjour,
    Tout d’abord merci pour ce formulaire.
    Le formulaire marche parfaitement cependant je ne reçois pas le mail, j’ai bien le message qui justifie l’envoie mais je ne reçois rien.
    Je suis sur wamp serveur donc en réseau local .
    Pouvez vous m’aider ?
    Merci

  • Laurent le 29 avril 2016 at 12 h 39 min Répondre

    Bonjour,
    merci pour ce formulaire, j’ai pu l’adapter sans souci au site web dont j’ai la charge, et tout marche plutôt bien. J’ai juste un petit problème concernant la longueur des messages, si le message est trop long alors il n’est pas transmit, et lors de la réception sur ma messagerie, celui-ci n’apparait pas.
    Sauriez vous comment rectifier ce problème ?

    • xophe le 19 septembre 2016 at 14 h 32 min Répondre

      Bonjour,
      Ce n’est pas plutôt à cause des accents et autres caractères spéciaux ? Il faut que ce soit en UTF8 :

      A tout hasard…

  • Dagiwok le 29 avril 2016 at 17 h 42 min Répondre

    Bonjour,

    Je viens de suivre ce « tutoriel » à la lettre mais je me retrouve avec le code php : value = «  » dans le lieu destiné à remplir le formulaire.

    Comment faire ?
    Merci d’avance,

    Cordialement

  • drissa kone le 29 mai 2016 at 13 h 14 min Répondre

    bonjour la famille svp je suis nouveau en web et j’aimerai ajouté un formulaire qui enverrai un email dans ma boite lorsque les personnes postulerons

  • Rémy le 21 novembre 2016 at 23 h 12 min Répondre

    Bonjour
    J’ai déjà laissé un commentaire pour dire que les fichiers xls, doc, txt … étaient refusés en pièces jountes.
    Je n’ai pas de nouvelle.

    • EpicaDesign administrateurle 22 novembre 2016 - 10 h 43 min Répondre

      Bonjour,
      je vous ai répondu, mais votre message est sur un autre article ;)

  • corail le 13 janvier 2017 at 17 h 38 min Répondre

    bonsoir
    j’ai repris votre code mais quand je lance contact.php
    mon navigateur m’affiche bien le formulaire mais avec ce message d’erreur en haut du formulaire :

    Warning: session_start() [function.session-start]: open(/mnt/153/sdb/b/f/chana13ma/sessions/sess_b6dc09b40611afedf5d102da53782a33, O_RDWR) failed: No such file or directory (2) in /mnt/153/sdb/b/f/coralie/boot/contact.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /mnt/153/sdb/b/f/coralie/boot/contact.php:2) in /mnt/153/sdb/b/f/coralie/boot/contact.php on line 2

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /mnt/153/sdb/b/f/coralie/boot/contact.php:2) in /mnt/153/sdb/b/f/coralie/boot/contact.php on line 2

    et en bas du formulaire :

    Warning: Unknown(): open(/mnt/153/sdb/b/f/chana13ma/sessions/sess_b6dc09b40611afedf5d102da53782a33, O_RDWR) failed: No such file or directory (2) in Unknown on line 0

    Warning: Unknown(): Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/mnt/153/sdb/b/f/coralie/sessions) in Unknown on line 0

  • StanleyLab le 19 janvier 2017 at 12 h 21 min Répondre

    Propre. Rien à dire, tout marche à la perfection. Ungrand merci

  • Pierre le 28 janvier 2017 at 16 h 46 min Répondre

    Bonjour,
    Moi ça fonctionne sauf que quand je reçois les mails tous les accents et les ç sont transformés en caractères bizarres et illisibles???

  • Antonin le 3 avril 2017 at 19 h 35 min Répondre

    Bonjour, dans mon textarea, j’ai de base plusieurs caractère d’espace, comment les enlever?

  • pianola le 5 avril 2017 at 8 h 18 min Répondre

    J’utilise votre formulaire depuis plusieurs mois, il est parfait et fonctionne très bien! Merci beaucoup!

  • Jean-Noël le 21 juin 2017 at 17 h 42 min Répondre

    Bonjour,

    J’ai utilisé votre formulaire sur mon site hébergé chez OVH mais les codes php: ; et apparaissent dans les champs <>, <> et <>

    Comment faire ?

  • momo le 3 juillet 2017 at 15 h 51 min Répondre

    Bonjour

    Je vous félicite pour ce tuto
    vraiment très utile et clair

    merci et bonne continuation

  • maxime le 8 août 2017 at 15 h 04 min Répondre

    Bonjour,

    merci pour votre tuto, très explicatif.

    Je l’ai mis en place sur mon site (je travaille en local pour l’instant) et lorsque j’effectue l’envoie du formulaire j’ai l’erreur suivante :

    Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 12288 bytes) in /Users/foutch/Sites/MaximeBlache/formulaire.php on line 49

    La ligne 49 en l’occurrence c’est la fin de mon script formulaire.php

    Avez-vous une idée d’où cela peut-il venir ??


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.

*