vendredi , 24 février 2017

Créer un formulaire de contact en php

Nous allons d’abord créer un formulaire en HTML puis nous allons créer une page PHP pour le traitement et l’export des données du formulaire. Je l’ai créé lorsque je souhaitais faire un formulaire sans utiliser ma base de données pour éviter de me faire pirater celle-ci par une petite injection. Le meilleur moyen était donc de créer un formulaire n’utilisant pas ma base de données mais la fonction mail de PHP.

Le principe est simple un utilisateur rempli le formulaire, une page traite les champs du formulaire et envoie les réponses directement par mail au destinataire de mon choix.

ATTENTION : Pour ceux qui souhaite le tester en local vérifier que votre serveur Web est paramétré,. Lorsque c’est chez un hébergeur en général c’est déjà fait (sinon faites-le ou demandez-le). Allez en fin de page pour voir le paramétrage.

Créons le formulaire en HTML. Voici une exemple de code pour un formulaire d’entreprise (la classe), à inclure dans une page HTML :

<form action="traitement.php" method="post">
<p>
<strong>Nom<span style="color: #ff0000;">*</span> :</strong> <label for="nom"> </label> <input id="nom" name="nom" size="28" type="text" /> 
<strong>Prénom :</strong> <label for="prenom"></label> <input id="prenom" name="prenom" size="27" type="text" /> <br /><br /> 
<strong> Société : </strong><br /> <label for="societe"> </label> <input id="societe" name="societe" size="81" type="text" /> <br /><br /> 
<strong> RCS : </strong><br /> <label for="rcs"> </label> <input id="rcs" name="rcs" size="81" type="text" /> <br /><br /> 
<strong>Adresse : </strong><br /> <label for="adresse"></label> <input id="adresse" name="adresse" size="81" type="text" /> <br /><br /> 
<strong>Code Postal  :</strong> <label for="code"></label> <input id="code" name="code" size="13" type="text" /> 
<strong>Ville : </strong> <label for="ville"></label> <input id="ville" name="ville" size="39" type="text" /> <br /><br /> 
<strong>Téléphone<span style="color: #ff0000;">*</span> :<label for="telephone"></label></strong> <input id="telephone" name="telephone" size="27" type="text" /> 
<strong>Fax :</strong> <label for="fax"></label> <input id="fax" name="fax" size="27" type="text" /> <br /> <br /> 
<strong>Mail <span style="color: #ff0000;">*</span> : </strong><br /> <label for="mail"> </label><input id="mail" name="mail" size="81" type="text" /></p>
<p>Pour quelle raison nous contactez-vous ?</p>
<label for="motif"></label> <select id="motif" name="motif"> <option value="reglement">Pour un renseignement</option> 
<option value="enquete_commerciales">Pour une vidéo</option>
<option value="enquete_civile">Pour un article</option> 
<option value="recouvrement">Pour autre chose</option> 
 </select>
<p>Message <span style="color: #ff0000;">*</span> :</p>
<p><label for="message"></label> <textarea id="message" cols="52" rows="7" name="message"></textarea></p>
<input type="reset" value="Effacer" /> <input type="submit" value="Envoyer" />
<p> </p>
</form>

 

Voici un exemple de résultat de la page : Cliquer ici pour le découvrir.

Bien évidemment à vous de le rendre plus joli avec un fond d’écran et un peu de CSS et de l’adapter à vos besoins.

Désormais le formulaire de contact est en place. Mais que se passe t-il en l’état si l’utilisateur remplit les champs et appuie sur envoyer ?…. rien ! Pour qu’il se passe quelque chose nous allons envoyer les champs remplis à une page qui traitera ceux-ci et se chargera de l’envoi par e-mail vers le Webmaster (ou qui vous voulez) qui récupérera les informations du formulaire.

Comme vous pouvez le voir en haut du code de la page HTML dans cette ligne : <form action= »traitement.php » method= »post »> Je vais utiliser, pour traiter les informations envoyées, la page traitement.php.

