Probleme pour afficher le Captcha image dans mon formulaire

Répondre
tortue33
le 25/04/2011 à 17:33
tortue33
Bonjour, voila plusieurs jours que je me bas avec mon code car je suis un débutant en php.
Je n'arrive pas a faire afficher l'image de ma question de mon captcha mais avec la question écrite ça marche nickel, le code source vient du site php-astux.info puis j'ai essayé de le modifier.
Voici mon code sur ma page: me_contacter.php

  1. <?php // Systeme antispam
  2. // on inclue le fichier des questions/reponses
  3. require_once('antispam.php');

  4. // on tire au sort une question
  5. $nospam = NoSpamQuestion();
  6. /*
  7. ********************************************************************************************
  8. FORMULAIRE DE CONTACT EN PHP - http://www.php-astux.info - CONFIGURATION
  9. ********************************************************************************************
  10. */
  11. // destinataire est votre adresse mail. Pour envoyer a plusieurs a la fois, separez-les par une virgule
  12. $destinataire = "Mon adresse Email";

  13. // copie ? (envoie une copie au visiteur)
  14. if (isset($_POST['mailcopy']))
  15. {
  16. $copie = "oui";
  17. };
  18. // Messages de confirmation du mail
  19. $message_envoye = "Votre message nous est bien parvenu ! Nous vous r&eacute;pondrons d&egrave;s que possible.";
  20. $message_non_envoye = "L'envoi du mail a &eacute;chou&eacute;, veuillez r&eacute;essayer SVP.";

  21. // Message d'erreur du formulaire
  22. $message_formulaire_invalide = "V&eacute;rifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

  23. /*
  24. ********************************************************************************************
  25. FIN DE LA CONFIGURATION
  26. ********************************************************************************************
  27. */

  28. if (isset($_POST['envoi']))
  29. {
  30. $err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

  31. /*
  32. * cette fonction sert a nettoyer et enregistrer un texte
  33. */
  34. function Rec($text)
  35. {
  36. $text = trim($text); // delete white spaces after & before text
  37. if (1 === get_magic_quotes_gpc())
  38. {
  39. $stripslashes = create_function('$txt', 'return stripslashes($txt);');
  40. }
  41. else
  42. {
  43. $stripslashes = create_function('$txt', 'return $txt;');
  44. }

  45. // magic quotes ?
  46. $text = $stripslashes($text);
  47. $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
  48. $text = nl2br($text);
  49. return $text;
  50. };

  51. /*
  52. * Cette fonction sert a verifier la syntaxe d'un email
  53. */
  54. function IsEmail($email)
  55. {
  56. $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
  57. return (eregi($pattern,$email)) ? true : false;
  58. };

  59. // formulaire envoye, on recupere tous les champs.
  60. $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
  61. $email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
  62. $phone = (isset($_POST['phone'])) ? Rec($_POST['phone']) : '';
  63. $website = (isset($_POST['website'])) ? Rec($_POST['website']) : '';
  64. if ($website == 'http://') { $website = ''; }
  65. $objet =(isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
  66. $message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
  67. // On va verifier les variables et l'email ...
  68. $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si errone, soit il vaut l'email entre
  69. $err_formulaire = (IsEmail($email)) ? false : true;

  70. // n'oublions pas les 2 variables du captcha :
  71. $code = (isset($_POST['code'])) ? strtolower($_POST['code']) : ''; // contient la reponse du visiteur
  72. $nospam_question = (isset($_POST['nospam_question'])) ? $_POST['nospam_question'] : ''; // contient un nombre : le numero de la vraie reponse

  73. // On demande la vraie reponse
  74. $verif_nospam = NoSpamQuestion('ans', $nospam_question);

  75. // on compare la 'vraie' reponse et celle du visiteur
  76. if ($code != strtolower($verif_nospam['answer']))
  77. {
  78. // le formulaire s'arrete ici
  79. echo '<p><font color="#ff0000">Vous n&rsquo;avez pas r&eacute;pondu correctement &agrave; la question&hellip;<a href="me_contacter.php">Retour au formulaire</a></font></p>';
  80. }
  81. else
  82. {
  83. // traitement du formulaire comme souhaite ...

  84. if (($nom != '') && ($email != '') && ($objet != '') && ($message != ''))
  85. {
  86. // les 4 variables sont remplies, on genere puis envoie le mail
  87. $header = 'From: '.$nom.' <'.$email.'>' . "\r\n";
  88. $header .= 'MIME-Version: 1.0'."\r\n";
  89. $header .= 'Content-Type: text/plain; charset="UTF-8"'."\r\n";
  90. $header .= 'Content-Transfer-Encoding: 7bit'."\r\n";
  91. // envoyer une copie au visiteur ?
  92. if ($copie == 'oui')
  93. {
  94. $cible = $destinataire.','.$email;
  95. }
  96. else
  97. {
  98. $cible = $destinataire;
  99. };

  100. // Remplacement de certains caracteres speciaux
  101. $objet = str_replace("&hellip;","&#8230;",$objet);
  102. $objet = str_replace("&euro;","&#8364;",$objet);
  103. $objet = str_replace("&rsquo;","&#8217;",$objet);
  104. $objet = str_replace("&#38;#039;","'",$objet);
  105. $objet = str_replace("&#38;#8217;","'",$objet);
  106. $objet = str_replace("&quot;",'"',$objet);
  107. $objet = str_replace('<br>','',$objet);
  108. $objet = str_replace('<br />','',$objet);
  109. $objet = str_replace("&lt;","<",$objet);
  110. $objet = str_replace("&gt;",">",$objet);
  111. $objet = str_replace("&amp;","&",$objet);
  112. $message = str_replace("&hellip;","&#8230;",$message);
  113. $message = str_replace("&euro;","&#8364;",$message);
  114. $message = str_replace("&rsquo;","&#8217;",$message);
  115. $message = str_replace("&#38;#039;","'",$message);
  116. $message = str_replace("&#38;#8217;","'",$message);
  117. $message = str_replace("&quot;",'"',$message);
  118. $message = str_replace('<br>','',$message);
  119. $message = str_replace('<br />','',$message);
  120. $message = str_replace("&lt;","<",$message);
  121. $message = str_replace("&gt;",">",$message);
  122. $message = str_replace("&amp;","&",$message);

  123. // rajout de telephone + URL
  124. $rajout = '';
  125. if ($phone != '')
  126. {
  127. $rajout .= $phone."\n";
  128. }

  129. if ($website != '')
  130. {
  131. $rajout .= $website."\n";
  132. };

  133. // on met un saut de ligne supplementaire
  134. $message = $rajout."\n".$message;

  135. // Envoi du mail
  136. if (mail($cible, $objet, $message, $header))
  137. {
  138. echo '<p ALIGN=center><font color="#d612b5"><font size=5>'.$message_envoye.'</font></font></p>'."\n";
  139. }
  140. else
  141. {
  142. echo '<p ALIGN=center><font color="#ff0000">'.$message_non_envoye.'</font></p>'."\n";
  143. };
  144. }
  145. else
  146. {
  147. // une des 3 variables (ou plus) est vide ...
  148. echo '<p ALIGN=center><font color="#ff0000">'.$message_formulaire_invalide.' <a href="me_contacter.php">Vider le formulaire</a></font></p>'."\n";
  149. $err_formulaire = true;
  150. };
  151. }; // fin du if ($code != strtolower($verif_nospam['answer']))
  152. }; // fin du if (!isset($_POST['envoi']))

  153. if (($err_formulaire) || (!isset($_POST['envoi'])))
  154. {
  155. // afficher le formulaire

  156. echo ' <div style="color: rgb(102, 51, 255)"><br />Pour tous renseignements, suggestions, r&eacute;actions, et contributions vous pouvez nous contacter en remplissant ce formulaire :<br /><br /></div>'."\n";
  157. echo '<form id="contact" method="post" action="">'."\n";
  158. echo ' <fieldset><legend
  159. style="color: rgb(214, 18, 181);">Coordonn&eacute;es requises :</legend>'."\n";
  160. echo ' <p>'."\n";
  161. echo ' <label
  162. style="color: rgb(102, 51, 255);"for="nom">Nom complet :&nbsp;&nbsp;</label>'."\n";
  163. echo ' <input type="text" id="nom" name="nom" size="25" value="'.stripslashes($nom).'" tabindex="1" />'."\n";
  164. echo ' </p>'."\n";
  165. echo ' <p>'."\n";
  166. echo ' <label
  167. style="color: rgb(102, 51, 255);"for="email">Adresse e-mail :</label>'."\n";
  168. echo ' <input type="text" id="email" name="email" size="25" value="'.stripslashes($email).'" tabindex="2" />'."\n";
  169. echo ' </p>'."\n";
  170. echo ' </fieldset>'."\n";

  171. echo ' <fieldset><legend
  172. style="color: rgb(214, 18, 181);">Coordonn&eacute;es facultatives :</legend>'."\n";
  173. echo ' <p>'."\n";
  174. echo ' <label
  175. style="color: rgb(102, 51, 255);"for="phone">T&eacute;l&eacute;phone :</label>'."\n";
  176. echo ' <input type="text" id="phone" name="phone" size="12" value="'.stripslashes($phone).'" tabindex="3" />'."\n";
  177. echo ' </p>'."\n";
  178. echo ' <p>'."\n";
  179. echo ' <label
  180. style="color: rgb(102, 51, 255);"for="website">Site web:&nbsp;&nbsp;&nbsp;</label>'."\n";
  181. echo ' <input type="text" id="website" name="website" size="40" value="http://"'.stripslashes($website).'" tabindex="4" />'."\n";
  182. echo ' </p>'."\n";
  183. echo ' </fieldset>'."\n";

  184. echo ' <fieldset><legend
  185. style="color: rgb(214, 18, 181);">Votre message :</legend>'."\n";
  186. echo ' <p>'."\n";
  187. echo ' <label
  188. style="color: rgb(102, 51, 255);"for="objet">Objet :</label>'."\n";
  189. echo ' <input type="text" id="objet" name="objet" size="50" value="'.stripslashes($objet).'" tabindex="5" />'."\n";
  190. echo ' </p>'."\n";
  191. echo ' <p>'."\n";
  192. echo ' <label
  193. style="color: rgb(102, 51, 255);"for="message">Message :<br><br/></label>'."\n";
  194. echo ' <textarea id="message" name="message" tabindex="6" cols="80" rows="10">'.stripslashes($message).'</textarea>'."\n";
  195. echo ' </p>'."\n";
  196. echo ' </fieldset>'."\n";

  197. echo ' <fieldset><legend
  198. style="color: rgb(214, 18, 181);">Syst&egrave;me anti-robot (obligatoire) :</legend>'."\n";
  199. echo ' <p ALIGN=center><font color="#6633FF"><label for="code">R&eacute;pondez EN LETTRES, en minuscule, en un seul mot (sans d&eacute;terminant) &agrave; la question suivante :<br><br /></label>'.$nospam['img'].'<input type="text" name="code" id="code" /><input type="hidden" id="img" name="img" value="'.$nospam['num'].'" /></font></p>'."\n";
  200. echo ' </fieldset>'."\n";

  201. echo ' <div style="text-align:center;"><font color="#d612b5"><input type="checkbox" id="mailcopy" name="mailcopy" />Cochez cette case si vous souhaitez recevoir une copie de cet e-mail.</div>'."\n";
  202. echo ' <br><div style="text-align:center;"><input type="submit" name="envoi" value="Envoyer le formulaire !" /></div>'."\n";
  203. echo '</form>'."\n";
  204. };
  205. ?>


  206. Mon code: antispam.php

  207. <?php
  208. /*
  209. * NoSpamQuestion affiche une question pour la validation d'un formulaire ...
  210. * $mode, mode question ou réponse par défaut tirage au sort de question {string}
  211. * $answer, lors de la demande d'une réponse à la question numero tant ... {int}
  212. *
  213. * @returns array
  214. *
  215. * Ajouter une question :
  216. * copier/coller ces lignes et remplir le contenu entre guillemets doubles :
  217. *
  218. * $array_pictures[$j]['num'] = $j; // ne pas changer cette ligne
  219. * $array_pictures[$j]['question'] = "mettre ici la question (correspondant à l'image si vous utilisez une image)";
  220. * $array_pictures[$j]['answer'] = "mettre ici la réponse à l'énigme";
  221. * $j++; // ne pas oublier cette ligne dans la copie :-)
  222. *
  223. * C'est tout. Question suivante ? :-)
  224. *
  225. */
  226. function NoSpamQuestion($mode = 'ask', $answer = 0)
  227. {
  228. $array_pictures = array(); $j = 0;

  229. $array_pictures[$j]['num'] = $j;
  230. $array_pictures[$j]['question'] = "La multiplication de 4 par 4 donne ...";
  231. $array_pictures[$j]['answer'] = "seize";
  232. $j++;
  233. $array_pictures[$j]['num'] = $j;
  234. $array_pictures[$j]['question'] = "La multiplication de 2 par 2 donne ...";
  235. $array_pictures[$j]['answer'] = "quatre";
  236. $j++;
  237. $array_pictures[$j]['num'] = $j;
  238. $array_pictures[$j]['img'] = "C53345.jpg"; // ne pas mettre cette ligne si vous ne voulez pas utiliser d'image
  239. $array_pictures[$j]['question'] = "Respecter les majuscules"; //mettre ici la question (correspondant à l'image si vous utilisez une image)
  240. $array_pictures[$j]['answer'] = "FPBXV"; //mettre ici la réponse à l'énigme
  241. $j++;

  242. if ($mode != 'ans')
  243. {
  244. // on est en mode 'tirer au sort', on tire une image aléatoire
  245. $lambda = rand(0, count($array_pictures)-1);
  246. return $array_pictures[$lambda];
  247. }
  248. else
  249. {
  250. // on demande une vraie réponse
  251. foreach($array_pictures as $i => $array)
  252. {
  253. if ($i == $answer)
  254. {
  255. return $array;
  256. break;
  257. };
  258. };
  259. }; // Fin if ($mode != 'ans')
  260. };
  261. ?>





Merci pour votre aide, j'ai un peu honte de vous montrez ce code mais la je patauge car je suis vraiment mauvais.
Tortue
LupusMic
le 10/05/2011 à 09:58
LupusMic
Ne te dévalorise pas, ce n'est pas facile le développement web. Ceci dit, /a priori/, ce système n'est pas bon car il est prédictible.

Pour qu'un captcha soit bon, il faudrait qu'il soit totalement aléatoire.

Mais là il y a trop de code, tu devrais diviser tout ça pour déterminer où sont tes erreurs. Déjà, la fonction NoSpamQuestion me semble suspecte. Regarde là de plus près :)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours