Télécharger
Noter:

Ajouté le 05/02/2015
Visionné 15228 fois
4.5/5

Formulaire de contact en PHP

Description

Mise à jour le 03/03/2020

Bug solutionné:

Les accents dans le sujet sont pris en compte grâce à =?UTF-8?B?titre?= (Doc RFC 1342)
En résumé:


=?charset?encodeur?titre-encodé?=

=?
au début

charset
UTF-8, vous pouvez cependant utiliser un autre, tant qu'il est valide

?
séparateur

encodeur
Q ou B ("L'encodage "Q" est recommandé pour utiliser avec les jeux de caractères latins et l'encodage "B" pour tous les autres")

?
séparateur

titre-encodé
le titre encodé avec base64_encode() de PHP

?=
à la fin



Une version avec pièce jointe est disponible: accéder à l'article



Un formulaire de contact est une chose utile pour votre site internet, ce petit script vous permettra de recevoir les mails de vos visiteurs.

Reste à vous de le styliser comme vous le souhaitez grâce à HTML et CSS.

Le script est codé en UTF-8.

/* Page: contact.php */
$VotreAdresseMail="votreemail@votresite.tld";//mettez ici votre adresse mail
if(isset($_POST['envoyer'])) { // si le bouton "Envoyer" est appuyé
//on vérifie que le champ mail est correctement rempli
if(empty($_POST['mail'])) {
echo "Le champ mail est vide";
} else {
//on vérifie que l'adresse est correcte
if(!preg_match("#^[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?@[a-z0-9_-]+((\.[a-z0-9_-]+){1,})?\.[a-z]{2,}$#i",$_POST['mail'])){
echo "L'adresse mail entrée est incorrecte";
}else{
//on vérifie que le champ sujet est correctement rempli
if(empty($_POST['sujet'])) {
echo "Le champ sujet est vide";
}else{
//on vérifie que le champ message n'est pas vide
if(empty($_POST['message'])) {
echo "Le champ message est vide";
}else{
//tout est correctement renseigné, on envoi le mail
//on renseigne les entêtes de la fonction mail de PHP
$Entetes = "MIME-Version: 1.0\r\n";
$Entetes .= "Content-type: text/html; charset=UTF-8\r\n";
$Entetes .= "From: Nom de votre site <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire
$Entetes .= "Reply-To: Nom de votre site <".$_POST['mail'].">\r\n";
//on prépare les champs:
$Mail=$_POST['mail'];
$Sujet='=?UTF-8?B?'.base64_encode($_POST['sujet']).'?=';//Cet encodage (base64_encode) est fait pour permettre aux informations binaires d'être manipulées par les systèmes qui ne gèrent pas correctement les 8 bits (=?UTF-8?B? est une norme afin de transmettre correctement les caractères de la chaine)
$Message=htmlentities($_POST['message'],ENT_QUOTES,"UTF-8");//htmlentities() converti tous les accents en entités HTML, ENT_QUOTES Convertit en + les guillemets doubles et les guillemets simples, en entités HTML
//en fin, on envoi le mail
if(mail($VotreAdresseMail,$Sujet,nl2br($Message),$Entetes)){//la fonction nl2br permet de conserver les sauts de ligne et la fonction base64_encode de conserver les accents dans le titre
echo "Le mail à été envoyé avec succès!";
} else {
echo "Une erreur est survenue, le mail n'a pas été envoyé";
}
}
}
}
}
}

<!--
Les balises <form> sert à dire que c'est un formulaire
on lui demande de faire fonctionner la page contact.php
une fois le bouton "Envoyer" cliqué on lui dit également que c'est un formulaire de type "POST"
Les balises <input> sont les champs de formulaire
type="text" sera du texte
la balise <textarea> sert à dire qu'il faut afficher un champ de texte rectangulaire (les sauts de ligne sont possibles) au contraire des champ input text
Vous remarquerez que l'ont ne renseigne pas le type (type="") pour la balise textarea
cols="nombre de colone horizontale" rows="nombre de colone verticales"
type="submit" sera un bouton pour valider le formulaire
name="nom de l'input" sert à le reconnaitre une fois le bouton submit cliqué, pour le code PHP contact.php
-->
<form action="contact.php" method="post">
Mail: <input type="text" name="mail" value="" />
<br />
Sujet: <input type="text" name="sujet" value="" />
<br />
Message: <textarea name="message" cols="40" rows="20"></textarea>
<br />
<input type="submit" name="envoyer" value="Envoyer" />
</form>

Commentaires

turkish78 le 07 Janvier 2016 à 19:06

Génial!!! tout fonctionne parfaitement!!!

Merci beaucoup!!

abdou le 10 Juin 2017 à 17:43

salut!! merci pour le tuto

santini le 17 Janvier 2019 à 21:14

Super script ! merci beaucoup, mais j'ai une question svp
Après avoir valider l'envoi du formulaire comment faire pour que l'utilisateur soit directement diriger sur une page de type "merci.html"

Cordialement

admin le 18 Janvier 2019 à 18:43

Bonjour, merci beaucoup!

Pour rediriger le membre il vous faut faire le traitement du formulaire avant n'importe quel code HTML, sinon vous allez avoir une erreur, ensuite, si tout est correct, rediriger le membre avec

header("Location: ./merci.html");

santini le 18 Janvier 2019 à 19:13

Bonjour,
Merci, mais je ne suis pas doué ou est ce que je doit placer ce code dans le formulaire ?
Merci

admin le 21 Janvier 2019 à 10:07

Avant n'importe quel code HTML, sinon vous allez avoir une erreur. IL vous faut le mettre quand le traitement est OK, cela reste logique.

arnaudvh62 le 16 Juillet 2019 à 15:23

Je viens de tomber sur ton script et je trouve tes explications très pédagogique. Je le testerai prochainement p.
Personnellement, j'en ai fais un récemment, il semblait fonctionner sauf que dès qu'il y a + 1 ligne et caractères sp"ciaux ou accentués, le message arrive mais vide!

C'est complexe d'ajouter ce type de Capcha?

Merci

admin le 16 Juillet 2019 à 15:34

Merci

Concernant le captcha, j'ai pas compris.

mounk le 15 Octobre 2019 à 20:10

Merci beaucoup pour le script.
Cépendant, moi j'ai un souci, je l'ai essayé mais je ne reçois pas de mail.
1- j'aimerai savoir au niveau de la variable $VotreAdresseMail, faudrait-il que je mette mon adresse qui est censée receptionner les mails?
2- Au niveau des $Entetes .= "From: Nom de votre site <", dois-je remplacé cela par l'adresse complète de mon site ou quoi?
voici mon site: centremultimedia-emk.ml

admin le 16 Octobre 2019 à 09:50

Bonjour,

il vous faut évidement mettre votre adresse email pour recevoir les mails.

Concernant le "From" c'est expliqué en commentaire:

$Entetes .= "From: Nom de votre site <".$_POST['mail'].">\r\n";//de préférence une adresse avec le même domaine de là où, vous utilisez ce code, cela permet un envoie quasi certain jusqu'au destinataire

Ajouter un commentaire

Pseudo/Nom *
Email *
Message *
La balise [code]Votre code...[/code] peut être utilisée

Captcha * memo1memo2

Les champs marqués d'un * sont obligatoires.

Retour à la liste des scripts

Flag Counter