Celle-ci contient le code ci-après. Vous avez les commentaires pour savoir ce que font les lignes. Par exemple un peu de sécurité en empêchant de mettre des en-têtes dans les champs, vérifier les champs obligatoires…

Voici le code de la page traitement.php :

<?php
/* Récupération des informations du formulaire*/
if (get_magic_quotes_gpc())
{
 $nom = stripslashes(trim($_POST['nom']));
 $prenom = stripslashes(trim($_POST['prenom']));
 $dossier = stripslashes(trim($_POST['dossier']));    
 $societe = stripslashes(trim($_POST['societe']));
 $rcs = stripslashes(trim($_POST['rcs']));
 $code = stripslashes(trim($_POST['code']));
 $ville = stripslashes(trim($_POST['ville']));
 $telephone = stripslashes(trim($_POST['telephone']));
 $fax = stripslashes(trim($_POST['fax']));
 $mail = stripslashes(trim($_POST['mail']));
 $motif = stripslashes(trim($_POST['motif']));
 $message = stripslashes(trim($_POST['message']));
}     
else      
{
 $nom = trim($_POST['nom']);
 $prenom = trim($_POST['prenom']);
 $dossier = trim($_POST['dossier']);
 $societe = trim($_POST['societe']);
 $rcs = trim($_POST['rcs']);
 $adresse = trim($_POST['adresse']);
 $code = trim($_POST['code']);
 $ville = trim($_POST['ville']);
 $telephone = trim($_POST['telephone']);
 $fax = trim($_POST['fax']);
 $mail = trim($_POST['mail']);
 $motif = trim($_POST['motif']);
 $message = trim($_POST['message']);
}
/*Vérifie si l'adresse mail est au bon format */
 $regex_mail = '/^[-+.w]{1,64}@[-.w]{1,64}.[-.w]{2,6}$/i'; 
 /*Verifie qu il n y est pas d en tête dans les données*/
$regex_head = '/[nr]/';   
/*Vérifie qu il n y est pas d erreur dans adresse mail*/
 if (!preg_match($regex_mail, $mail))
 {
 $alert = 'L'adresse '.$mail.' n'est pas valide';      
 }
 else
{ 
 $courriel = 1;
}   
/* On affiche l'erreur s'il y en a une */ 
if (!empty($alert))
{
 $courriel = 0;
}     
/* On vérifie qu'il n'y a aucun header dans les champs */ 
if (preg_match($regex_head, $nom)
 || preg_match($regex_head, $prenom)
 || preg_match($regex_head, $dossier)
 || preg_match($regex_head, $societe)
 || preg_match($regex_head, $rcs)
 || preg_match($regex_head, $adresse)
 || preg_match($regex_head, $code)
 || preg_match($regex_head, $ville)
 || preg_match($regex_head, $telephone)
 || preg_match($regex_head, $fax)
 || preg_match($regex_head, $mail)
 || preg_match($regex_head, $motif)
 || preg_match($regex_head, $message))
{  
 $alert = 'En-têtes interdites dans les champs du formulaire'; 
}
else
{ 
 $header = 1;
}   
/* On affiche l'erreur s'il y en a une */ 
if (!empty($alert))
{
 $header = 0;
}
if (empty($telephone) 
 || empty($nom) 
 || empty($message))
{  
 $alert = 'Tous les champs doivent être renseignés';
} 
else
{  
 $renseigne = 1;
}   
/* On affiche l'erreur s'il y en a une */ 
if (!empty($alert))
{
 $renseigne = 0;
}
/* Si les variables sont bonne */
if ($renseigne == 1 AND $header == 1 AND $courriel == 1)
{
/*Envoi du mail*/

/*Le destinataire*/
$to="demo@fafa-informatique.com";

/*Le sujet du message qui apparaitra*/
$sujet="Message depuis le site";
$msg = '';
/*Le message en lui même*/
/*$msg = 'Mail envoye depuis le site' "rnrn";*/
$msg .= 'Nom : '.$nom."rnrn";
$msg .= 'Prenom : '.$prenom."rnrn";
$msg .= 'Dossier : '.$dossier."rnrn";
$msg .= 'Societe : '.$societe."rnrn";
$msg .= 'RCS : '.$rcs."rnrn";
$msg .= 'Adresse : '.$adresse."rnrn";
$msg .= 'Code : '.$code."rnrn";
$msg .= 'Ville : '.$ville."rnrn";
$msg .= 'Telephone : '.$telephone."rnrn";
$msg .= 'Fax : '.$fax."rnrn";
$msg .= 'Mail : '.$mail."rnrn";
$msg .= 'Motif : '.$motif."rnrn";
$msg .= 'Message : '.$message."rnrn";
/*Les en-têtes du mail*/
$headers = 'From: MESSAGE DU SITE FAFA<demo@fafa-informatique>'."rn";
$headers .= "rn";
/*L'envoi du mail - Et page de redirection*/
mail($to, $sujet, $msg, $headers);
header('Location:http://www.fafa-informatique.com');
}
else
{
header('Location:http://www.fafa-informatique.com');
}
?>

