Petit soucis avec CAPTCHA et envoi de formulaire!

Petit soucis avec CAPTCHA et envoi de formulaire! - PHP - Programmation

Marsh Posté le 13-11-2007 à 15:17:36    

Bonjour,
j'ai créé un formulaire avec plusieurs champs à remplir et je voulais insérer un CAPTCHA tout simple de vérification à la fin (CAPTCHA où l'on répond à une question et non CAPTCHA image).
Mon problème vient du fait que réponse juste ou fausse au captcha, le formulaire est envoyé sur mon adresse mail et les données de mon formulaire n'apparaissent pas sur le mail que je reçois.
 
Donc j'ai ma page de formulaire (que je n'indique pas ici, le pb ne vient pas de là) dirigée sur la page de vérification de CAPTCHA puis sur ma page d'envoi de formulaire.
 
 
Page de vérification de CAPTCHA
 

Code :
  1. <?php
  2. session_start();
  3. if(isset($_POST['reponsecaptcha1']))
  4. $tareponse = $_POST['reponsecaptcha1'];
  5. else
  6. $tareponse = "";
  7. $resultatcaptcha1 = $_SESSION['resultatcaptcha1'];
  8. if($resultatcaptcha1 == $tareponse) {
  9. header ('Location: http://www.page_envoi_formulaire.php');
  10. }
  11. else {
  12. echo "La réponse était <b>$resultatcaptcha1</b>\nVotre réponse était : <b>$tareponse</b>\nMauvaise réponse !";
  13. }
  14. ?>


 
En gros, j'aimerais que si la réponse est juste, je sois dirigé sur la page "http://www.page_envoi_formulaire.php" (code ci-dessous), et si la réponse est fausse, que le script s'arrête en indiquant "Mauvaise réponse".
 
 
Page envoi formulaire
 

Code :
  1. <?php
  2. $TO = "machin@gmail.com";
  3. $h  = "From: " . $TO;
  4. $message = "";
  5. while (list($key, $val) = each($HTTP_POST_VARS)) {
  6.   $message .= "$key : $val\n";
  7. }
  8. mail($TO, $subject, $message, $h);
  9. Header("Location: http://remerciements.php" );
  10. ?>


 
