Empêcher la réactulisation (F5)

Empêcher la réactulisation (F5) - PHP - Programmation

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

Reply

Marsh Posté le 11-03-2012 à 20:43:21   

Reply

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

Reply

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).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 12-03-2012 à 15:30:35    

willy54 a écrit :

Auriez-vous une solution pour empêcher les réactualisations?


Jetons :o (token en anglais)
http://forum.hardware.fr/hfr/Progr [...] 4685_1.htm


---------------
çà s'est HFR | Music for the Galaxy
Reply

Marsh Posté le 12-03-2012 à 19:34:38    

Vous lui causez jeton, mais vu son niveau, ça ne doit pas beaucoup lui parler.  :o  
 
Voilà un morceau de code PHP, mon gars :
 

Code :
  1. <?php
  2.  
  3.  
  4. // ...
  5.  
  6. if (!isset($_SESSION['myLastInsertionDateForTheQueryA'])) {
  7.  
  8.  // Do the query A here
  9.  
  10.  // Then set a token for the query A
  11.  $_SESSION['myLastInsertionDateForTheQueryA'] = date('c');
  12.  
  13. }
  14. else {
  15.  
  16.  echo 'Trou\'d\'balle, t\'as déjà fait une insertion en date du '.$_SESSION['myLastInsertionDateForTheQueryA'].'... ';
  17.  echo 'Une fois mais pas deux, hein ?!<br/>';
  18.  
  19. }
  20.  
  21. // ...
  22.  
  23. ?>


Message édité par CyberDenix le 12-03-2012 à 19:37:44

---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 14-03-2012 à 18:44:16    

Merci les gars :) Je test ça dès que j'ai le temps

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed