Créer un formulaire de contact php anti-spam (captcha)
#41
Posté 28 décembre 2006 - 00:46
je n'ai pas retouché au code (sauf pour le mail destinataire),
il me dit ke le message est bien envoyé, maisj'en doute
car aucun message n'arrive.....
J'ai vu ke kOntact avait eu le pb mais je ne comprends
pas comment il a solutionné.
Si quelqun peut m'aider, un GROS merci d'avance...
#42
Posté 08 janvier 2007 - 15:36
Bonne année 2007 !
Mais je bute sur un point :
Comment inclure dans le message de l'email que je reçois la valeur d'une checkbox, bouton radio, etc... ?
J'ai l'impression que tout se passe dans le code ci-dessous... (ligne 4)
$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é
e
J'ai remplacé $_POST["message"] par $_POST["checkbox"] pour avoir dans mon email la valeur du checkbox par exemple.ça marche nickel. En revanche je ne reçois pas de message puisque le script envoie la valeur du checkbox à la place du message...
Donc comment intégrer dans le message la valeur d'une checkbox, liste,... ?
Ps: J'ai éssayé de concaténer dans $_POST["message"] la valeur "message" avec "checkbox" pour obtenir ceci :
$_POST["message.checkbox"] en espérant que la valeur du checkbox soit incluse dans le message...
ça marche pas non plus...
Je suis perdu !
Ce message a été modifié par Norbert_404 - 08 janvier 2007 - 15:48.
#43
Posté 08 janvier 2007 - 15:48
$_POST['message'].$_POST['checkbox']
Par contre, il ne faut pas oublier que la valeur d'une checkbox n'est envoyée que si elle est cochée.
#44
Posté 08 janvier 2007 - 15:55
K0ntakt, c'est un problème assez courant que tu as. A vrai dire, je n'ai pas encore eu ce problème là mais si tu cherche bien sur le forum ou google tu trouveras la réponse à ta question.
dzaster, essaie de retirer le @ dans la condition if(@mail(...)), ça devrait fonctionner.
Norbert_404, captain_torche a répondu plus vite que moi
#45
Posté 08 janvier 2007 - 16:28
je viens de tester, ça marche.
J'ai finalement opter pour une liste déroulante à 2 choix
Pour info et si ça peut aider, je vous donne le code :
<select name="choix " id="choix ">
<option value="<?php echo htmlspecialchars("choix: Yes") ?>" />Red</option>
<option value="<?php echo htmlspecialchars("choix : No") ?>"/>Blue</option>
</select>
if (@mail($email_webmaster,$titre_cache." / ".$_POST["titre"],$_POST["message"].$_POST["
choix],$entete)){
Je vais rajouter un retour à la ligne aprés la concaténation pour avoir un message plus lisible :
if (@mail($email_webmaster,$titre_cache." / ".$_POST["titre"],$_POST["message"]./n$_POST["
choix],$entete)){
Citation
Red
#46
Posté 08 janvier 2007 - 16:50
C'est très intéressant
Qu'en dites-vous ?
Ce message a été modifié par Franck B. - 08 janvier 2007 - 16:50.
#50
Posté 12 janvier 2007 - 17:21
Sur le site il est marqué que cela peut provenir des sessions, comment je peux le vérifier ?
Merci.
#51
Posté 22 janvier 2007 - 15:18
Spammé depuis quelques jours et à répétition par l'intermédiaire de mon formulaire de contact, je souhaite intégrer un cryptograph à mon formulaire. L'installation en semble pas compliqué, mais sans succès pour ma part. L'image qui génère les codes ne s'affiche pas !
Le dossier crypt est bien sur mon serveur.
-http://www.lanature.fr/contact.php
<?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_lanature.fr";
// === 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 HTML 4.01 Transitional//EN">
<html>
<head>
<title>Contact nature et jardin bio</title>
<meta name="description" content="Formulaire de contact nature et jardin bio, posez vos questions sur la nature">
<meta name="Keywords" content="nature, jardin ,question nature, question jardin, contact nature">
<link href="http://www.lanature.fr/icones.ico" rel="shortcut icon">
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
<div id="conteneur">
<br>
<div id="edito">
<h2 style="text-align: center;">Contact Nature et jardin
bio</h2>
<br>
Pour toutes demandes d'aides et conseils sur le thème de
la <strong>nature</strong> et du <strong>jardin</strong>,
merci<br>
d'utiliser le forum. Vous pouvez y accéder en cliquant sur <a style="color: rgb(102, 0, 204);" href="forum/"><strong>forum
nature</strong></a>.<br>
<br>
Pour me contacter, remplissez le formulaire ci-dessous.<br>
<br>
<div align="center">
<?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";
}
}
?>
</div>
<br>
<br>
<div style="text-align: center;"><br>
<input name="button2" onclick="history.back()" value="Retour" type="button"></div>
</div>
<div style="text-align: center;" id="header"><?php include("menu.php"); ?><big><br>
<br>
<br>
<br>
<br>
</big></div>
<div style="text-align: center;" id="gauche"><?php include("gauche.php"); ?><big><br>
</big></div>
<div id="droite">
<div style="text-align: center;"><?php include("droite.php"); ?></div>
<big><br>
</big></div>
<div style="text-align: center;" id="pied"><?php include("pied.php"); ?></div>
</div>
</body>
</html>
#52
Posté 22 janvier 2007 - 17:00
Regarde dans la faq de cryptographp si tu n'es pas dans un de ces cas: http://www.cryptogra...dex.php?page=10 (problème hebergeur ?)
#54
Posté 24 janvier 2007 - 11:32
Juste une question :
Le mailer en php proposé dans ce sujet permet-il de cacher l'email quand la page est aspirée ?
Je me pose cette question car apparemment mon site a été aspiré...
PS: j'utilise aussi le captcha proposé par Byc et j'ai ajouté dans le répertoire qui contient le formulaire php un fichier index.html pour éviter d'afficher le contenu de ce même répertoire...
#55
Posté 24 janvier 2007 - 11:43
- Un système de captcha empêche (théoriquement) aux robots automatisés de s'inscrire, pour qu'ils ne puissent pas spammer un forum ou un système de commentaires
- un aspirateur enregistre toutes les pages d'un site en suivant les liens (comme un moteur de recherche, mais avec un but plus ou moins avouable).
Ils ne sont pas liés : un captcha n'empêchera pas à un aspirateur de voir les adresses e-mail de ton site.
Une manière de se protéger, est de faire en sorte que les adresses e-mail ne soient pas reconnues comme telles par un robot. Sur ce forum, elles sont automatiquement transformées en adresse_AT_email.com
#56
Posté 24 janvier 2007 - 13:30
Ce que verra la personne qui a aspiré ton site, c'est ce que tu vois quant tu fais un clic droit/afficher la source lorsque tu visionnes ta page de contact.
#57
Posté 24 janvier 2007 - 17:14
<?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 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 (antispam_check() == false) {
// l'addition est fausse
$erreur="Résultat incorrect du calclul antispam, 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 =======================================================
?>
<?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 (pour éviter le spam):</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";
$message="Provenance : $HTTP_REFERER\n";
$message.="Adresse IP : $REMOTE_ADDR,\n";
$message.="Navigateur : $HTTP_USER_AGENT\n";
if (@mail($email_webmaster,$titre_cache." / ".$_POST["titre"],$message.$_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";
}
}
?>
#58
Posté 28 janvier 2007 - 17:00
Dommage ça à l'air super
Voici l'adresse : http://www.eretz.be/contact2.php
Ce message a été modifié par Yoav - 28 janvier 2007 - 17:00.
#59
Posté 15 février 2007 - 11:49
et merci tout d'abord pour le script qui fonctionne très bien quand utilisé "tel que".
C'est quand j'essaie de la mettre à "ma sauce" que ça se complique.
J'obtiens systématiquement des erreurs. Mais pourquoi ?
Je séche depuis 2 heures (je précise que je ne connais rien au PHP) et j'ai besoin d'un (petit ?) coup de main..
Dans un 1er temps (et c'est déjà là que je bloque) je cherche à rajouter le nom de l'expéditeur et de le récupérer dans l'email qu'il va m'adresser.
J'ai donc mis ceci dans la 1ère partie :
if (isset($_POST["nom"])) {
$_POST["nom"]=trim(stripslashes($_POST["nom"]))
;
}
et un peu plus bas dans cette partie toujours :
elseif (empty($_POST["nom"])) {
// il manque le nom de l'expéditeur
$erreur="Merci de donner votre nom.";
}
Le contrôle semble bien s'effectuer.
Dans la partie html j'ai donc rajouter un champ de cette manière :
<p><label for="nom">Votre nom (obligatoire):</label><br />
<input type="text" size="40" name="nom" id="nom" value="<?php
if (!empty($_POST["nom"])) {
// le nom de l'expéditeur a été saisi: le réafficher
echo htmlspecialchars($_POST["nom"],ENT_QUOTES);
}
?>" />
</p>
Pas de souci encore : tout s'affiche bien.
Et c'est dans cette dernière ligne que les choses se gâtent.
J'ai rajouté
$_POST["nom"]ainsi :
// 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["nom"],$_POST["titre"
],$_POST["message"],$entete)){
// mail envoyé
Dans ma petite tête j'étais certain que cela fonctionnerait, mais non !
À chaque fois ce que je récupère c'est le message d'erreur déclenché par le script :
Citation
Et je ne comprends pas du tout du tout.
Quelle erreur ai-je pu commettre ?
Merci d'avance pour vos réponses.
Ce message a été modifié par H2V - 15 février 2007 - 11:51.
#60
Posté 16 février 2007 - 14:43
Il faut télécharger antispam.php et contacten.php dans le même répertoire.
<?php
include_once("antispam.php");
?>
<?php
// Vertaling van Yoav Rheims voor www.eretz.be
// n de lijn die volgt, webmaster_AT_domaine.tld door het adres e-mail van webmaster vervangen, waarnaar de berichten verzonden zullen moeten worden
$email_webmaster = "e-mail van de webmaster";
// Rajout alphega: In deze lijn example.com door de naam van uw plaats vervangen. Nuttig als u verschillende formulieren hebt.
$titre_cache = "Sinds de site naam van jij site";
// === behandeling van de gegevens van het formulier============================================================
if (isset($_POST["envoyer"])){
// het formulier werd voorgelegd
$etat = "erreur";
// Waarde per gebrek. Zal de waarde "ok" nemen als er geen fout is
// --- inzet in vorm van de velden die in het formulier bij zijn indiening worden gegrepen ---
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 van de geldigheid van de gegrepen velden---
if (empty($_POST["email_expediteur"])) {
// hij mist de e-mail van de afzender
$erreur="Grijpt uw adres e-mail ...";
}
elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z](
[-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["email_expediteur"
])){
// het adres e-mail is niet geldig
$erreur="Uw adres e-mail is niet geldig ...";
}
elseif (empty($_POST["message"])) {
//het bericht is leeg
$erreur="Voert een bericht in ...";
}
elseif (antispam_check() == false) {
// de rekening is vals
$erreur="Incorrect resultaat, zal opnieuw willen proberen !";
}
else {
// --- alle velden worden juist gevuld: men zal mail kunnen verzenden ---
$etat="ok";
}
}
else {
// --- het formulier werd niet voorgelegd ---
$etat="attente";
}
// === behandelingseind van de gegevens van het formulier =======================================================
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="nl" lang="nl" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Contacten vertaling door Yoav Rheims voor www.eretz.be</title>
</head>
<body>
<?php
if ($etat!="ok"){// het formulier werd niet, voorgelegd of met een fout voorgelegd
if ($etat=="erreur"){
//het formulier werd met een fout voorgelegd
echo "<p><strong>".$erreur."</strong></p>\n";
// het bericht van fout te kennen geven
}
?>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<p><label for="email_expediteur">Uw emailadres (Verplicht) :</label><br />
<input type="text" size="40" name="email_expediteur" id="email_expediteur" value="<?php
if (!empty($_POST["email_expediteur"])) {
// het adres e-mail van de afzender werd gegrepen: aangeven
echo htmlspecialchars($_POST["email_expediteur"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="titre">Titel van het onderwerp (Facultatief) :</label><br />
<input type="text" size="40" name="titre" id="titre" value="<?php
if (!empty($_POST["titre"])) {
// de titel van het bericht werd ingevoerd: aangeven
echo htmlspecialchars($_POST["titre"],ENT_QUOTES);
}
?>" />
</p>
<p><label for="message">Onderwerp (Verplicht) :</label><br />
<textarea name="message" id="message" cols="40" rows="5"><?php
if (isset($_POST["message"])) {
// het bericht werd ingevoerd: aangeven
echo htmlspecialchars($_POST["message"],ENT_QUOTES);
}
?></textarea>
</p>
<p>Rekenresultaat:</p>
<?php antispam_ins(); ?>
<p><input type="submit" name="envoyer" value="Zenden" />
</p>
</form>
<?php
}
else {
// het formulier werd zonder fout voorgelegd, men verzendt 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 gezant
echo "Uw bericht werd verzonden.<br />\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Een ander bericht verzenden ...</a>\n";
}
else {
// fout bij de zending van mail
echo "Een probleem heeft zich bij de zending van het bericht voorgedaan.\n";
echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Probeert opnieuw ...</a>\n";
}
}
?>
Voici l'adresse exemple : http://yoavftp.yo.fu...g/contacten.php
Ce message a été modifié par Yoav - 16 février 2007 - 14:46.



Haut












