Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2794 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Intégrer le code du captcha au reste du code de traitement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] Intégrer le code du captcha au reste du code de traitement

n°2133527
fnisse
Posté le 28-03-2012 à 16:38:45  profilanswer
 

Bonjour à tous.  
Je n'y connais absolument rien en PHP. Je ne me débrouille qu'en HTML et en CSS, ce qui m'a toujours convenu pour la création de petits sites, auxquels, au besoin, j'ajoutais un formulaire dont l'envoi était traité par des scripts préconçus (par exemple "formail.pl" -- si je me souviens bien de l'extension, lorsque j'hébergais chez Free.fr).
Là, c'est différent. Je crée mon site Web professionnel (hébergé chez OVH) et me dépatouille pour tout ce qui est la création de mes pages non dynamiques, avec au besoin l'application d'un peu de Javascript que je vais chercher ici ou là.
Bref, j'aimerais toutefois que les champs du formulaire que j'ai créé soient transmis vers une page PHP qui vérifie certaines conditions pour, ensuite, envoyer les entrées de champs sur l'adresse courriel de mon choix.
 
Voici ce que j'ai pu mettre en place.
 
Voici le code source de mon formulaire :
 

Code :
  1. <?php
  2. $cryptinstall="./crypt/cryptographp.fct.php";
  3. include $cryptinstall; 
  4. ?>
  5. (...)
  6. <form action="verifier.php" method="post">
  7. <span class="formuTxt">Veuillez introduire votre nom et courriel, en plus de l'objet de votre demande, afin que je puisse vous répondre en bonne et due forme.</span>
  8.     <br /><br /><br />
  9.     <span class="formuNId">Nom complet : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  10.     <input name="nom" class="formuBox" size="30" type="text" />
  11.     <br />
  12.     <span class="formuNId">Adresse e-mail : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  13.     <input name="email_from" class="formuBox" size="30" type="text" />
  14.     <br />
  15.     <span class="formuNReq">Sujet de votre requête : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  16.     <input name="sujetreq" class="formuBox" size="30" type="text" />
  17.     <br />
  18.     <span class="formuNReq">Votre requête :</span>
  19.     <br />
  20.     <textarea name="msgreq" class="formuBox" cols="55" rows="15"></textarea>
  21.     <br /><br />
  22. <table cellpadding="0px" cellspacing="0px">
  23. <tr><td>
  24. <?php dsp_crypt(0,1); ?>
  25. </td><td>
  26. <input value="Recopiez le code" onclick="this.value=''"; type="text" name="code"></td></tr>
  27. </table>
  28. <br />
  29. <input type="submit" name="submit" value="Envoyer">
  30. </form>


Et voici le code encore très fragile de ma page de traitement, en l'occurrence VERIFIER.PHP :
 

Code :
  1. <?php
  2. $cryptinstall="./crypt/cryptographp.fct.php";
  3. include $cryptinstall; 
  4. ?>
  5. (...)
  6. <?php
  7. $msg_erreur = "Afin que je puisse vous répondre, votre adresse courriel est nécessitée.";
  8. $msg_ok = "Votre requête a bien été transmise. J'y répondrai dans les plus brefs délais.";
  9. $message = $msg_erreur;
  10. define('MAIL_DESTINATAIRE','mon_adresse_courriel');
  11. define('MAIL_SUJET','Requête client');
  12. if (empty($_POST['email_from']))
  13. $message .= $msg_erreur;
  14. if (chk_crypt($_POST['code']))
  15. echo "Merci de votre confiance !<br/>"; 
  16. else echo "Erreur, le code recopié est incorrect<br/>" ;
  17. if (strlen($message) > strlen($msg_erreur)) {
  18.    echo $message; die();
  19. }
  20. foreach($_POST as $index => $valeur) {
  21.   $$index = stripslashes(trim($valeur));
  22. }
  23. $mail_entete  = "MIME-Version: 1.0\r\n";
  24. $mail_entete .= "From: {$_POST['nom']} "
  25.              ."<{$_POST['email']}>\r\n";
  26. $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
  27. $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
  28. $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
  29. $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
  30. $mail_corps  = "Message de : $nom\n";
  31. $mail_corps .= "Courriel : $email_from\n";
  32. $mail_corps .= "Sujet : $sujetreq\n";
  33. $mail_corps .= "Objet : $msgreq";
  34. if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  35.   echo $msg_ok;
  36. } else {
  37.   echo "Une erreur est survenue lors de l'envoi du formulaire par email";
  38. }
  39. ?>