En plaçant ces deux codes sur la même page, j'obtiens les réponses de mon formulaire mais le CAPTCHA n'est pas pris en compte (bonne ou mauvaise réponse, le mail est envoyé).
En faisant comme ici, sur deux pages distinctes, le mail est envoyé mais sans rien dedans (je n'ai pas les réponses du formulaire).
Sans CAPTCHA, tout marche nickel mais là...  
 
J'ai sûrement fait une erreur quelque part  mais je n'arrive pas à voir où.
 
Avez-vous une idée ?
 
Max


Message édité par lofo7 le 27-10-2011 à 11:51:05
Reply

Marsh Posté le 13-11-2007 à 15:17:36   

Reply

Marsh Posté le 13-11-2007 à 15:21:59    

pourquoi ne pas faire le traitement du formulaire à la place de l'actuel header ?
 
les valeurs des réponses en session (apparemment pour l'une) et récupérée sont correctes ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 13-11-2007 à 15:27:50    

Merci de ta réponse rapide.
J'ai déjà tenté de traiter le formulaire à la place du 'header' "header ('Location: http://www.page_envoi_formulaire.php');" .
 
En faisant de cette manière j'arrive à obtenir des réponses justes au formulaire mais le CAPTCHA n'est pas pris en compte. Ainsi, que j'ai une réponse  fausse ou juste au CAPTCHA le mail est envoyé.
 
Et pour ta deuxième question, comme je viens de le dire, si je mélange les deux scripts, les valeurs récupérées sont correctes oui mais c'est ce CAPTCHA qui marche pas. grrrrrrrrrrrrrrrr !!!
 
Voilà pourquoi j'ai essayé en divisant le code en deux fichiers mais ça marche pas non plus.
 
EDIT : Comme je disais juste au dessus même en regroupant tout sur une page comme ceci :

Code :
  1. <?php
  2. session_start();
  3. if(isset($_POST['reponsecaptcha1']))
  4. $tareponse = $_POST['reponsecaptcha1'];
  5. else
  6. $tareponse = "";
  7. $resultatcaptcha1 = $_SESSION['resultatcaptcha1'];
  8. if($resultatcaptcha1 == $tareponse) {
  9. $TO = "monadresse@mail.com";
  10. $h  = "From: " . $TO;
  11. $message = "";
  12. while (list($key, $val) = each($HTTP_POST_VARS)) {
  13.   $message .= "$key : $val\n";
  14. }
  15. mail($TO, $subject, $message, $h);
  16. Header("Location: http://remerciements.php" );
  17. }
  18. else {
  19. echo "La réponse était <b>$resultatcaptcha1</b>\nVotre réponse était : <b>$tareponse</b>\nMauvaise réponse !";
  20. }
  21. ?>


 
Et bien j'obtiens avec ce code toutes les réponses à mon formulaire mais le CAPTCHA n'est pas pris en compte. Que la réponse au CAPTCHA soit juste ou fausse, le mail me parvient :(


Message édité par lofo7 le 13-11-2007 à 16:57:51
Reply

Marsh Posté le 14-11-2007 à 22:37:25    

tu peux montrer le code du formulaire aussi ?


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 15-11-2007 à 09:53:43    

Alors cette fois-ci, le CAPTCHA fonctionne mais toujours pas comme je le souhaite. Il ne marche pas quand je donne une réponse (bonne ou mauvaise) et fonctionne à merveille quand je ne donne pas de réponses.  :pt1cable:  
 
Voilà le code du formulaire :
 

Code :
  1. <form action="formmail_autres.php" method="post" name="form">
  2. <table border="0" cellpadding="5" cellspacing="0" width="550">
  3. <tr>
  4.  <td width="212">Votre nom (ou un simple pseudo) :</td>
  5.  <td width="318"><input type="text" name="Pseudo" size="40"></td>
  6. </tr>
  7.         <tr>
  8.     <td>Votre email :</td>
  9.     <td><input type="text" name="Email" size="40"></td></tr>
  10. <tr>
  11.  <td>Artiste :</td>
  12.  <td><input type="text" name="Artiste" size="40"></td>
  13. </tr>
  14.      <tr>
  15.  <td>Album :</td>
  16.  <td><input type="text" name="Album" size="40"></td>
  17. </tr>
  18.         <tr>
  19.  <td>Titre de l'album :</td>
  20.  <td><input type="text" name="Titre_album" size="40"></td>
  21. </tr>
  22.         <tr>
  23.  <td>Sujet :</td>
  24.  <td><input type="text" name="Sujet" size="40"></td>
  25. </tr>
  26.         <tr>
  27.  <td>Commentaires :</td>
  28.  <td><textarea rows="10" name="Commentaires" cols="45"></textarea></td>
  29. </tr>
  30.         <tr>
  31.  <td>Voulez-vous que votre nom (pseudo) apparaisse sur le site avec vos informations ?</td>
  32.  <td><input name="infos" type="radio" value="Oui" />
  33.  Oui
  34.      
  35.         <input name="infos" type="radio" value="Non" />Non</td>
  36. </tr>
  37.     <tr>
  38.  <td>   
  39. <?php
  40. srand();
  41. echo "<u>Captcha 1</u><br /><br />";
  42. $caracteres = array('A','Z','E','R','T','Y','U','I','O','P','Q','S','D','F','G','H','J','K','L','M','W','X','C','V','B','N','a','z',
  43. 'e','r','t','y','u','i','o','p','q','s','d','f','g','h','j','k','l','m','w','x','c','v','b','n');
  44. $mini = rand(5,10);
  45. $maxi = rand(10,20);
  46. $longueurdelachaine = rand($mini,$maxi);
  47. for($i = 1; $i <= $longueurdelachaine; $i++)
  48. {
  49. $chaine .= $caracteres[rand(0,51)]; //on concatène à chaque fois la variable $chaine
  50. }
  51. $position = rand(5,$longueurdelachaine);
  52. $indice = $position -1;
  53. $_SESSION['resultatcaptcha1'] = substr($chaine, $indice, 1);
  54. echo "Voici la chaîne de caractère : <b>$chaine</b><br />";
  55. echo "Quel est le caractère à la position <b>$position</b> ?<br /><br />";
  56. ?>
  57. </td>
  58. <td><input type="text" name="reponsecaptcha1" value="" /></td>
  59. </tr>     
  60.     <tr>
  61.  <td>C'est fini...</td>
  62.  <td>
  63.   <div align="left">
  64.     <input type="submit" value="Envoyer"> -
  65.                  <input type="reset" value="Effacer"></div>  </td>
  66. </tr>
  67. </table>
  68. </form>


Message édité par lofo7 le 15-11-2007 à 09:54:45
Reply

Marsh Posté le 17-11-2007 à 13:42:06    

Personne n'a d'idées ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed