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>
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.
Code complet pour créer un formulaire de contacte en 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 ).
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.
Autres articles sur les scripts en PHP
Le langage PHP est un très complet et il permet de nombreuses possibilités de création. Vous trouverez ainsi plusieurs présentations de scripts. Voici une petite liste ci-dessous :
- Comment calculer la durée d’exécution d’un script en PHP ?
- Comment configurer le logiciel phpMyAdmin pour des fichiers de grandes tailles ?
- Comment créer un graphique en PHP avec pChart ?
- Comment récupérer les dernières lignes d’une base de données MySQL ?
- Créer un script qui va rediriger un visiteur
- Créer un script pour vérifier que le navigateur d’un visiteur accepte les cookies
- Comment se connecter à une base de données avec un script PHP ?
- Comment manipuler un fichier JSON avec du PHP ?
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.
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 !
Salut et merci bien mon frere, svp j’ai beaucoup aimé la maniere donc vous avez expliqué ce tutos mais permet de vous dire mon mail ne part pas, et je me demande pourquoi cas je suis en local sur easyphp.
merci pour votre comprehension
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 !
Bonjour,
Compliqué de répondre comme cela, il faut le code complet, je serais vous j’irais sur un forum de développeur comme openclassroom, en mettant le code complet dans un topic le soucis sera rapidement trouvé,
Bon courage,
Le copier/coller n’est pas la meilleure idée, bien que ce script soit bien :
———————————————————
Parse error: syntax error, unexpected identifier « adresse » in C:\laragon\www\nouveau1\traitement.php on line 46
———————————————————
$alert = ‘L’adresse ‘.$mail.’ n’est pas valide’;
Si j’en juge de ce que j’ai appris en PHP, la meilleure syntaxe serait :
$alert = ‘L\’adresse ‘.$mail.’ n\’est pas valide’;
Mais mêmr rn faisant ça, ça ne va pas du tout !
Salut, même problème.
Ca semble venir de la function get_magic_quotes_gpc