Le captcha (dont j'ai isolé le code y afférant par quelques sauts de lignes, à la fois pour la page du formulaire et pour la page de traitement, à défaut de pouvoir le mettre en couleur) fonctione très bien. Sauf que je ne parviens pas à l'intégrer au code PHP de ma page VERIFIER.PHP.
 
Comme réponse, si je remplis le champ e-mail, mais que je ne recopie pas le captcha, j'obtiens ceci : "Erreur, le code recopié est incorrect
Afin que je puisse vous répondre, votre adresse courriel est nécessitée.Afin que je puisse vous répondre, votre adresse courriel est nécessitée."  
Il y a donc contradiction : le message ne devrait pas être envoyé puisque le code du captcha n'a pas bien été recopié par le visiteur (aussi, la deuxième phrase apparaît deux fois au lieu d'une).
 
Autrement dit, je ne sais pas comment intégrer le captcha, qui au demeurant fonctionne très bien (je l'ai testé indépendamment de tout code d'envoi), au reste du code de ma page de traitement des données.
 
Par manque de temps, je ne peux me consacrer à l'étude du PHP, laquelle me demanderait en outre un effort non négligeable parce que la programmation n'est absolument pas mon domaine.  
Je ne peux non plus, d'un point de vue financier, me permettre pour l'instant de confier mon site à une boîte professionelle du Web. C'est aussi le seul lieu de mon site qui demande du PHP, le restant n'étant composé que de HTML, de CSS et d'un tout petit peu de Javascript.
 
Merci infiniment d'avance.
 
----------
ÉDITION :
----------
 
Oui, hourra ! Après des heures d'acharnement, restant sans réponse, j'ai fini, à l'instant, par trouver quelque chose qui a l'air de fonctionner à merveille !

Code :
  1. <?php
  2. $msg_erreur = "Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme ";
  3. $msg_ok = "Votre requête a bien été transmise. Merci de votre confiance. <br/> Je vous répondrai dans les plus brefs délais.";
  4. $message = $msg_erreur;
  5. define('MAIL_DESTINATAIRE','mon_adresse_courriel');
  6. define('MAIL_SUJET','Requête client');
  7. if (empty($_POST['email_from']) || (!chk_crypt($_POST['code'])))
  8. $message .= "afin que je puisse vous répondre.<br/>";
  9. if (strlen($message) > strlen($msg_erreur)) {
  10.    echo $message; die();
  11. }
  12. foreach($_POST as $index => $valeur) {
  13.   $$index = stripslashes(trim($valeur));
  14. }
  15. $mail_entete  = "MIME-Version: 1.0\r\n";
  16. $mail_entete .= "From: {$_POST['nom']} "
  17.              ."<{$_POST['email']}>\r\n";
  18. $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
  19. $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
  20. $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
  21. $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
  22. $mail_corps  = "Message de : $nom\n";
  23. $mail_corps .= "Courriel : $email_from\n";
  24. $mail_corps .= "Sujet : $sujetreq\n";
  25. $mail_corps .= "Objet : $msgreq";
  26. if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  27.   echo $msg_ok;
  28. } else {
  29.   echo "Une erreur est survenue lors de l'envoi du formulaire par email";
  30. }
  31. ?>


Tous vos conseils ne sont pas seulement les bienvenus, ils sont également attendus !
 
J'aimerais par exemple que le message d'erreur ("Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme afin que je puisse vous répondre." ) apparaisse en rouge et non en vert. C'est ma seule balise "<p class=qqchose> PHP DE MA PAGE DE TRAITEMENT </p>" qui contrôle le CSS de cette page de traitement. Comment suis-je censé faire pour faire des distinctions ?
Aussi, comme il n'y a finalement qu'un seul message d'erreur possible, puisque j'ai assemblé les deux conditions de l'adresse courriel et du captcha, il y a sans doute moyen de faire plus simple pour écrire le code relatif à l'erreur.
Enfin, je me demande comment je pourrais perfectionner le tout, surtout d'un point de vue sécuritaire.


Message édité par fnisse le 26-05-2012 à 13:56:15
mood
Publicité
Posté le 28-03-2012 à 16:38:45  profilanswer
 

n°2133639
olivthill
Posté le 29-03-2012 à 11:04:41  profilanswer
 

Citation :

que le message d'erreur ("Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme afin que je puisse vous répondre." ) apparaisse en rouge et non en vert.


Une solution parmi d'autres consiste à remplacer :

$msg_erreur = "Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme ";

par :

$msg_erreur = "<span style='color:red;'>Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme</span>";

n°2133709
format_c
Plouf plouf ...
Posté le 29-03-2012 à 15:06:34  profilanswer
 

Je t'en supplie, ne met pas de Captcha, c'est devenu la plaie du net


Message édité par format_c le 29-03-2012 à 15:06:43

---------------
Mes guitares, ampli, et effets sont en vente !
n°2133723
fnisse
Posté le 29-03-2012 à 16:14:15  profilanswer
 

Merci énormément à vous deux pour vos réponses !
 
@Olivthill : Merci, ça fonctionne parfaitement ! Dois-je dire tant pis si ça ne passe pas par ma feuille de style ? Autrement dit, vis-à-vis des normes (W3C ou autres), que je ne respecte sans doute pas vraiment puisque mon code doit être plutôt sale en dépit de mes quelques efforts, est-ce une solution raisonnable ?   Quoi qu'il en soit, à mon niveau, elle me convient parfaitement et merci encore.
 
@Format_c : tu t'adresses à un ignorant complet en matière de programmation côté serveur. Parce que je suis néanmoins un curieux profane, j'ai par exemple lu un article qui expliquait que les captchas sont aujourd'hui aisément contournés par les hackeurs. Que les captchas audio ne représentent pas une solution viable et que certains organismens pensent à des images de tel ou tel objet qu'il faudrait reconnaître dans une série d'objets divers (par exemple, reconnaître le ou les chiens dans un album de photos de chiens et de chats ;> ). Est-ce pour ces raisons de sécurité qui n'est pas assurée que tu me dis cela  ou bien est-ce pour autre chose ? Parce que s'il ne s'agit que de sécurité, je me dis (sans doute un peu naïvement) qu'il vaut mieux cela que rien du tout.
 


Message édité par fnisse le 02-04-2012 à 17:00:29
n°2134335
fnisse
Posté le 02-04-2012 à 17:19:32  profilanswer
 

Re-bonjour,
Afin d'être le plus précis possible, voici le code du formulaire que je teste et qui intègre le code de traitement à la page de formulaire même (verifier.php n'existe plus et son contenu PHP appartient désormais à formu.php) :
 

Code :
  1. <?php
  2. $cryptinstall="./crypt/cryptographp.fct.php";
  3. include $cryptinstall; 
  4. ?>
  5. <html>...<head>...</head>...<body>...
  6. <form action="formu.php" method="post">
  7. <span class="formuTxt">Veuillez au moins introduire votre courriel, afin que je puisse vous répondre en bonne et due forme.</span>
  8. <br /><br /><br />
  9. <span class="formuNId">Nom complet : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  10. <input name="nom" class="formuBox" size="30" type="text" />
  11. <br />
  12. <span class="formuNId">Adresse e-mail : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  13. <input name="email_from" class="formuBox" size="30" type="text" />
  14. <br />
  15. <span class="formuNReq">Sujet de votre requête : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  16. <input name="sujetreq" class="formuBox" size="30" type="text" />
  17. <br />
  18. <span class="formuNReq">Votre requête :</span>
  19. <br />
  20. <textarea name="msgreq" class="formuBox" cols="55" rows="15"></textarea>
  21. <br /><br />
  22. <table cellpadding="0px" cellspacing="0px">
  23. <tr><td>
  24. <?php dsp_crypt(0,1); ?>
  25. </td><td>
  26. <input name="code" class="formuBox" value="Recopiez le code" onclick="this.value=''"; type="text" /></td></tr>
  27. </table>
  28. <br />
  29. <input type="submit" name="submit" value="Soumettre" />
  30. <p class="formulaire">
  31. <?php
  32. $msg_erreur = "<span style='color:red;'>Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme </span>";
  33. $msg_ok = "Votre requête a bien été transmise. Merci de votre confiance. <br/> Attendez-vous à une réponse dans les plus brefs délais.";
  34. $message = $msg_erreur;
  35. define('MAIL_DESTINATAIRE','MonAdresseCourrielIci');
  36. define('MAIL_SUJET','Requête client');
  37. if (empty($_POST['email_from']) || (!chk_crypt($_POST['code'])))
  38. {
  39. $message .= "<span style='color:red;'>afin que je puisse vous répondre.<br/></span>";
  40. }
  41. if (strlen($message) > strlen($msg_erreur))
  42. {
  43. echo $message;
  44. die();
  45. }
  46. foreach($_POST as $index => $valeur) {
  47.   $$index = stripslashes(trim($valeur));
  48. }
  49. $mail_entete  = "MIME-Version: 1.0\r\n";
  50. $mail_entete .= "From: {$_POST['nom']} "
  51.              ."<{$_POST['email']}>\r\n";
  52. $mail_entete .= 'Reply-To: '.$_POST['email']."\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. $mail_corps  = "Message de : $nom\n";
  57. $mail_corps .= "Courriel : $email_from\n";
  58. $mail_corps .= "Sujet : $sujetreq\n";
  59. $mail_corps .= "Objet : $msgreq";
  60. if (mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete)) {
  61.   echo $msg_ok;
  62. } else {
  63.   echo "Une erreur est survenue lors de l'envoi du formulaire par email";
  64. }
  65. ?>
  66. </p>
  67. </form>
  68. ...
  69. </body>
  70. </html>


 
