samedi 16 Mai 2009

Faire une page contact en PHP

PHPSi vous avez un site, vous voulez certainement permettre aux visiteurs de vous contacter. Cela sans pour autant dévoiler votre adresse électronique.

En effet elle risquerait de tomber facilement dans les mains des robots qui parcourent le web pour constituer des listes. Ensuite votre boite serait rempli de pourriels!

La solution est une page de contact, où les internautes peuvent vous envoyer un message sans voir votre adresse directement.

~

Comment envoyer un courriel en PHP

Il faut faire un formulaire tout simple avec un champ pour l'adresse de l'internaute, pour pouvoir lui répondre, et une zone de texte. Disons que nous avons une page déjà "habillée" avec le thème de votre site contact.php, le formulaire seul est formé par ce code HTML:

<form method="post" action="contact.php">
<p>
 <label for="courriel">Votre adresse électronique:</label>
 <input type="text" id="courriel" name="courriel" />
 <br /><label for="message">Votre message:</label>
 <textarea id="message" name="message"></textarea>
 <br /><button type="submit">Envoyer ce message</button>
</p>
</form>

~

Ensuite, il faut traiter le résultat en PHP. Il vaut mieux placer le code PHP avant le formulaire, le message indiquant l'envoi du message sera plus lisible. On peut même ne plus afficher le formulaire si le message est bien parti, mais allons au plus simple. ;-)

La fonction mail demande 3 ou 4 paramètres:

  • le destinataire du courriel,
  • le sujet,
  • le message,
  • et optionnellement des en-têtes.

Ici, je vais indiquer des en-têtes avec l'adresse de votre visiteur. Cela vous permettra de lui répondre en utilisant simplement la fonction "répondre" de votre courrielleur. Et également un codage UTF-8, cela dépend de votre site, mais UTF-8 est recommandé.

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
  if (empty ($_POST['courriel']) || empty ($_POST['message']))
    echo '<p>Erreur, vous devez taper votre adresse et un message!</p>';
  else
    if (@mail ('moi@example.net', 'Contact depuis votre site', $_POST['message'],
    "From: $_POST[courriel]\nContent-Type: text/plain; charset=utf-8"))
      echo '<p>Votre message a bien été envoyé. Merci.</p>';
    else
      echo '<p>Votre message ne peut être envoyé. Réessayez plus tard SVP.</p>';
}
?>

En résumé, si les champs ne sont pas vides, on envoie le courriel. S'il part, tout va bien, sinon PHP ne donne pas vraiment d'indication sur la cause de l'erreur. :-| Le destinataire étant vous-même, l'adresse est surement correcte. moi@example.net est bien sûr à remplacer par votre propre adresse! Mais celle-ci reste totalement masquée à l'internaute puisque c'est le serveur qui vous écrit et pas directement la personne.

Note: si votre serveur est configuré avec magic_quotes_gpc activé, PHP va rajouter des antislashes \ devant tous les apostrophes '. Il faudra utiliser la fonction stripslashes avant l'envoi. ;-)

~

Vous pouvez indiquer en commentaire si une suite à cet article vous intéresserait. Par exemple

  • faire un captcha texte ou image pour éviter que les robots (encore eux) ne puissent valider ce formulaire,
  • comment vérifier la validité de l'adresse électronique en Javascript et/ou PHP...


café Cet article vous a aidé? 
Offrez-moi un café!
Agrégateur informatique

4 réponses à “Faire une page contact en PHP”

  1. 1
    Pimeko (tutorialpod.u7n.org) a dit:

    Merci :)

  2. 2
    Créer un site (creer-un-site.fr) a dit:

    Bonjour,

    Je pense qu'un petit tutoriel plus complet ne ferait vraiment pas de mal :). Perso. j'ajouterais le capcha (texte ou image), vérification de la syntaxe de l'email, ré affichage des données si l'envoie plante ou si erreur, masquage du formulaire après envoie avec impossibilité de revenir en arrière pour limiter les envoies à répétition.J'ajouterais également un champ "objet du message" et je placerais les messages d'erreurs dans des variables pour les afficher au dessus du champ correspondant :).

    Cdt

  3. 3
    David (azur-dev.kizone.net) a dit:

    Bien sûr, mais je gagne ma vie en faisant des sites Web. Si j'explique tout gratuitement sur mon site, je n'aurais plus de clients. :D

  4. 4
    Créer un site (creer-un-site.fr) a dit:

    Effectivement vu sous cet angle ^^. D'un autre côté, ce qu'ils ne trouvent pas ici, ils iront le chercher ailleurs ...;)

Laisser un commentaire

Azur Dev