alphega Posté 23 Octobre 2006 Posté 23 Octobre 2006 (modifié) Bonjour, J'utilise pour mes sites le formulaire de contact proposé sur les publications du hub: Un "Mailer" pour votre site web Il fonctionne correctement mais sur un de mes sites un peu populaire je vois que des robots tentent de spammer, je reçois des mails avec des caractères style: Content-Type: multipart/alternative; boundary=a07b15e738d180de6cb54849bee2c396 X-Mailer: Pegasus Mail for Windows (v4.02) J'aimerais donc installer une vérification avec saisie d'un code image "captcha" mais je ne connais pas le php. En attendant que je finisse mon bouquin "php mysql pour les nuls" , quelqu'un connaitrait-t-il un formulaire similaire mais avec captcha pour un copieur/colleur tel que moi ? Merci. Edit: titre Modifié 23 Octobre 2006 par alphega
Régis Posté 23 Octobre 2006 Posté 23 Octobre 2006 (...)quelqu'un connaitrait-t-il un formulaire similaire mais avec captcha pour un copieur/colleur tel que moi ?Bonjour 'alphega',As-tu regardé sur ce post du HUB : Cherche script "captcha", peut-être y trouveras-tu ton bonheur ....
guilhem_mdg Posté 23 Octobre 2006 Posté 23 Octobre 2006 Bonjour, Je te conseille d'aller voir le site suivant : http://www.cryptographp.com/ A + !
alphega Posté 23 Octobre 2006 Auteur Posté 23 Octobre 2006 Un grand merci à tous les deux, j'ai donc opté pour cryptographp qui était conseillé aussi dans l'autre sujet. La doc est assez claire, meme si je manquais de connaissances pour integrer l'étape de vérification de l'image dans le formulaire. Mais je suis bien décidé à me mettre au php qui me fait cruellement défaut, et j'ai donc planché plus de 3 heures pour tenter de comprendre... et j'ai finalement réussi Je suis tellement content que je laisse la procédure simplifiée et le code obtenu après intégration pour ceux qui ont autant de mal que moi avec le php: 1 - Télécharger cryptographp (version 1.3) 2 - Dézipper, puis envoyer le dossier crypt et son contenu sur votre serveur 3 - Créer le fichier contact.php avec le code ci-dessous (ne pas oublier d'éditer la ligne: $email_webmaster = "webmaster_AT_domaine.tld"; pour y mettre votre email) <?php include "crypt/functions.php"; ?><?php// Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés$email_webmaster = "webmaster_AT_domaine.tld";// === traitement des données du formulaire ============================================================if (isset($_POST["envoyer"])){// le formulaire a été soumis $etat = "erreur";// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur// --- mise en forme des champs saisis dans le formulaire lors de sa soumission --- if (isset($_POST["email_expediteur"])) { $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"])); } if (isset($_POST["titre"])) { $_POST["titre"]=trim(stripslashes($_POST["titre"])); } if (isset($_POST["message"])) { $_POST["message"]=trim(stripslashes($_POST["message"])); } // --- test de la validité des champs saisis --- if (empty($_POST["email_expediteur"])) {// il manque l'email de l'expéditeur $erreur="Saisissez votre adresse email..."; } elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){// l'adresse e-mail n'est pas valide $erreur="Votre adresse e-mail n'est pas valide..."; } elseif (empty($_POST["message"])) {// le message est vide $erreur="Saisissez un message..."; } elseif (empty($_POST["code"])) {// le code n'est pas saisi $erreur="Saisissez le code de verification..."; } else { // --- Vérification de la validité du code captcha --- if (chk_crypt($_POST['code'])) // --- tous les champs sont correctement remplis: on pourra envoyer le mail --- $etat="ok";// --- Le code captcha n'est pas valide --- else $erreur="Code de verification non valide ..."; }}else {// --- le formulaire n'a pas été soumis --- $etat="attente";}// === fin de traitement des données du formulaire =======================================================?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Formulaire de contact</title></head><body><h1>Contacter le webmaster</h1><?phpif ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur if ($etat=="erreur"){//le formulaire a été soumis avec une erreur echo "<p><strong>".$erreur."</strong></p>\n";// afficher le message d'erreur }?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br /> <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php if (!empty($_POST["email_expediteur"])) {// l'adresse email de l'expéditeur a été saisie: la réafficher echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES); } ?>" /> </p> <p><label for="titre">Titre de message (facultatif):</label><br /> <input type="text" size="40" name="titre" id="titre" value="<?php if (!empty($_POST["titre"])) {// le titre du message a été saisi: le réafficher echo htmlspecialchars($_POST["titre"],ENT_QUOTES); } ?>" /> </p> <p><label for="message">Message (obligatoire):</label><br /> <textarea name="message" id="message" cols="40" rows="5"><?php if (isset($_POST["message"])) {// le message a été saisi: le réafficher echo htmlspecialchars($_POST["message"],ENT_QUOTES); } ?></textarea> </p><?php dsp_crypt(0,1); ?> <p><input type="text" name="code" /></p> <p><input type="submit" name="envoyer" value="Envoyer" /> </p> </form><?php}else {// le formulaire a été soumis sans erreur, on envoie le mail $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n"; $entete .= "MIME-Version: 1.0"; if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){// mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n"; } else {// erreur lors de l'envoi du mail echo "Un problème s'est produit lors de l'envoi du message.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n"; }}?></body></html> Uploadez le fichier contact.php ... et c'est tout! Tester le formulaire
Norbert_404 Posté 12 Novembre 2006 Posté 12 Novembre 2006 Bonjour, J'ai une petite question sur le couple Mailer+cryptograph. J'ai pris le temps de bien chercher les réponses à mes questions, mais sans succés... 1. Le code du mailer empeche t-il les attaques par injection d'en-tête ? Si non, quel code faudrait-il ajouter ? et ou ? 2. Concernant ceci : $email_webmaster = "webmaster_AT_domaine.tld"; Si je met mon adresse email - azerty_AT_abc.fr par exemple - qu'est-ce qui peut empêcher qqn de regarder la source du script afin de prélever l'adresse ? Voila merci et a+ sur WH
alphega Posté 12 Novembre 2006 Auteur Posté 12 Novembre 2006 Bonjour, Si je met mon adresse email - azerty_AT_abc.fr par exemple - qu'est-ce qui peut empêcher qqn de regarder la source du script afin de prélever l'adresse ?L'email n'apparait pas dans la source du html mais dans celle du php. Il est donc invisible pour les visiteurs de la page, robots compris. Par contre, pour la 1ere question Le code du mailer empeche t-il les attaques par injection d'en-tête ?, je ne saurais te dire...
Norbert_404 Posté 12 Novembre 2006 Posté 12 Novembre 2006 (modifié) Bonsoir, Merci pour la réponse ;-) L'email n'apparait pas dans la source du html mais dans celle du php. ah oui, je crois avoir compris: donc il y a sur la même page (ex contact.php) une partie du code php contenant l'adresse email, <?php include "crypt/functions.php"; ?>etc...etc...// === fin de traitement des données du formulaire =======================================================?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" et dans le code html il y a le formulaire avec le reste du code. Ce qui fait que quand la page est affichée dans un navigateur, la 1ere partie du code "disparaît" aprés avoir été traitée par le serveur. Est-ce bien cela ? --- Je crois avoir trouvé un code anti injection d'en-tête, mais je ne sais vraiment pas ou le mettre dans le code du mailer <?php $from = $_POST["sender"]; $from = urldecode($from); if (eregi("\r",$from) || eregi("\n",$from)){ die("Why ?? :("); } ?> a+ Modifié 12 Novembre 2006 par Norbert_404
alphega Posté 12 Novembre 2006 Auteur Posté 12 Novembre 2006 Ce qui fait que quand la page est affichée dans un navigateur, la 1ere partie du code "disparaît" aprés avoir été traitée par le serveur.Est-ce bien cela ? Presque... car en fait il y a du php aussi dans la deuxième partie de la page. Ce qui revient au meme car au final, seule le code html est affiché dans la source, pas le php. html = langage client, interprété par le navigateur, par le pc du visiteur et accesible via la source. php = langage serveur, interprété par le serveur/hebergeur, non accessible au visiteur. Pour ce qui est du code anti-injection, je prefere laisser la parole a quelqu'un de plus informé que moi
Norbert_404 Posté 12 Novembre 2006 Posté 12 Novembre 2006 Merci alphega ! ta précision confirme ce que je pensais ;- )
playedd Posté 13 Novembre 2006 Posté 13 Novembre 2006 Bonjour, Merci pour ce script. Le code fournit plus fonctionne bien, mais n'etant moi meme pas specialiste de la programmation et n'ayant pas plusieurs heures à consacrer pour dechiffrer les codes existants et trouver ma propre solution, je fais appel a vos connaissances car il subsiste malgré tout un probleme. Pour certaines adresses, mon filtre anti-spam de mon operateur envoie certains mails emis depuis la page contact en courrier indésirables. J'ai la possibilité de rendre légitime des mails a partir du moment ou je peux proposer une partie fixe (ex "Contact site oueb trucmuche.com") Ou et comment dois je installer cette fonctionnalité? Idéalement, je souhaiterai recevoir un mail dont l'objet est : "Contact site oueb trucmuche / objet de l'internaute qui rempli le mail" Merci pour vos réponses
alphega Posté 14 Novembre 2006 Auteur Posté 14 Novembre 2006 (modifié) Pour certaines adresses, mon filtre anti-spam de mon operateur envoie certains mails emis depuis la page contact en courrier indésirables. J'ai remarqué aussi que gmail me classait l'email en spam. Pour contourner ce problème j'ai rajouté la ligne en gras dans le code: // le formulaire a été soumis sans erreur, on envoie le mail $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n"; $entete .= "Return-Path: ". $email_webmaster . "\n"; $entete .= "MIME-Version: 1.0"; if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){ Après ça, plus de classement dans le spam. Idéalement, je souhaiterai recevoir un mail dont l'objet est :"Contact site oueb trucmuche / objet de l'internaute qui rempli le mail" Rajoute la ligne en gras et remplis là comme tu veux: // Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés $email_webmaster = "webmaster_AT_domaine.tld"; $titre_cache = "Depuis le site...... / "; // === traitement des données du formulaire Et aussi cette partie en gras/orange à rajouter : $entete .= "MIME-Version: 1.0"; if (@mail($email_webmaster,$titre_cache.$_POST["titre"],$_POST["message"],$entete)){ // mail envoyé Comme je l'ai dit plus haut dans le sujet, je commence juste à comprendre un peu le php et je ne sais pas si "c'est correct" mais en tout cas, ça fonctionne chez moi Modifié 14 Novembre 2006 par alphega
Neoxy Posté 14 Novembre 2006 Posté 14 Novembre 2006 Salut Une des methode pour eviter de se faire spamer son formulaire est de controler si les champs contiennent des \n ou des \r lors de la saisie, ce sont des retour charios qu'on retrouve dans le header, en PHP, on peut controler ce genre de caractéres avec la fonction : ereg("$_POST["email"]", "\n") par exemple Le header injection est de plus en plus fréquent sur les formulaire de contact web. D'autre part, je trouve que la technique captcha qui génére un code dans une image n'est pas très cool en terme d'accessibilité pour les personnes non voyante par exemple. Les contrôles du type question comme : "combien font 3 + 4 ?" sont plus interessant dans l'utilisation. Il exisite des module sur le net pour l'implémenter sur des formulaire de contact, mais ce procédé est déja utilisé par les blog du type dotclear et ca à l'air de bien marcher.
playedd Posté 14 Novembre 2006 Posté 14 Novembre 2006 D'autre part, je trouve que la technique captcha qui génére un code dans une image n'est pas très cool en terme d'accessibilité pour les personnes non voyante par exemple. Les contrôles du type question comme : "combien font 3 + 4 ?" sont plus interessant dans l'utilisation. Il exisite des module sur le net pour l'implémenter sur des formulaire de contact, mais ce procédé est déja utilisé par les blog du type dotclear et ca à l'air de bien marcher. Salut, merci pour vos reponses, je vais essayer d'implementer tout cela dans la journée. Pour le captcha, je suis tout a fait d'accord avec toi pour la question d'accessibilité. C'est pas l'ideal. Je ne connaissais pas l'utilisation d'une question automatique. Y'a-t-il un lien pour une demo, ou mieux, un lien vers un script? Merci
Norbert_404 Posté 14 Novembre 2006 Posté 14 Novembre 2006 Bonjour à tous ! J'ai fait pas mal de recherche sur le net à propos de injection de header eregi("$_POST["email"]", "\n") J'ai l'impression que le code ci-dessus passe en revue l'ensemble de l'email afin de trouvé une éventuel retour. Si oui, donc on serait obliger de rédiger un email sur une seule ligne, non ? Par contre le code suivant ne s'occupe que du champ "From" : if (eregi("\r",$from) || eregi("\n",$from)){die("Why ?? :(");} Le code est-il bien inséré au bon endroit ? // Si le formulaire a été envoyé$from=$_POST["expediteur"];if (eregi("\r",$from) || eregi("\n",$from)){die("Why ?? :(");}$to=$_POST["destinataire"];// On envoie le mail : Merci
Norbert_404 Posté 14 Novembre 2006 Posté 14 Novembre 2006 Bon me revoila ! J'ai fait des test d'injection d'en-tête sur formulaire php tout simple en suivant un article : l'injection marche ! (c'est normal) Aprés avoir installé le mailer proposé dans le forum et j'ai suivi de nouveau l'article : ce mailer semble être protégé contre cela... Par contre j'ai utilisé le code mailer + crypto * donnée par alphega au post 4 : rien à faire, ça ne marche pas... J'ai suivit les consignes données par le site cryptograph : pareil, ça ne marche pas... Comment et ou inclure les codes du crypto avec le mailer ??? A+++ *Tant pis pour l'accéssibilité de mon site, je ferai comme ça dans un 1er temps...
alphega Posté 15 Novembre 2006 Auteur Posté 15 Novembre 2006 Par contre j'ai utilisé le code mailer + crypto donnée par alphega au post 4 : rien à faire, ça ne marche pas... Ah bon, le formulaire ? C'est peut-etre parce que tu ne places pas le dossier "crypt" au meme endroit que ta page de contact. Si ta page de contact est à la racine de ton site, il faut modifier la 1ere ligne qui est normalement celle ci: <?php include "crypt/functions.php"; ?> Si la page contact est dans un repertoire (www.example.com/repertoire/contact.php), ça donnera <?php include "../crypt/functions.php"; ?> Si la page contact est dans un sous-repertoire (www.example.com/repertoire/sous-repertoire/contact.php), ça donnera <?php include "../../crypt/functions.php"; ?> Sinon qu'est ce qui ne fonctionne pas ? L'envoi, l'affichage ... ?
playedd Posté 15 Novembre 2006 Posté 15 Novembre 2006 Question toute bete pour un novice, c'est quoi une injection d'en-tête? Merci
byc Posté 15 Novembre 2006 Posté 15 Novembre 2006 (modifié) Salut, merci pour vos reponses, je vais essayer d'implementer tout cela dans la journée.Pour le captcha, je suis tout a fait d'accord avec toi pour la question d'accessibilité. C'est pas l'ideal. Je ne connaissais pas l'utilisation d'une question automatique. Y'a-t-il un lien pour une demo, ou mieux, un lien vers un script? Merci J'ai mis en place un système "antispam" générant une simple addition ou soustraction à implémenter dans n'importe quel formulaire. J'ai été content de constater que mon script perso fonctionnait à merveille. Voici la page où vous pourrez voir la démo : ici Modifié 15 Novembre 2006 par byc
freemaster Posté 15 Novembre 2006 Posté 15 Novembre 2006 ah ouais d'accord ! pour 3 + 4 tu le compares à 3_0_4 moi mon erreur c'est d'avoir mis la véritable valeur à comparer dans la source, et les robots arrivent à poster quand même lol et j'imagines que tu fait un explode pour ajouter les extrémités je m'en vais améliorer ce que j'ai fait
alphega Posté 15 Novembre 2006 Auteur Posté 15 Novembre 2006 C'est excellent ce système d'addition N'hésitez pas à le partager et à expliquer comment l'intégrer si le coeur vous en dit
byc Posté 15 Novembre 2006 Posté 15 Novembre 2006 Vu que ça intéresse pas mal de monde, voici les explications en détails : 1) Télécharger la source : ici 2) faire un include du fichier en question <?php include_once("antispam.php");?> 3) insérer le calcul en faisant un simple appel à une fonction <?php echo "<form id='formulaire' action='".$_SERVER["PHP_SELF"]."'method='post'>";[...]antispam_ins();echo "<input type='submit' value='Envoyer' />";echo "</form>";?> 4) Vérifier si le résultat est correct <?php if(antispam_check() == false){ echo "Résultat incorrect, veuillez réessayer !";}else{ [...] envoi du mail et/ou insertion du formulaire dans la base de données.}?> Aussi simple que ça
alphega Posté 15 Novembre 2006 Auteur Posté 15 Novembre 2006 Merci beaucoup byc, c'est excellent, ça marche parfaitement
Norbert_404 Posté 15 Novembre 2006 Posté 15 Novembre 2006 Wow chouette !!! Merci à byc pour son code !!! Au moins ça résout le probléme d'accéssibilité ! J'utilise pour mes sites le formulaire de contact proposé sur les publications du hub: Un "Mailer" pour votre site web Donc en ajoutant le code de Byc j'obtiendrai ceci : [b]<?phpinclude_once("antispam.php");?>[/b]<?php// Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés$email_webmaster = "webmaster_AT_domaine.tld";// === traitement des données du formulaire ============================================================if (isset($_POST["envoyer"])){// le formulaire a été soumis $etat = "erreur";// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur// --- mise en forme des champs saisis dans le formulaire lors de sa soumission --- if (isset($_POST["email_expediteur"])) { $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"])); } if (isset($_POST["titre"])) { $_POST["titre"]=trim(stripslashes($_POST["titre"])); } if (isset($_POST["message"])) { $_POST["message"]=trim(stripslashes($_POST["message"])); } // --- test de la validité des champs saisis --- if (empty($_POST["email_expediteur"])) {// il manque l'email de l'expéditeur $erreur="Saisissez votre adresse email..."; } elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){// l'adresse e-mail n'est pas valide $erreur="Votre adresse e-mail n'est pas valide..."; } elseif (empty($_POST["message"])) {// le message est vide $erreur="Saisissez un message..."; } else {// --- tous les champs sont correctement remplis: on pourra envoyer le mail --- $etat="ok"; }}else {// --- le formulaire n'a pas été soumis --- $etat="attente";}// === fin de traitement des données du formulaire =======================================================?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Formulaire de contact</title></head><body><h1>Contacter le webmaster</h1><?phpif ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur if ($etat=="erreur"){//le formulaire a été soumis avec une erreur echo "<p><strong>".$erreur."</strong></p>\n";// afficher le message d'erreur }?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br /> <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php if (!empty($_POST["email_expediteur"])) {// l'adresse email de l'expéditeur a été saisie: la réafficher echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES); } ?>" /> </p> <p><label for="titre">Titre de message (facultatif):</label><br /> <input type="text" size="40" name="titre" id="titre" value="<?php if (!empty($_POST["titre"])) {// le titre du message a été saisi: le réafficher echo htmlspecialchars($_POST["titre"],ENT_QUOTES); } ?>" /> </p> <p><label for="message">Message (obligatoire):</label><br /> <textarea name="message" id="message" cols="40" rows="5"><?php if (isset($_POST["message"])) {// le message a été saisi: le réafficher echo htmlspecialchars($_POST["message"],ENT_QUOTES); } ?></textarea> </p>[b]antispam_ins();[/b] <p><input type="submit" name="envoyer" value="Envoyer" /> </p>[b]<?phpif(antispam_check() == false){ echo "Résultat incorrect, veuillez réessayer !";}else{ [...] envoi du mail et/ou insertion du formulaire dans la base de données.}?>[/b] </form><?php}else {// le formulaire a été soumis sans erreur, on envoie le mail $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n"; $entete .= "MIME-Version: 1.0"; if (@mail($email_webmaster,$_POST["titre"],$_POST["message"],$entete)){// mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n"; } else {// erreur lors de l'envoi du mail echo "Un problème s'est produit lors de l'envoi du message.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n"; }}?></body></html> et je met antispam.php dans le même répertoire que la page php du formulaire ? J'ai juste ??? PS: Je veux pas me faire passer pour un boulet, je débute dans le php, désolé...
alphega Posté 15 Novembre 2006 Auteur Posté 15 Novembre 2006 Tu as essayé Norbert_404 ? Pour ma part, j'ai plutot fait comme ça, ça marche bien: <?php include_once("antispam.php");?><?php// Dans la ligne qui suit, remplacer webmaster_AT_domaine.tld par l'adresse email du webmaster, à laquelle les messages devront être envoyés$email_webmaster = "webmaster_AT_domaine.tld";// Rajout alphega: Dans cette ligne remplacer example.com par le nom de votre site. Utile si vous avez plusieurs formulaires.$titre_cache = "Depuis le site example.com";// === traitement des données du formulaire ============================================================if (isset($_POST["envoyer"])){// le formulaire a été soumis $etat = "erreur";// Valeur par défaut. Prendra la valeur "ok" s'il n'y a pas d'erreur// --- mise en forme des champs saisis dans le formulaire lors de sa soumission --- if (isset($_POST["email_expediteur"])) { $_POST["email_expediteur"]=trim(stripslashes($_POST["email_expediteur"])); } if (isset($_POST["titre"])) { $_POST["titre"]=trim(stripslashes($_POST["titre"])); } if (isset($_POST["message"])) { $_POST["message"]=trim(stripslashes($_POST["message"])); } // --- test de la validité des champs saisis --- if (empty($_POST["email_expediteur"])) {// il manque l'email de l'expéditeur $erreur="Saisissez votre adresse email..."; } elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"])){// l'adresse e-mail n'est pas valide $erreur="Votre adresse e-mail n'est pas valide..."; } elseif (empty($_POST["message"])) {// le message est vide $erreur="Saisissez un message..."; } elseif (antispam_check() == false) {// l'addition est fausse $erreur="Résultat incorrect, veuillez réessayer !"; } else {// --- tous les champs sont correctement remplis: on pourra envoyer le mail --- $etat="ok"; }}else {// --- le formulaire n'a pas été soumis --- $etat="attente";}// === fin de traitement des données du formulaire =======================================================?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xml:lang="fr" lang="fr" xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Formulaire de contact</title></head><body><h1>Contacter le webmaster</h1><?phpif ($etat!="ok"){// le formulaire n'a pas été soumis, ou soumis avec une erreur if ($etat=="erreur"){//le formulaire a été soumis avec une erreur echo "<p><strong>".$erreur."</strong></p>\n";// afficher le message d'erreur }?> <form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <p><label for="email_expediteur">Votre adresse e-mail (obligatoire):</label><br /> <input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php if (!empty($_POST["email_expediteur"])) {// l'adresse email de l'expéditeur a été saisie: la réafficher echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES); } ?>" /> </p> <p><label for="titre">Titre de message (facultatif):</label><br /> <input type="text" size="40" name="titre" id="titre" value="<?php if (!empty($_POST["titre"])) {// le titre du message a été saisi: le réafficher echo htmlspecialchars($_POST["titre"],ENT_QUOTES); } ?>" /> </p> <p><label for="message">Message (obligatoire):</label><br /> <textarea name="message" id="message" cols="40" rows="5"><?php if (isset($_POST["message"])) {// le message a été saisi: le réafficher echo htmlspecialchars($_POST["message"],ENT_QUOTES); } ?></textarea> </p> <p>Résultat du calcul:</p> <?php antispam_ins(); ?> <p><input type="submit" name="envoyer" value="Envoyer" /> </p> </form><?php}else {// le formulaire a été soumis sans erreur, on envoie le mail $entete = "From: ".$_POST["email_expediteur"]." <".$_POST["email_expediteur"].">\n"; $entete .= "Return-Path: ". $email_webmaster . "\n"; $entete .= "MIME-Version: 1.0"; if (@mail($email_webmaster,$titre_cache." / ".$_POST["titre"],$_POST["message"],$entete)){// mail envoyé echo "Votre message a été envoyé.<br />\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Envoyer un autre message...</a>\n"; } else {// erreur lors de l'envoi du mail echo "Un problème s'est produit lors de l'envoi du message.\n"; echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a>\n"; }}?></body></html> En plus du calcul vérificateur, j'ai aussi inclus la modif du "return path" et la ligne qui permet d'identifier d'où vient le formulaire (à completer soi meme, juste après la ligne de l'adresse email). ps: pour les longs codes à mettre sur le forum, tu peux utiliser la balise: [codebox][/codebox]
Norbert_404 Posté 15 Novembre 2006 Posté 15 Novembre 2006 Bonsoir ! Oui j'a essayé mais j'obtiens un message d'érreur du type : "Parse error, unexpected...." J'ai compris cette érreur Je vais tester le code que tu viens de me montrer... merci ;-) ps: pour les longs codes à mettre sur le forum, tu peux utiliser la balise: Oui je sais. J'ai fait exprés de ne pas mettre mmon code entre les balises codes afin d'utiliser le gras pour trouver rapidement le code ajouté... a+ [Edit captain_torche]J'ai moi-même ajouté les balises adéquates, et tu peux constater que la mise en gras est conservée
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant