Page 1 sur 1

applis et confort de navigation

Posté : 09 déc. 2006, 16:11
par Invité
Bonjour,

J'utilise une appli php open source qui fonctionne très bien et qui crée des sondages.
Le problème: quand un internaute navigue dans le questionnaire, il ne peut pas revenir une page en arrière avec le bouton "précédent" de son navigateur.
S'il essaye la page est perdue et renvoie une erreur "page non trouvée".

Dans mes propres scripts, j'ai remarqué qu'en utilisant GET pour transférer les données de formulaires, le retour page précédente était possible. Pas avec POST.

A quoi est-ce du?
Il est gênant qu'un internaute perde sa page après avoir rempli la moitié d'un long formulaire, parcequ'il a cliqué sur "page précédente".

Dois-je remplacer tous les POST en GET dans les dizaines de fichiers de l'appli ou y a-t-il des solutions plus "globales"?

Merci pour vos réponses.

Posté : 09 déc. 2006, 16:15
par Invité
En fait voici le message que je reçois en cliquant sur "précédent" dans mon navigateur
Warning: Page has Expired The page you requested was created using information you submitted in a form. This page is no longer available. As a security precaution, Internet Explorer does not automatically resubmit your information for you.

To resubmit your information and view this Web page, click the Refresh button.
En rafraîchissant, la page revient. Est-il possible de faire un rafraîchissement automatique de la page pour ne pas dérouter l'utilisateur? Ou au moins personnaliser ce message?

Posté : 09 déc. 2006, 18:38
par Ryle
En fait, lorsque tu passes des paramètes dans l'url (en GET) et que tu actualises la page, ces données sont toujours disponibles (puisque spécifiées explicitement dans l'adresse). En post, les données ne sont pas visible, le navigateur demande alors nécessairement une confirmation à l'utilisateur avant de renvoyer les données qui ont permis d'arriver sur la page.
Il s'agit donc là d'une sécurité (même si peu de gens s'en soucient) pour éviter de faire plusieurs insertions en base ou déclencher un payement plusieurs fois, sans en informer l'utilisateur :)

En général, pour éviter cela (les doubles post et/ou les messages de confirmation), le traitement réalisé est le suivant :
- Les données sont envoyées en POST à une page qui les traites.
- Une fois le traitement effectuée, la page redirige l'utilisateur (avec un header()) vers une nouvelle page en GET
- La redirection est totalement transparente pour l'utilsateur qui ne verra au final que la dernière page.

Ainsi, s'il actualise, seul le GET est rejoué, donc pas de double-post. Idem, s'il fait précédent puis suivant, il revient sur le formulaire puis sur la page en GET, sans que les données ne soient redemandées ou repostées.

Une petite recherche sur le forum sur le pattern PRG (Post Redirect Get) te donnera plus d'info sur le sujet.

Quant à la solution, tu peux effectivement tout repasser en get, mais quitte à tout modifier je te conseil d'utiliser ce principe. Tu peux aussi conserver les données envoyées par l'internaute en session et ainsi les lui reproposer sur chaque page, même s'il joue du bouton précédent au milieu de sa saisie (ceci dit, ce qui n'aura pas été soumis ou enregistré au moment ou il clique sur précédent sera de toute façon perdu)

Posté : 09 déc. 2006, 19:17
par Invité
ta réponse m'aide beauoup. je te remercie.
Est ce qu'il est possible de désactiver le bouton "précédent" d'un navigateur avec du js?

Posté : 09 déc. 2006, 19:55
par Ryle
Pas à ma connaissance..

Via une popup tu peux planquer les boutons, mais il y a tellement de moyen de revenir en arrière que c'est peine perdue selon moi... (touche delete, bouton précédent de la souris, clique droit > précédent, gesture dans certains navigateurs, ...)