Empêcher la réactulisation (F5) - PHP - Programmation
Marsh Posté le 12-03-2012 à 10:44:42
Empêcher la réactualisation, c'est impossible. Par contre, on peut contourner le problème des insertions multiples assez facilement.
L'idée, c'est de séparer le traitement du formulaire (avec les insertions en base de données) de l'affichage du résultat de l'opération. La page de traitement va s'occuper uniquement des accès à la base de données, sans afficher quoi que ce soit, et à la fin, elle fera un redirect vers la page d'affichage du résultat. Comme la page de résultat ne fait aucun traitement, l'utilisateur pourra la rafraichir autant qu'il veut, ça ne changera rien.
Je ne suis pas sûr d'être super clair, donc voici un exemple de séquence d'événements :
- on affiche un formulaire (formulaire.php)
- l'utilisateur le rempli, et soumet le formulaire
- on va faire un POST sur la page traitement.php avec les données du formulaire
- traitement.php va insérer/modifier les données en base. Rien n'est affiché
- traitement.php va rediriger (via fonction "header" ) vers la page resultat.php
- resultat.php indique à l'utilisateur que tout s'est bien passé (ou qu'il y a eu des erreurs)
- si l'utilisateur appuie sur F5, ça ne pose pas de problème, vu qu'on est sur une page qui ne modifie rien en base de données
Marsh Posté le 12-03-2012 à 13:01:56
+1 pour cette solution, c'est ce que je fais dans mon logiciel de Help-Desk en GPL, Astres (cf ma signature).
Marsh Posté le 12-03-2012 à 15:30:35
willy54 a écrit : Auriez-vous une solution pour empêcher les réactualisations? |
Jetons (token en anglais)
http://forum.hardware.fr/hfr/Progr [...] 4685_1.htm
Marsh Posté le 12-03-2012 à 19:34:38
Vous lui causez jeton, mais vu son niveau, ça ne doit pas beaucoup lui parler.
Voilà un morceau de code PHP, mon gars :
Code : |
Marsh Posté le 11-03-2012 à 20:43:21
Bonsoir,
Auriez-vous une solution pour empêcher les réactualisations?
C'est problématique lorsqu'on traite un formulaire.
Exemple:
1) j'ai une page formulaire & une page de traitement qui permet l'insertion de données dans une BDD
2) à chaque fois que je fais F5 cela génère une nouvelle insertion