Modérateur PHPfrance |
10684 Messages
09 déc. 2006, 18:38
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)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...