Note : Cet article va prochainement faire l’objet d’une mise à jour pour une version plus complète.
Nous allons voir aujourd’hui comment installer un formulaire de contact sur votre site/blog.
Prérequis :
- Un accès FTP ou tout autre moyen d’ajouter des fichiers sur votre espace web (Dédié/vps/mutualisé…)
- Un serveur Web fonctionnel (Voir la procédure d’installation d’apache), ne pas vous en préoccuper si vous êtes sur un mutualisé.
Je ne detaillerais pas intégralement toutes les balises, de nombreux tutoriels existent. Retenez que vous pouvez l’aménager à votre guise, css, html, et organiser autrement les champs en respectant les balises de formulaire.
Voici les deux fichiers nécessaires à son fonctionnement, ils sont commentés et j’espère assez clairs. Si vous ne comprenez pas les bases html et php je vous conseille de reprendre des livres ou tutoriels basiques. Sinon commentez 😉
Code HTML à placer dans votre page Web (Le formulaire) :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
<!-- - Author : Maximilien D - Licence : CC BY-NC-SA - Description : Formulaire de contact - inc.php --> <form method="post" action="contact.form.php"> <p> <label for="pseudo" >Votre Nom<span class="red">*</span></label> : <input type="text" name="pseudo" id="pseudo" size="20" maxlength="25" tabindex="10" required/> </p> <p> <label for="mail">Votre mail (pour vous recontacter)</label> : <input type="email" name="mail" id="mail" size="40" maxlength="50" tabindex="20"/> </p> <p> <label for="sujet">Sujet de la requête<span class="red">*</span> :</label> <select name="sujet" tabindex="30"> <option value="proposition">Demande / Proposition</option> <option value="amelioration">Amélioration, changement du site/blog</option> <option value="signalement">Signaler une erreur, ou un contenu inapproprié</option> <option value="autre" selected="selected">Autre raison...</option> </select> </p> <p> <label for="statut">Votre statut :</label> <select name="statut" tabindex="40"> <option value="aucun">Peu importe / ne se pronnonce pas.</option> <option value="etudiant">Etudiant.</option> <option value="professionel">Professionel.</option> <option value="autre" selected="selected">Autre statut...</option> </select> </p> <p> <label for="commentaire">Contenu de votre requète<span class="red">*</span> :</label><br /> <textarea name="commentaire" id="commentaire" tabindex="50" required></textarea> </p> <?php // Code pour le recaptcha require_once('form/recaptchalib.php'); $publickey = "votre-clef-publique"; echo recaptcha_get_html($publickey); ?> <div id="boutons"> <input type="submit" /> <input type="reset" /> </div> </form> |
Et voici le code PHP appelé par le formulaire.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
<?php /* * Author : Maximilien D * Licence : CC BY-NC-SA * Description : Formulaire de contact - form.php */ // On inclus le code fourni par google pour faire fonctionner le captcha require_once('recaptchalib.php'); $privatekey="VOTRE-CLEF-PRIVEE"; $resp=recaptcha_check_answer($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); // Vérification du captcha, if (!$resp->is_valid) { header('Location: http://www.monsiteweb.org/erreurdecaptcha'); exit(); } else { /* Cas où il a correctement été entré * - Dans ce cas on envoie un mail avec la fonction au même nom. * Les donnés du formulaire ($_POST) sont inséré dans un message brut prédéfini. * Mais on peut les récuperer autrement ou les insérer autrement (BDD, mail en html...) * * - avec message .= "chaine" on concatène "chaine" à la variable message * htmlentities($value, ENT_QUOTES) permet de transformer les caractère spéciaux types ('<','\', ''', '"', ...) en caractères non interprétables. * Ceci nous permet de sécuriser les données qui sont envoyées . */ $to = "votreemail@example.com"; $subject = "Formulaire Contact"; $message = "Un message a été envoyé à partir de votre site web.\n > Nom de l'expediteur : ".htmlentities($_POST['pseudo'], ENT_QUOTES)."\n"; if ($_POST['mail']!="") { $message .= " > Son mail : ".htmlentities($_POST['mail'], ENT_QUOTES)."\n"; } $message .=" > Sujet : ".htmlentities($_POST['sujet'], ENT_QUOTES)."\n > Satut : ".htmlentities($_POST['statut'], ENT_QUOTES)."\n > Requète :\n\n ".htmlentities($_POST['commentaire'], ENT_QUOTES)."\n\n"; $message .="\n Pour d'éventuelles mises à jour, ou améliorations du code consultez ::"; if (mail($to, $subject, $message)) { //Puis on renvoie sur monsiteweb.org, if permet de tester si mail() à bien fonctioné (ceci ne garanti pas que le mail sera recu, mais c'est un début) header('Location: http://www.monsiteweb.org/messageenvoyé'); //Puis on termine le script exit(); } else { // Si il y a erreur on renvoie sur le site header('Location: http://www.monsiteweb.org/erreurfonctionmail'); exit(); } } ?> |
Voici j’espère que tout est clair, ce billet fera probablement l’objet de quelques mises à jour.
Récupérez tout les fichiers ainsi que les fichiers nécessaires pour le captcha avec ce lien :
formulaire_contact_php_captcha
Code sous Licence : CC BY-NC-SA
Si vous possédez un blog type WordPress, il existe très probablement des extensions ayant ce rôles ( Contact Form 7 pour WP par exemple ). Mais si vous disposez d’un accès FTP sachez qu’un code comme celui présenté dans ce billet est bien plus léger et personalisable.
Bonjour,
je vous remercie pour ce script. ca m’a l’air assez clair. beau boulot, mais j’ai une eureur lors du traitement du mail ne ligne 49 :
header(‘Location: http://www.monsiteweb.org/erreurfonctionmail‘);
en fait je ne comprend pas bien ce terme de Header ni si je dois créer de nouvelles page pour les message d’erreur de traitement.
Un petit conseil ?
Si ton script arrive a la ligne 49 c’est que la fonction
mail($to, $subject, $message)
n’a pas fonctionné, probablement que la fonction mail n’est pas active dans ton environnement.La fonction header() permet de spécifier ou modifier des informations qui sont transmises au navigateur avant le contenu de la page web. En l’occurrence Location permet de définir une « redirection », le contenu qui suivra sera celui disponible a l’adresse contenue après les :
Les puristes me taperont sur les doigts, mais c’est un bon résumé. consulte http://php.net/manual/fr/function.header.ph si tu veux en savoir plus.
Bonjour, merci pour ce tuto mais j’ai un souci sur le captcha.
Malgré la création des clés, je ne vois pas le captcha s’afficher dans mon formulaire.
Y a t-il d’autre manip à faire ?
Il faut tout d’abord vérifier que les liens présents dans ton code PHP correspondent bien à l’emplacement des fichiers sur le HDD du serveur, (que l’arborescence des dossiers/fichiers et bien respectée) modifie en fonction la position de tes fichiers et / ou ton code. Il s’agira de la source majeure de problèmes.
Merci
Merci pour votre script
je vais l’intégrer dans un des mes site pour le tester
si cela fonctionne et avec votre accord je publierai quelques articles élogieux sur différents blog
cordialement
Nicko
Bonjour, merci de votre sollicitude. Je vais prochainement en créer un beaucoup plus élaboré et modulaire. Je posterais un billet dès qu’il sera disponible (en GPL sur un dépot Git).