Le mail demo@fafa-informtique.com est fictif alors inutile de m’écrire dessus, vous pouvez mettre à la place celui sur lequel vous souhaitez recevoir les mails.

Donc je mets les deux pages à la racine de mon site. Désormais un utilisateur peut utiliser le formulaire pour écrire à l’entreprise.

Voilà l’exemple que vous recevrez dans votre boîte mail lorsqu’un utilisateur remplit le formulaire et l’envoi :

AVERTISSEMENT : Parfois le mail peut mettre quelques minutes à arriver dans votre boîte mail donc pas d’affolement si vous le testez et qu’il n’est pas là au bout de deux secondes. (Je précise pour les gens pressés, prenez un café en attendant ).

Message formulaire PHP

Pour le paramétrage de la fonction mail dans un serveur Web local, ici sur Wamp :

Je clique sur l’icône de Wamp, puis dans PHP. Je clique sur php.ini, un fichier s’ouvre. Dedans il faut rechercher les lignes SMTP et smtp_port et les paramétrer en fonction des serveurs SMTP de vos adresses mail. En faite, c’est un peu comme si vous paramétiez le SMTP Outlook.

Paramétrage de Wamp

Ce tutoriel est terminé j’espère qu’il pourra vous aider.

3 commentaires

  1. debutant en php, j’ai analyse attentivement le fichier traitement.php. Merci bcp, ca m’a bien aide. J’aurais une question concernant la fin du code avec mail() et la boucle suivante. Vous affichez la page html, ce qui est logique (j’ai teste avec echo et on a une nouvelle page blanche avec le texte de echo). Mais voulant egalement afficher en plus un message prevenant l’utilisateur que son envoi a bien (ou pas) ete effectue, j’ai donc rajouter l’instruction « echo « alert(‘xxxx’) »; apres le header, mais cela ne fonctionne pas. Par contre si l’instruction « echo » est seule (j’enleve « header »), j’ai bien mon message d’alert sur une page blanche. Je ne cromprends pas pourquoi les 2 instructions ne fonctionnent pas ensemble? Comment faire pour egalement afficher ce message de confirmation pour l’utiliisateur (c’est quand meme important de le prevenir!!)
    Merci d’avance. Frederic

    • Bonjour Frédéric,

      En fait, les deux URL en bas du formulaire permettent de rediriger selon que le message soit envoyé ou non, autrement dit, si le message est bien envoyé il suffit d’indiquer la page de redirection indiquant que le message est envoyé, sinon après le Else il suffit d’indiquer une page contenant un message d’erreur, donc il suffit de créer deux pages selon le résultat de l’envoi du mail.

  2. Hello,

    Merci pour ce tuto, néanmoins j’ai cette erreur de syntaxe « Parse error: syntax error, unexpected T_STRING in …  » sur cette ligne : $alert = ‘L’adresse ‘.$mail.’ n’est pas valide’;
    et je ne sais pas d’où ça peut venir…

    Merci de votre aide !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *