• italian
  • german
  • swedish
S'inscrire à la newsletter:
Rechercher dans le site:
*
Bienvenue, Invité. Veuillez vous connecter ou vous inscrire.
Avez-vous perdu votre courriel d'activation?
23 Novembre 2008 à 12:30:02

Connexion avec identifiant, mot de passe et durée de la session



 
« sujet précédent | | sujet suivant »
Pages: [1] Imprimer
Auteur Fil de discussion: CAPTCHA : garder les données saisies si caractères du captcha mal tapés  (Lu 521 fois)
ric
Nouveau membre
*

Points gagnés: 0
Messages: 3


Voir le profil
« le: 19 Juillet 2008 à 15:26:52 »

Bonjour,

J'ai appris le minimum de PHP pour écrire un formulaire d'inscription dont les données saisies sont envoyées par mail. Les données du formulaire sont traitées par un programme PHP placé dans un fichier externe au formulaire. Les données sont validées par un fichier javascript.

Le formulaire a eu beaucoup de spams ces derniers temps et j'ai repiqué sur le Web du code pour faire afficher une image "captcha" pour éviter les "fausses" inscriptions. Tout marche bien sauf que, si l'utilisateur tape mal les caractères bruités du captcha et qu'il revient en arrière pour les retaper, toutes les données qu'il a tapées pour l'inscription dans le formulaire sont perdues. Le formulaire est très long et cette solution n'est donc pas viable.

Pourriez-vous me donner les grands principes pour faire garder les données saisies, et si possible un exemple de code. Je ne sais pas du tout comment faire et je ne sais pas quels mots clés taper pour interroger Google sur ce point.

Merci d'avance pour vos réponses.
Journalisée
ric
Nouveau membre
*

Points gagnés: 0
Messages: 3


Voir le profil
« Répondre #1 le: 19 Juillet 2008 à 19:30:33 »

Suite...

J'ai enlevé des session_start de mes fichiers PHP et j'arrive à conserver maintenant les données saisies auparavant si l'utilisateur clique sur le bouton "back" pour revenir à la page précédente. Il a ainsi une nouvelle chance de taper les bons caractères du captcha. Cependant ça ne sert pas à grand-chose car le bouton submit du formulaire ne fonctionne plus : il ne se passe rien si on clique dessus. Quelqu'un peut m'expliquer ce qui se passe (et si possible comment corriger le problème) ?

J'ai un doute : est-ce que ce type de comportement dépend du navigateur ou est-ce que tous les navigateurs se comportent à peu près pareils ? Si ça dépend du navigateur, je vais devoir m'orienter vers une solution où le code lancé par le submit enregistre les valeurs des champs de saisie dans des variables PHP et les utilise dans le formulaire pour repositionner les valeurs dans les composants (j'ai cru voir qu'il existait des variables globales en PHP, qui peuvent être vues en dehors des fichiers PHP qui les définissent, non ?). Ca ne m'enchante pas vu le grand nombre et la grande variété de champs. Tant que j'y suis je vais vous demander si vous avez des adresses Web avec des exemples codés (en utilisant PHP) pour positionner les listes déroulantes, cases à cocher,... comme l'utilisateur les avait laissés au moment de son submit (pour les input, il y a l'option value, facile à utiliser).

Merci de me dire s'il y a une autre solution plus simple, une autre organisation, pour que l'utilisateur n'ait pas à retaper toutes les données du formulaire lorsqu'il a mal tapé les caractères du captcha. C'est dommage qu'il y ait ce problème car tout le reste marche bien.

Ca fait finalement beaucoup de questions et, avec votre aide, j'espère acquérir rapidement un meilleur niveau dans la programmation PHP pour y répondre. Ce sont des questions qui me semblent basiques mais je n'arrive pas à trouver les réponses sur le Web. J'ai pourtant vu beaucoup de sites qui fonctionnent comme je le souhaite avec les captcha et la solution est sans doute simple, ou au moins connue.
Journalisée
Thierry
Rédacteur Admin
Intarrisable
*****

Points gagnés: 12
Messages: 1424



Voir le profil
« Répondre #2 le: 19 Juillet 2008 à 22:42:34 »

Bonjour,

Je me demande si la solution ne serait pas dans les variables de session.

Fais une recherche la dessus car ma mémoire fait un peu défaut sur le coup.

En gros tu crées des variables en même temps que la session et tu y stockes des infos, ici des champs saisis.

J'espère que c'est la bonne piste....
Journalisée
damien
Rédacteur Admin
Intarrisable
*****

Points gagnés: 5
Messages: 2380


Voir le profil WWW
« Répondre #3 le: 03 Août 2008 à 17:57:44 »

Bonjour,

Stocker les données dans des variables de session peut être une idée oui.
Mais il y aussi plus simple encore : vous pouvez faire le traitement du formulaire dans le même fichier et avant l'affichage du formulaire lui même.
Ainsi vous récupérer toutes les données du formulaire en post, et si quelque chose ne va pas, vous pouvez mettre un message d'erreur à l'utilisateur + préremplir les champs du formulaire avec les variables $_POST.
Journalisée

Cordialement,
Damien

Agence web - Annuaire Blog
ric
Nouveau membre
*

Points gagnés: 0
Messages: 3


Voir le profil
« Répondre #4 le: 03 Août 2008 à 19:28:55 »

Bonjour,

Stocker les données dans des variables de session peut être une idée oui.
Mais il y aussi plus simple encore : vous pouvez faire le traitement du formulaire dans le même fichier et avant l'affichage du formulaire lui même.
Ainsi vous récupérer toutes les données du formulaire en post, et si quelque chose ne va pas, vous pouvez mettre un message d'erreur à l'utilisateur + préremplir les champs du formulaire avec les variables $_POST.
Bonjour,

Merci pour votre conseil.

Finalement, en copiant une très bonne référence, très détaillée et bien expliquée, trouvée en http://www.captcha.biz/how-to-use-captcha.html (la partie la plus complète "Know it all"), j'ai utilisé une variable session, ce qui me permet de traiter les données dans un fichier à part et rend l'application plus modulaire (il y a pas mal de lignes de code). La variable de session est indispensable car je passe la main au traitement du formulaire par une redirection qui perd les valeurs placées dans $_POST (header("Location: inscription.php"); ). Peut-être y avait-il un autre moyen de passer la main sans faire de redirection ? Comme ça a marché ainsi je n'ai pas cherché plus loin.

Comme mon formulaire comportait beaucoup de composants, et de types divers (entrée d'une ligne, de plusieurs lignes, boîte à cocher, liste déroulante,...), j'ai dû modifier pas mal de code et chercher comment, par exemple, positionner une liste déroulante sur le choix déjà fait (malheureusement pas expliqué dans la référence que je donne ci-dessus), mais je suis finalement arrivé à mes fins. La difficulté n'est donc pas venue de l'utilisation d'une variable de session mais plutôt de cette recherche et de la quantité de code à modifier.

Si j'ai bien compris, la solution que vous préconisez m'aurait seulement permis de ne pas ajouter les valeurs dans la session mais j'aurais tout de même dû faire tout le travail sur les composants pour récupérer les valeurs déjà saisies, non ? (par exemple, en utilisant "value=" pour les champs input). L'utilisation de variables de session est très simple puisque j'ai tout simplement mis le tableau $_POST dans la session par $_SESSION['post'] = $_POST et ça me semble donc une bonne solution. Mais comme ne suis pas bien meilleur qu'avant en PHP, je ne suis pas vraiment un bon juge.

Cordialement.
Journalisée
Pages: [1] Imprimer 
« sujet précédent | | sujet suivant »
Aller à:  

Powered by SMF 1.1.4 | SMF © 2006, Simple Machines LLC