Voici alors mes questions principales. Que dois-je modifier pour :
 
- qu'à l'arrivée sur la page du formulaire, le visiteur ne voie pas par défaut la phrase d'erreur "Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme afin que je puisse vous répondre." ?
 
- que le contenu HTML du bas de la page (ce qui se trouve en dessous du formulaire) apparaisse lorsque le visiteur s'est trompé ? Il n'apparaît seulement en effet que lorsque le visiteur a poussé sur "Soumettre" en ayant rempli les deux conditions (remplir le champ "Adresse e-mail" et recopier correctement le captcha).
 
Une réponse à ces deux seules questions me contenterait amplement. J'ai encore essayé par moi-même de procéder aux changements nécessaires, mais rien n'y fait, je perds mon temps parce que je n'y connais vraiment rien en PHP.
 
Je me demande encore comment je pourrais un peu perfectionner la condition "if (empty($_POST['email_from'])" afin, par exemple, d'exiger du visiteur d'entrer un signe "@". J'ai pensé qu'il n'était pas si utilise que cela de le faire parce qu'un visiteur qui veut entrer une fausse adresse le pourra toujours ("lkdjgkshg@kdjfkojf.com" ) et qu'il ne sert à rien, dès lors, de compliquer mon code inutilement. L'esprit de la courte condition que j'ai posée est de rappeler au visiteur sérieux et distrait de m'indiquer son adresse.
Donc, peut-être qu'il n'y a pas, dans mon cas, de perfectionnement pertinent et que ma condition peut rester telle quelle.

 
Enfin, j'adorerais que l'espace d'entrée de l'adresse e-mail soit entouré de rouge en cas de non réponse.
 
Merci d'avance pour votre attention.


Message édité par fnisse le 02-04-2012 à 21:29:12
n°2134349
fnisse
Posté le 02-04-2012 à 19:10:33  profilanswer
 

J'ai progressé !  :)  
 
Cela se passe ici désormais.
 
Voici le nouveau code (le reste n'a pas changé si ce n'est que j'ai attribué le nom "valider" à la base Submit du formulaire qui n'avait pas de nom jusque-là), ce qui change est en gras + la fonction au début :

Code :
  1. <?php
  2. $cryptinstall="./crypt/cryptographp.fct.php";
  3. include $cryptinstall; 
  4. function ValideCourriel($email_from)
  5. {
  6. if ($_POST['email_from'] == "" )
  7. return true;
  8. if (strspn(strtolower($_POST['email_from']), "abcdefghijklmnopqrstuvwxyz0123456789-_@." ) < strlen($_POST['email_from']))
  9. return true;
  10. if (substr_count($_POST['email_from'], "@" ) > 1)
  11. return true;
  12. if ((strpos($_POST['email_from'], "@" )==0) || (strpos($_POST['email_from'], "@" )==strlen($_POST['email_from'])-1))
  13. return true;
  14. if (strlen($_POST['email_from']) < 8)
  15. return true;
  16. if (strlen($_POST['email_from']) > 40)
  17. return true;
  18. if ((strspn($_POST['email_from'][0], "abcdefghijklmnopqrstuvwxyz" ) == 0) || (strspn($_POST['email_from'][strlen($_POST['email_from'])-1], "abcdefghijklmnopqrstuvwxyz" ) == 0))
  19. return true;
  20. else
  21. return false;
  22. }
  23. ?>
  24. FORMULAIRE ICI
  25. <p class="traitement">
  26. <?php
  27. $msg_erreur = "<span style='color:red;'>Veuillez entrer votre adresse courriel ou recopier correctement le cryptogramme </span>";
  28. $msg_ok = 'Votre requête a bien été transmise. Merci '.$nom.' de votre confiance. <br/> Attendez-vous à une réponse dans les plus brefs délais.';
  29. $message = $msg_erreur;
  30. define('MAIL_DESTINATAIRE','info@francoisnisse.be');
  31. define('MAIL_SUJET','Requête client');
  32. if ($_POST['valider']==true && (ValideCourriel('email_from')==true) || (!chk_crypt($_POST['code'])))
  33. {
  34. $message .= "<span style='color:red;'>afin que je puisse vous répondre.<br/></span>";
  35. }
  36. if ($_POST['valider']==true && strlen($message) > strlen($msg_erreur))
  37. {
  38. echo $message;
  39. die();
  40. }
  41. foreach($_POST as $index => $valeur)
  42. {
  43. $$index = stripslashes(trim($valeur));
  44. }
  45. $mail_entete  = "MIME-Version: 1.0\r\n";
  46. $mail_entete .= "From: {$_POST['nom']} "
  47.              ."<{$_POST['email']}>\r\n";
  48. $mail_entete .= 'Reply-To: '.$_POST['email']."\r\n";
  49. $mail_entete .= 'Content-Type: text/plain; charset="iso-8859-1"';
  50. $mail_entete .= "\r\nContent-Transfer-Encoding: 8bit\r\n";
  51. $mail_entete .= 'X-Mailer:PHP/' . phpversion()."\r\n";
  52. $mail_corps  = "Message de : $nom\n";
  53. $mail_corps .= "Courriel : $email_from\n";
  54. $mail_corps .= "Sujet : $sujetreq\n";
  55. $mail_corps .= "Objet : $msgreq";
  56. if ($_POST['valider']==true && mail(MAIL_DESTINATAIRE,MAIL_SUJET,$mail_corps,$mail_entete))
  57. {
  58. echo $msg_ok;
  59. }
  60. ?>
  61. </p>
  62. </form>


Ma première question principale disparaît, du coup !
Aussi, j'ai perfectionné le traitement de l'adresse de courrier électronique du visiteur grâce à une fonction.
 
Il reste :  
 
Que faire pour que le contenu HTML du bas de la page (ce qui se trouve en dessous du formulaire) apparaisse lorsque le visiteur s'est trompé (sur l'email ou le captcha) ? Il n'apparaît seulement en effet que lorsque le visiteur a poussé sur "Soumettre" en ayant rempli les deux conditions (remplir le champ "Adresse e-mail" et recopier correctement le captcha).  
 
Enfin, j'adorerais que l'espace d'entrée de l'adresse e-mail soit entouré de rouge en cas de non réponse.  
Bien entendu, tous vos bons conseils pour améliorer ce code sans doute peu professionelle sont les bienvenus...
 
Merci d'avance pour votre attention.


Message édité par fnisse le 02-04-2012 à 21:42:15
n°2134471
format_c
Plouf plouf ...
Posté le 03-04-2012 à 10:09:43  profilanswer
 

Pour mettre en valeur ton champs email en cas d'erreur, tu peux utiliser  
<INPUT TYPE=text NAME=email VALUE="" SIZE=25 style="background:red">
 
Tu assignes une variable, par exemple $highlight qui sera assignéé en founction de la validité de ton email.
if (ValideCourriel('email_from')==true)
  {
  $highlight="";
  }
  else
  {
  $highlight = "style=\"background:red\"";
  }
 
