Bonjour,

Sur un nouveau formulaire en php, j'ai des champs obligatoires : si l'un de ceux-ci n'est pas renseigné, une page distincte d'information de l'anomalie est affichée en proposant un bouton de "retour au formulaire"

Je rencontre un problème : à l'action "retour au formulaire", un popup de message des navigateurs m'alerte sur le risque de cette action ("les infos précédemment transmises par Firefox doivent être renvoyées. Ceci répétera toute action etc..)

Je cherche à contourner ce message qui est un peu déroutant, serait-il lié lié à une configuration du cache ou encore aux paramètres de php ou d'Apache ?

Merci pour votre aide

Amicalement
Modifié par benoit* (05 Aug 2009 - 10:42)
Bonjour,

Si tu as l'architecture suivante:
Formulaire (envoi) > Script de traitement (erreur) > Redirection vers une page d'erreur

Alors lorsque l'utilisateur veut revenir en arrière d'un cran depuis la page d'erreur, le navigateur comprend fort logiquement qu'il faut revenir au script de traitement. Ce script a été chargé en lui passant un certain nombre de données en POST (les données du formulaire). Firefox prévient donc que ces informations seront soumises à nouveau. Si l'utilisateur confirme, le script de traitement devrait trouver la même erreur, et à nouveau rediriger vers la page d'erreur. Ça donne une boucle sans fin.

La solution est de ne pas rediriger vers une page d'erreur, mais d'afficher le contenu de l'erreur comme résultat direct du script de traitement.

Après, il se peut que tu aies un problème de ce type avec une structure différente. Par exemple:

Page permettant de choisir une option (formulaire, envoi) > Formulaire proprement dit (envoi) > Script de traitement

Même si l'erreur est affichée comme résultat du script de traitement, tu auras ce message d'erreur au moment de revenir au formulaire car celui-ci avait déjà accepté des données POST. Solution: passer les options/paramètres de la première page à la seconde en GET (en faisant un formulaire ou des liens, au choix).

Enfin, une solution plus globale consiste à afficher les messages d'erreur dans la page du formulaire lui-même. La page du formulaire accueille le script de traitement. Si aucune donnée soumise en POST, on affiche le formulaire vide. Si données soumises et valide, on affiche un message de confirmation que tout va bien et un lien ou plusieurs pour se rendre ailleurs sur le site. Si les données soumises sont invalides, on affiche les messages d'erreur correspondant, et on réaffiche le formulaire en y injectant les données soumises par l'utilisateur (à l'exception du contenu des INPUT de type password).
Bonjour,

Merci pour ta réponse documentée, je vais plancher là-dessus.

C'est peut-être aussi ma technique de retour aux données du formulaire qui est inadaptée A l'aide d'un a href="javascript:history.back()" sur le bouton

Amicalement
Modifié par benoit* (05 Aug 2009 - 10:43)
benoit* a écrit :
C'est peut-être aussi ma technique de retour aux données du formulaire qui est inadaptée A l'aide d'un a href="javascript:history.back()" sur le bouton

Disons que si tu veux simplement permettre de revenir au formulaire, il faut faire un lien en bonne et due forme (un lien hypertexte, pas en JavaScript). Mais l'utilisateur perd alors les informations saisies. Sauf si, dans le traitement des données, tu enregistres les informations saisies dans des variables de session, et que tu vérifies la présence de ces variables avant d'afficher ton formulaire.