Aller au contenu
alphega

Créer un formulaire de contact php anti-spam (captcha)

Noter ce sujet :

Recommended Posts

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" :smartass: , quelqu'un connaitrait-t-il un formulaire similaire mais avec captcha pour un copieur/colleur tel que moi ?

Merci.

Edit: titre

Modifié par alphega

Partager ce message


Lien à poster
Partager sur d’autres sites
(...)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 ....

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :P

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>
<?php
if ($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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

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é par Norbert_404

Partager ce message


Lien à poster
Partager sur d’autres sites
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 :blush:

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites
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é par alphega

Partager ce message


Lien à poster
Partager sur d’autres sites

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.

Partager ce message


Lien à poster
Partager sur d’autres sites
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

Partager ce message


Lien à poster
Partager sur d’autres sites

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 ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites
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 ... ?

Partager ce message


Lien à poster
Partager sur d’autres sites
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é par byc

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :thumbsup:

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est excellent ce système d'addition :thumbsup:

N'hésitez pas à le partager et à expliquer comment l'intégrer si le coeur vous en dit ;)

Partager ce message


Lien à poster
Partager sur d’autres sites

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 :)

Partager ce message


Lien à poster
Partager sur d’autres sites

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]<?php
include_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>
<?php
if ($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]<?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.
}
?>[/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é...

Partager ce message


Lien à poster
Partager sur d’autres sites

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>
<?php
if ($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]

Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×