Ensuite dans ton formulaire (qui doit être placé après ce bout de code dans ta page sinon $highlight n'existera pas), tu rajoutes juste <?php echo $highlight;?>
et ça devrait le faire


---------------
Mes guitares, ampli, et effets sont en vente !
n°2134475
olivthill
Posté le 03-04-2012 à 10:42:04  profilanswer
 

Citation :

que le contenu HTML du bas de la page (ce qui se trouve en dessous du formulaire)

Il est en dessous du formulaire lorsque la page est complètement générée. Mais où se trouve les lignes qui génèrent ce bas de la page ?
 

Citation :

apparaisse lorsque le visiteur s'est trompé

Actuellement, quand l'utilisateur s'est trompé, le code suivant est exécuté :

echo $message;
die();

L'instruction die(), est équivalente à un exit(), c'est-à-dire, que cela faire quitter le programme. Or la génération du reste de la page se situe probablement en-dessous de cette ligne die(). Une solutions serait d'enlever ce die() et de mettre l'envoi du mail dans un bloc else {} :

if ($_POST['valider']==true && strlen($message) > strlen($msg_erreur))
{
echo $message;
}
else
{
  // envoi du mail
   foreach($_POST as $index => $valeur)
...
}
// affichage du bas de la page

n°2134512
fnisse
Posté le 03-04-2012 à 14:10:33  profilanswer
 

Merci encore à vous deux pour vos réponses sympas.
 
@Format_c :  
super ! Bien que ça ne fonctionne pas. Le champ e-mail est rouge quoi qu'il arrive (il est en fait rempli de rouge alors que je le voudrais entouré), il est rouge à l'entrée sur la page... Mais c'est surtout ta dernière ligne que je ne pige pas. Où est comment dois-je placer cela "<?php echo $highlight;?> " dans mon formulaire ??
 
@Olivthill :  
Je comprends ton explication. Je savais aussi (après de nombreux tests et grâce à ce que j'ai pu lire) que c'était effectivement l'instruction "die()" qui tuait le HTML se situant en dessous.
 
J'ai écrit cela :

Code :
  1. if ($_POST['valider']==true && (ValideCourriel('email_from')==true) || (!chk_crypt($_POST['code'])))
  2. {
  3. $message .= "<span style='color:red;'>afin que je puisse vous répondre.<br/></span>";
  4. }
  5. if ($_POST['valider']==true && strlen($message) > strlen($msg_erreur))
  6. {
  7. echo $message;
  8. }
  9. else
  10. {
  11. foreach($_POST as $index => $valeur)
  12. {...


Et ça a l'air de fonctionner à merveille ! Merci merci merci ! Si je peux faire la moindre chose pour vous qui entrerait dans mes compétences, n'hésitez évidemment pas à me le demander.
 
 
PS:
J'ai simplifié ma fonction de vérification de la syntaxe de l'e-mail entré, en début de page, par une clé Regex (j'ai pris le temps d'apprendre, de comprendre et de l'écrire moi-même) :
 
<?php  
$cryptinstall="./crypt/cryptographp.fct.php";
include $cryptinstall;  
 
function ValideCourriel($email_from)
{
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,3}$#", $_POST['email_from']))
{
return false;
}
else
{
return true;
}
}
?>

Message cité 1 fois
Message édité par fnisse le 03-04-2012 à 15:09:25
n°2134704
format_c
Plouf plouf ...
Posté le 03-04-2012 à 22:58:17  profilanswer
 

fnisse a écrit :

Merci encore à vous deux pour vos réponses sympas.
 
@Format_c :  
super ! Bien que ça ne fonctionne pas. Le champ e-mail est rouge quoi qu'il arrive (il est en fait rempli de rouge alors que je le voudrais entouré), il est rouge à l'entrée sur la page... Mais c'est surtout ta dernière ligne que je ne pige pas. Où est comment dois-je placer cela "<?php echo $highlight;?> " dans mon formulaire ??
 
@Olivthill :  
Je comprends ton explication. Je savais aussi (après de nombreux tests et grâce à ce que j'ai pu lire) que c'était effectivement l'instruction "die()" qui tuait le HTML se situant en dessous.
 
J'ai écrit cela :

Code :
  1. if ($_POST['valider']==true && (ValideCourriel('email_from')==true) || (!chk_crypt($_POST['code'])))
  2. {
  3. $message .= "<span style='color:red;'>afin que je puisse vous répondre.<br/></span>";
  4. }
  5. if ($_POST['valider']==true && strlen($message) > strlen($msg_erreur))
  6. {
  7. echo $message;
  8. }
  9. else
  10. {
  11. foreach($_POST as $index => $valeur)
  12. {...


Et ça a l'air de fonctionner à merveille ! Merci merci merci ! Si je peux faire la moindre chose pour vous qui entrerait dans mes compétences, n'hésitez évidemment pas à me le demander.
 
 
PS:
J'ai simplifié ma fonction de vérification de la syntaxe de l'e-mail entré, en début de page, par une clé Regex (j'ai pris le temps d'apprendre, de comprendre et de l'écrire moi-même) :
 
<?php  
$cryptinstall="./crypt/cryptographp.fct.php";
include $cryptinstall;  
 
function ValideCourriel($email_from)
{
if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,3}$#", $_POST['email_from']))
{
return false;
}
else
{
return true;
}
}
?>


 
 
Regarde dans ton code tu dois avoir quelquepart  
<input name="email_from" id="status" size="30" type="text" value="" maxlength="40" />
 
c'est là qu'il faut que tu mettes le <?php echo $highlight; ?>
 
<input name="email_from" id="status" size="30" type="text" value="" maxlength="40" <?php echo $highlight; ?>/>


---------------
Mes guitares, ampli, et effets sont en vente !
mood
Publicité
Posté le 03-04-2012 à 22:58:17  profilanswer
 

n°2134708
gatsu35
Blablaté par Harko
Posté le 03-04-2012 à 23:54:37  profilanswer
 

Pourquoi tu limites l'adresse email à 40 caractères ? c'est stupides, des gens ont des adresses email très longues, dû notamment au nom de domaine très long.
 
Je te conseille de supprimer fissa ce maxlength, ça n'a aucun sens.
Autre chose, ta regexp est mauvaise, elle ne valide pas les adresses email suivantes :  
 
user+mailbox/department=shipping@example.com
!#$%&'*+-/=?^_`.{|}~@example.com
"Abc@def"@example.com
"Fred Bloggs"@example.com
"Joe.\\Blow"@example.com
monadresse@123.123.121.222  
 
Et oui elles sont valides, et même l'utilisation d'une adresse ip comme domaine est valide :).
Enfin en regle générale c'est les caractères non accentués, les chiffres, le underscore, le tiret qui sont le plus souvent utilisés


---------------
Blablaté par Harko
n°2134715
fnisse
Posté le 04-04-2012 à 00:15:24  profilanswer
 

@Format_c : merci encore pour ton temps. J'ai réessayé, en suivant à la lettre ce que tu me dis, mais malheureusement rien ne se passe. Je sauvegarde toutefois (à défaut d'être bon en programmation, j'essaye d'être organisé  ;) ) tous vos bons conseils dans des fichiers textes que je conserve bien au chaud. Rien ici ne tombe dans l'oreille d'un sourd...  
Le fait que cela ne fonctionne pas (ou, du moins, que je ne parvienne pas à faire fonctionner ton idée) est peut-être dû à tous les changements que j'ai pu faire depuis lors : voir la nouvelle version (qui intègre du JSQuery, chez moi toujours situé sur une autre page, en l'occurrence mon fichier JS, par un lien extérieur).
 
@Gatsu35 : Ah bon ? Je n'ai jamais vu, depuis 10 ans que je fréquente le Web, d'adresse e-mail contenant, par exemple, deux signes "@". Jamais. Je te crois bien évidemment. Je pense qu'en attendant que je règle d'autres problèmes, je vais conserver mon code tel quel. Je te remercie en tous cas chaleureusement également pour ton temps et note tes dires dans ma sauvegarde. J'y reviendrai tôt assez.  :)  
 
Ce qui me chagrine pour l'instant :
""  Warning: chk_crypt() [function.include]: Failed opening '' for inclusion (include_path='.:/usr/local/lib/php') in /homez.483/francoissi/www/crypt/cryptographp.fct.php on line 16  ""
Quelqu'un sait-il comment je peux faire disparaître cette ligne qui apparaît au premier chargement de la page du formulaire (et au premier chargement seulement, elle disparaît sur rafraîchissement de la page ou si l'on revient sur le site sans avoir quitté le navigateur) ?

 
J'ai trouvé !  :)  : dans le fichier cryptographp.fct.php, il faut remplacer

Code :
  1. ($_SESSION['configfile']);

par

Code :
  1. include ('cryptographp.cfg.php')

.
Je n'aurais jamais trouvé (ce n'est pas non plus renseigné dans la documentation de Captcha.fr, à ma connaissance) si je n'étais tombé sur le message providentiel d'un internaute ici.
 
Ma mission actuelle, dans ce perfectionnement perpétuel de la seule page dynamique de mon petit site  ;) , est, peut-être grâce au JsQuery (dont j'ai puisé mes petits changements ici), d'entourer le champ e-mail d'une certaine couleur (le rouge par exemple) si et seulement si l'utilisateur a entré un format non valide de courriel. "Si et seulement si" : si le visiteur entre une bonne adresse courriel mais qu'il se trompe dans le captcha, le champ e-mail resterait inchangé, comme il se doit.
 
Pour ne pas envahir ce forum plus que nécessaire, je rappelle à qui voudrait m'aider plus loin que, autour de ma page de FORMULAIRE (qui est la page de formulaire et la page de traitement à la fois) gravitent :
différents fichiers directement liés au captcha, se trouvant dans le dossier "crypt" à partir de la racine du site;
un fichier Javascript externe qui contrôle, pour ce qui nous occupe, le Jsquery du formulaire;
un fichier CSS en relation avec ce JSQuery et qui contrôle aussi, bien entendu, l'affichage du formulaire en général.


Message édité par fnisse le 04-04-2012 à 01:06:19
n°2134726
format_c
Plouf plouf ...
Posté le 04-04-2012 à 08:43:27  profilanswer
 

J'ai regardé le code de ton formulaire  
 

Code :
  1. <form action="/formu.php" method="post">
  2. <fieldset>
  3. <legend>Contactez-moi</legend>
  4. <span class="formuNId">Nom complet : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  5. <input name="nom" id="status" size="30" type="text" value="" maxlength="40" />
  6. <br />
  7. <span class="formuNId">Adresse e-mail : &nbsp; &nbsp; &nbsp; &nbsp;</span>
  8. <input name="email_from" id="status" size="30" type="text" value="" maxlength="100" />
  9. <br />
  10. <span class="formuNReq">Votre requête :</span>
  11. <br />
  12. <textarea name="msgreq" id="status" cols="55" rows="15" maxlength="10000"></textarea>
  13. <br /><br />
  14. <table>
  15. <tr>
  16. <td><table><tr><td><img id='cryptogram' src='./crypt/cryptographp.php?cfg=0&'></td><td><a title='' style="cursor:pointer" onclick="javascript:document.images.cryptogram.src='./crypt/cryptographp.php?cfg=0&&'+Math.round(Math.random(0)*1000)+1"><img src="./crypt/images/reload.png"></a></td></tr></table></td>
  17. <td><input name="code" id="status" value="Recopiez le code" onclick="this.value=''"; type="text" /></td>
  18. </tr>
  19. </table>
  20. <br />
  21. <input type="submit" name="valider" value="Soumettre" />
  22. <p class="traitement">
  23. </p>
  24. </fieldset>
  25. </form>


 
C'est cette partie en rouge qu'il faudrait remplacer par
<input name="email_from" id="status" size="30" type="text" value="" maxlength="100" <?php echo $highlight ?>/>
Mais ça ne marchera que si ta validation d'email est faite en amont de ce formulaire, car sinon ta variable $highlight sera vide.
Si jamais ça ne fonctionne pas, je me suis peut être gouré dans :
if (ValideCourriel('email_from')==true)  
  {$highlight="";}  
  else  
  {$highlight = "style=\"background:red\"";}  
 
Mais en principe, si j'ai bien pigé, la fonction ValideCourriel renvoie true si l'email est correct.


---------------
Mes guitares, ampli, et effets sont en vente !
n°2135514
fnisse
Posté le 10-04-2012 à 11:48:30  profilanswer
 

J'avais en fait testé exactement ce que tu me montres, en écrivant cette même ligne en rouge.  
Et j'avais écrit ceci en début de page :  
 

Code :
  1. function ValideCourriel($email_from)
  2. {
  3. if (preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,3}$#", $_POST['email_from']))
  4. {
  5. $highlight = "";
  6. return false;
  7. }
  8. else
  9. {
  10. $highlight = "style=\"background:red\"";
  11. return true;
  12. }
  13. }
  14. ?>

 
En fait, la fonction renvoie FALSE si la syntaxe est CORRECTE, et TRUE si elle est MAUVAISE.  
D'où, plus bas,  
if ($_POST['valider']==true && (ValideCourriel('email_from')==true) || (!chk_crypt($_POST['code'])))  
Ce que je traduis par : "si l'on a poussé sur Soumettre ET que la fonction de vérif. de la syntaxe du courriel est MAUVAISE (true) OU que l'on a mal recopié le crypto, alors..."  
 
----
 
Gatsu35, je vais prendre en considération tous tes conseils pour assouplir cette clé et donc faire en sorte que le formulaire accepte une syntaxe plus permissive aux adresses e-mail postées. Voici la première étape.
 
Voici ma clé qui pour l'instant n'a pas changé : #^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,3}$#  
 
J'aimerais tout simplement transformer ce code pour qu'il accepte les majuscules (avant ou après le "@", n'importe où dans l'adresse), venant en effet de constater que, par exemple, un "AAAA@aaa.com" ne passait pas.  
 
Sais-tu ce que je devrais faire ? J'ai lu quelque part qu'il s'agissait d'ajouter un "i" quelque part, mais où, comment... ?  
Merci d'avance !

n°2139680
fnisse
Posté le 29-04-2012 à 11:26:33  profilanswer
 

Up ! :)

n°2139687
gatsu35
Blablaté par Harko
Posté le 29-04-2012 à 14:16:59  profilanswer
 

après le #


---------------
Blablaté par Harko
n°2139959
fnisse
Posté le 01-05-2012 à 17:43:58  profilanswer
 

Merci infiniment Gatsu !  
 
J'écris donc :
#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,3}$#i
 
 
... et ça a l'air de fonctionner à merveille !


Message édité par fnisse le 01-05-2012 à 17:51:41
n°2140720
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 04-05-2012 à 13:19:29  profilanswer
 

hello
au passage pour les emails, tu limites à 2 ou 3 lettres pour l'extension, mais certaines sont plus grandes ... par exemple des .info ça fait 4 lettres, et j'ai déjà vu des .museum ...
Je ne sais pas quel est le cadre d'application de ta page, si c'est pour un intranet par exemple tu n'auras probablement jamais de .museum :D
 


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°2142814
fnisse
Posté le 17-05-2012 à 13:30:56  profilanswer
 

Merci NewsletTux ! Il s'agit d'un site vitrine pour ma recherche d'emploi (francoisnisse.be)... Tu me conseillerais donc de changer cette limitation de 3 signes max après l'arobas ?
 
J'en suis maintenant à la finition technique. J'aurais l'une ou l'autre dernière question qui, n'ayant plus rien à voir avec le formulaire, devraient être décrites dans un nouveau sujet ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] Intégrer le code du captcha au reste du code de traitement

 

Sujets relatifs
Formulaire en VBA dans feuille Excel[XML] Problème avec formulaire envoi
PHP supprimer produit panierLancer un programme en tache de fond Via un Batch
[PHP+SQL] Cherche un petit coup de main pour une application simpleBug champs options avec Paiement CIC
compter le nombre de champs vides dans 1 enregistrement SQLPHP hostname
Verrouiller un champs d'une table[JS et PHP] Récupération des donées d'un Select multiple
Plus de sujets relatifs à : [Résolu] Intégrer le code du captcha au reste du code de traitement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR