Insertion captcha dans formulaire mail

Wolfen38
Invité n'ayant pas de compte PHPfrance

26 nov. 2009, 09:33

Bonjour,
Suite à plusieurs spam dans mon formulaire, j'ai voulu installer un captcha.

J'ai récupéré et installé "cryptographp".

Le problème, c'est que ça ne fonctionne pas, j'ai l'impression que le fait d'avoir rajouter ce code dans mon formulaire et sur la page de gestion des infos du formulaire fait que maintenant, il me supprime les autres champs du formulaire, car elles apparaissent toutes vides....

Et comme mon hébergeur régule le spam, je ne peux pas trop faire d'essais avec mon formulaire sinon il sera bloquer.....

Des idées ?

Voici le bout de code que j'ai dans mon formulaire :
<form action=formrenseignement.php method=POST enctype="application/x-www-form-urlencoded"
  name=AVIS autocomplete=off>
  <table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:
   1.5pt;mso-table-layout-alt:fixed'>


   <tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
    <td width=35 style='width:50pt;padding:.75pt .75pt .75pt .75pt'>
    <p class=MsoNormal><o:p>&nbsp;</o:p></p>
    </td>
<td width="565" style='color:white' style='mso-bidi-font-weight:
  bold'><b>Veuillez remplir le questionnaire suivant afin que je puisse vous répondre.</b><p>&nbsp;</td>
</tr>
<tr>
<td width="35"></td>
<td width="565" style='color:white' style='mso-bidi-font-weight:
  normal'><b>
Votre nom : </b><br>
<input type="text" name="nom" size="20">

<p><b>Votre prénom :</b><br>
<input type="text" name="prenom" size="20"></p>

<p><b>Votre numéro de téléphone :</b><br>
<input type="text" name="tel" size="20"></p>

<p><b>Votre Email :</b><br>
<input type="text" name="email" size="20"></p>

<p><b>La race de votre chien :</b><br>
<input type="text" name="race" size="20"></p>

<p><b>L'âge de votre chien :</b><br>
<input type="text" name="age" size="20"></p>

<p><b>Merci de me donner quelques informations pour que je puisse vous répondre plus précisément.</b><br>
<textarea rows="7" name="remarques" cols="70"></textarea></p><br>


<?php dsp_crypt(0,"Générer une nouvelle image"); ?>
 <p><b>Recopier le code:</b><input type="text" name="code">

</td>
</tr>
</table></p>
<p>&nbsp;</p>
<p style='text-align:center'>
<input type="submit" value="Envoyer" name="envoyer">&nbsp;&nbsp;&nbsp;
<input type="reset" value="Recommencer" name="recommencer"> <br>
<br>
</p>
</form>
Et dans mon fichier formrenseignement :
if (chk_crypt($_POST['code'])) {


if ($nom == ""){ //nom du champ1
echo("Vous n'avez pas complété le nom.<br>"); //message qui s'affiche si le visiteur n'a pas rempli ce champ
$Envoi = 0; //si le champ1 n'a pas été rempli, la variable envoi prend la valeur de 0
}
else {
$MailBody .= "Votre nom : $nom\n"; //si le champ1 contient de l'information, elle est stockée dans la variable MailBody
}

$MailBody .= "Votre prénom : $prenom\n";

$MailBody .= "Votre numéro de téléphone : $tel\n";

if ($email == ""){
echo("Vous n'avez pas complété l'email<br>");
$Envoi = 0;
}
else {
$MailBody .= "Votre Email : $email\n";
}

$MailBody .= "La race de votre chien : $race\n";

$MailBody .= "L'âge de votre chien : $age\n";


$affich_remarques = htmlentities($remarques); // affiche le code HTML à l'état brut.
$affich_remarques = StripSlashes($affich_remarques); // enlève, au texte affiché, les \ aux apostrophes, exemple : l\'habitude
$envoi_remarques = StripSlashes($remarques); // enlève les \ aux apostrophes, exemple : l\'habitude 
$MailBody .= "Vos remarques : \n";
$MailBody .= "$envoi_remarques\n";


if ($Envoi == 0) { //vérification que la variable envoi est bien à 1
echo("<p><a href=\"Javascript:history.go(-1)\"><center><strong>RETOUR</strong></center></a></p>");
//Pas d'envoi du message et retour au formulaire
}



//Envoi du message
if ($Envoi == 1) { //vérification que la variable envoi est bien à 1
echo("<p><strong>Votre nom : <font color=\"#0000FF\">$nom</font>\n");
echo("<p><strong>Votre prénom : <font color=\"#0000FF\">$prenom</font>\n");
echo("<br>Votre téléphone : <font color=\"#0000FF\">$tel</font>\n");
echo("<br>Votre e-mail : <font color=\"#0000FF\">$email</font>\n");
echo("<p><strong>La race de votre chien : <font color=\"#0000FF\">$race</font>\n");
echo("<p><strong>L'âge de votre chien : <font color=\"#0000FF\">$age</font>\n");
echo("<br>Votre texte : <font color=\"#0000FF\">$affich_remarques</font>\n");
echo("<p>&nbsp;</p>");
mail($MailTo, $MailSubject, $MailBody, $MailHeader); //envoi du message
mail($MailCc, $MailSubject, $MailBody, $MailHeader); //envoi du communiqué (enlever // pour le rendre opérationnel
echo("<p>Votre message a bien été envoyé.<br>Merci de vos commentaires.");
echo("<p>&nbsp;</p><p>&nbsp;</p><p align=\"center\"><a href=\"coordonnees.php\">Retour</strong></a></p>"); //affichage d'un message de confirmation.
}
}
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

26 nov. 2009, 09:50

Bonjour,
<table class=MsoNormalTable border=0 cellpadding=0 style='mso-cellspacing:
1.5pt;mso-table-layout-alt:fixed'>


<tr style='mso-yfti-irow:0;mso-yfti-firstrow:yes'>
<td width=35 style='width:50pt;padding:.75pt .75pt .75pt .75pt'>
<p class=MsoNormal><o:p>&nbsp;</o:p></p>
</td>
Déjà le développement avec Word, c'est honnêtement à bannir de toute urgence :afraid:


Sinon concernant ton problème, je ne vois pas de soucis avec ta captcha, elle semble bien intégrée.
En revanche tu n'utilises pas $_POST pour récupérer les autres champs ce qui peut être la cause de ton problème suivant la config du serveur sur lequel tu te trouves...

Remplace:
$MailBody .= "Votre prénom : $prenom\n";
par
$MailBody .= "Votre prénom : ".$_POST['prenom']."\n";
...et idem pour tous les champs de formulaire que tu récupères...


Enfin, mais ça sera à faire quand ton formulaire fonctionnera, n'oublie pas de filtrer toutes les variables envoyées par l'utilisateur de ton site : post167238.html?hilit=filter#p167238
Quand tout le reste a échoué, lisez le mode d'emploi...

Wolfen38
Invité n'ayant pas de compte PHPfrance

26 nov. 2009, 10:34

Alors, en m'inspirant de ta réponse (utilisation de $_post), j'arrive à récupérer toutes les variables.

Maintenant, le problème, c'est la fonction mail qui merde, j'ai l'erreur suivante :
Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in K:\Fm\site\site actuel php\formrenseignement.php on line 109
correspondant à la ligne :
mail($MailTo, $MailSubject, $MailBody, $MailHeader);
Une précision : En recopiant ta syntaxe, j'avais encore des erreus, donc j'ai laissé ce que j'avais, mais avant ça, j'ai rajouté ces ligne là :
$nom= $_POST['nom'];
$prenom= $_POST['prenom'];
$tel= $_POST['tel'];
$email= $_POST['email'];
$race= $_POST['race'];
$age= $_POST['age'];
$remarques= $_POST['remarques'];
Tu peux encore qlq chose pour moi ?

Wolfen38
Invité n'ayant pas de compte PHPfrance

26 nov. 2009, 10:42

Autant pour moi, c'est tout bon, c'est juste qu'en local, je suis mal paramétrer, mais en ligne ça marche nickel.

Merci bcp de ton aide.