Votre question
Résolu

[Résolu] Initialisation formulaire php

Tags :
  • Php
  • Email
  • Programmation
Dernière réponse : dans Programmation
29 Novembre 2013 22:14:14

Bonjour,

Après avoir trouvé des idées de formulaires sécurisés vis à vis des spammers, j'ai intégré un formulaire dans mon site.
Cependant, lorsque je me rends sur la page concernée, que je remplis les champs, et clique sur "envoyer", le message ne part pas (je l'ai vérifié avec une condition et un alert()).

Après avoir cliqué sur "envoyer", je suis naturellement renvoyé sur ma page d'accueil : en remplissant à nouveau le formulaire (avec n'importe quelles autres infos acceptables), le message part.
Il semblerait qu'il faille "rafraichir" le formulaire pour le rendre opérationnel.

Pourquoi cela?

En espérant que mon code vous sera lisible ;) 


  1. <?php
  2.  
  3. function generateFormToken($form)
  4. {
  5.  
  6. $token = md5(uniqid(microtime(), true));
  7. $_SESSION[$form.'_token'] = $token;
  8. return $token;
  9. }
  10.  
  11. function verifyFormToken($form)
  12. {
  13.  
  14. if (!isset($_SESSION[$form.'_token']))
  15. {
  16. return false;
  17. }
  18.  
  19. if (!isset($_POST['token']))
  20. {
  21. return false;
  22. }
  23.  
  24. if ($_SESSION[$form.'_token'] !== $_POST['token'])
  25. {
  26. return false;
  27. }
  28.  
  29. return true;
  30. }
  31.  
  32. function checkWhitelist ($list)
  33. {
  34. foreach ($_POST as $key => $item)
  35. {
  36. if (!in_array($key, $list))
  37. {
  38. return false;
  39. }
  40. }
  41.  
  42. return true;
  43. }
  44.  
  45. $whitelist = array('nom', 'mail', 'message', 'envoyer', 'control', 'token');
  46.  
  47. if(isset($_POST['nom']) && verifyFormToken('contact_form') && checkWhitelist($whitelist) && $_POST['control'] == 123)
  48. {
  49. $mail_entete = "MIME-Version: 1.0\r\n";
  50. $mail_entete .= "From: {$_POST['nom']} "
  51. ."<{$_POST['mail']}>\r\n";
  52. $mail_entete .= 'Reply-To: '.$_POST['mail']."\r\n";
  53. $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
  54. $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
  55. $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
  56. $to = 'moi@domaine.fr';
  57. $subject = 'Formulaire';
  58. $textmessage = $_POST['message']."\n";
  59.  
  60. mail($to, $subject, $textmessage, $mail_entete);
  61. }
  62. $token = generateFormToken('contact_form');
  63. ?>
  64.  
  65. <html>
  66. <head>
  67. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
  68. <script type="text/javascript">
  69. $(function(){
  70. $('#mail').bind('focus', function(){
  71. $("#control").val('123');
  72. });
  73. });
  74. </script>
  75. <script src="script.js"></script>
  76. </head>
  77.  
  78. <body>
  79. <form action="" method="post" name="contact_form">
  80. <label for="nom">Nom</label>
  81. <input type="text" name="nom" id="nom" />
  82. <label for="mail">Mail</label>
  83. <input type="email" name="mail" id="mail" />
  84. <label for="message">Message</label>
  85. <textarea name="message"></textarea>
  86. <input type="hidden" name="control" id="control" value="0" />
  87. <input type="hidden" name="token" value="<?php echo $token; ?>" />
  88. <input id="send" type="submit" name="envoyer" value="Envoyer" />
  89. </form>
  90. </body>
  91. </html>

Autres pages sur : resolu initialisation formulaire php

a b L Programmation
29 Novembre 2013 23:39:51

Salut,
A première vue cela semble correcte, j'ai même tester ton code...
Je ne vois pas d'erreur...

( ps: la vérification par JavaScript n'est pas tres utils .. )
m
0
l
4 Décembre 2013 21:59:10

Bonsoir!

Sur le site, pour afficher le formulaire, il faut d'abord cliquer sur un bouton, qui modifie le CSS par un javascript. (oui, je débute ;)  )

Après quelques autres tests :
- sur Wampserveur, nickel
- sur Internet, le pb se pose..!
m
0
l
Contenus similaires
a b L Programmation
5 Décembre 2013 05:09:30

toinouripoux a dit :

Sur le site, pour afficher le formulaire, il faut d'abord cliquer sur un bouton, qui modifie le CSS par un javascript. (oui, je débute ;)  )
!


un bot ne charge même pas le css ... protection inutile ...

En lui même le code marche, la seul chose qui pourrait bugger c'est l'envoi de mail ...

m
0
l
5 Décembre 2013 23:34:52

andrelec1 a dit :
toinouripoux a dit :

Sur le site, pour afficher le formulaire, il faut d'abord cliquer sur un bouton, qui modifie le CSS par un javascript. (oui, je débute ;)  )
!


un bot ne charge même pas le css ... protection inutile ...

En lui même le code marche, la seul chose qui pourrait bugger c'est l'envoi de mail ...



Oui, le CSS est là pour décorer.

Après avoir enlevé le décorum en CSS, le probleme reste : le message n'est pas envoyé à la première tentative.
m
0
l
a b L Programmation
6 Décembre 2013 04:32:26

-_-" j'ai l'impression de tournée en rond !!!

Le code marche parfaitement...
ajoute :
  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>

au début de ton code et dit nous si tu a des erreur/warning qui s'affiche !
m
0
l
7 Décembre 2013 11:11:42

Après ajout du code, pas d'erreurs affichées.

Un point qui m'étonne surtout :
- Avec le même code sur le serveur et sur Wampserver, le résultat n'est pas le même!

Avec :

  1. <?php
  2. ini_set('display_errors', 1);
  3. ?>


Et:

  1. if (mail($to, $subject, $textmessage, $mail_entete)) {
  2. echo "<script>alert(\"Message envoye\")</script>";
  3. }
  4. else {
  5. echo "<script>alert(\"It doesn't work...Please try again.\")</script>";
  6. }
m
0
l

Meilleure solution

9 Février 2014 22:07:47

Youhou!!

On m'a donné la solution :
- Dans le fichier .htaccess, il faut rajouter cette ligne :

SetEnv SESSION_USE_TRANS_SID 0

Aah! (merci http://www.lecentre.net/fratoblog/ )
partage
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS