Hello,
J'ai fait une page de contact sur mon site avec un captcha pour éviter le spam. Vous pouvez voir cette page ici...
Tout fonctionne si vous désactivez le javascript de votre navigateur: si le code tapé est faux ou que l'un des champs reste vide, vous obtenez un message d'erreur.
J'ai voulu optimiser la page avec un peu de javascript mais ça fait foirer la page... Vous pouvez tester avec le javascript activé sur votre navigateur: même si vous remplissez tous les champs et que vous saisissez le bon code du captcha, vous vous faites jeter...
Avec ça en tout cas je suis sûr de pas être dérangé par du spam
Le code Ajax est le suivant:
Code Javascript : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 function test_captcha() { getXhr(); xhr.onreadystatechange = function() { if (xhr.readyState == 4 && xhr.status == 200) { var reponse=xhr.responseText; if (reponse == 'false') { document.getElementById('bad_code').style.display='none'; document.getElementById('good_code').style.display='block'; document.getElementById('code').disabled = true; document.getElementById('validation').disabled = false; document.getElementById('captcha_reload').style.display='none'; document.getElementById("erreur_captcha").innerHTML = ''; } else { if (valeur.length < 1) { document.getElementById("erreur_captcha").innerHTML = ''; } else { document.getElementById("erreur_captcha").innerHTML = reponse; } } //faire les tests de validation ;) } } var valeur; valeur=document.getElementById('code').value xhr.open("POST",'includes/functions/php/test_captcha.php',true); xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); xhr.send("valeur="+valeur); }
Si je vire cette ligne:
document.getElementById('code').disabled = true;
ça résoud partiellement le problème: si on complète tous les champs et que l'on indique le code correct, les données sont enregistrées dans la base...
Sauf que j'aimerais que lorsque l'on a donné le code correct, le champs de saisie du captcha devienne inactif pour qu'on ne puisse plus modifier le code saisi, d'où l'utilité de la ligne
document.getElementById('code').disabled = true;
Le problème c'est qu'apparemment le fait de désactiver le champs de saisie fait que ce champs en perd la mémoire et ne transmet plus les données qu'il contient puisqu'en affichant le contenu de sa mémoire en dessous du message d'erreur, je m'aperçois qu'il est alors vide.
Est ce que quelqu'un aurait une idée pour résoudre le problème et avoir à la fois un formulaire qui fonctionne et n'enregistre les données que si on saisit tout le formulaire et si on copie exactement le code demandé, mais avoir également le champs de saisie du captcha qui se désactive au moment où on a tapé le captcha correct pour qu'on ne puisse plus rien modifier... mais que ce champs de saisie que j'ai appelé "code" transmette quand même les données...?
Merci
Partager