Page précédente : éviter la resoumission

Page précédente : éviter la resoumission - PHP - Programmation

Marsh Posté le 11-08-2013 à 12:45:47    

Bonjour
 
J ai lu pas mal de forums sur mon pb, mais sans jamais avoir trouve la bonne réponse à ma problématique.
 
J ai une page (page1.php) qui contient un formulaire en "post" et dont la cible est elle même. À la soumission du formulaire je fais les contrôles nécessaires et si tout est ok je fais une requête sql et je construis le tableau avec le résultat de la requête. Donc la page1.php contient à la fois le formulaire et le tableau de résultats.
 
De ce tableau je peux ensuite appeler une page2 qui affiche le détail d une ligne. Tout fonctionne.  
 
Le problème est que à partir de la page2, j aimerai pouvoir revenir en arrière pour réafficher le résultat du tableau. Or systématiquement j ai le message qui demande de confirmer le ré envoi du post. Et si l utilisateur confirme alors ça refait la requête sql et ça réaffirme tout etc.... Ça fonctionne bien sur mais ce n' est pas très optimisé.  
 
Mes questions :
- comment a partir de la page2, re afficher cette page1 sans que ce message de confirmation de ré envoi du post ?
- comment dans la page1, ne pas refaire la requête sql à chaque fois que l utilisateur demande à revenir à la page précédente ?
 
Je pense devoir utiliser les sessions et la redirection , mais j ai pas tout compris les différents topics que j ai pu trouver.  
 
Donc je suis preneur d une bonne explication sur le sujet. Merci d avance pour vos réponses.
 
Dominique

Reply

Marsh Posté le 11-08-2013 à 12:45:47   

Reply

Marsh Posté le 11-08-2013 à 17:57:24    

Voici la plus simple méthode : http://fr.wikipedia.org/wiki/Post-Redirect-Get
 
Page 1 envoie le formulaire à page 2.
Page 2 reçoit le formulaire et stocke les données puis envoie un header de redirection (code 302) vers page 1 en réponse.
Page 1 affiche le tableau et toujours le formulaire.


---------------
Main/Alt1/Alt2/Alt3
Reply

Marsh Posté le 11-08-2013 à 19:02:55    

Bonsoir volkhen
 
Merci pour la réponse. J avais déjà vu ce Wikipédia, mais mon souci est un peu différent. La page2 que tu cites n est pas la page2 que je cite.
 
La page2 que je cite est une page appelée à partir du tableau de la page1. Ce tableau à été construit suite à un post de formulaire de page1. Mon souhait est que quand l utilisateur est sur la page2, et qu il demande à revoir cette liste de la page1 , et bien que le formulaire ne se resoumet pas mais surtout que la page1 ne relance pas de nouveau la requête sql, car c'est déjà fait.
 
Est ce plus clair ?
 
En tout cas merci d avoir pris le temps de répondre. Dominique

Reply

Marsh Posté le 11-08-2013 à 19:04:30    

Ou alors peut être vaut il mieux passe en get ?

Reply

Marsh Posté le 11-08-2013 à 21:52:55    

Changez page 2 par page 1bis dans mon post. Dans tous les cas, le plus simple est d'ajouter un script en plus.
Un truc du genre :
 
page1.php

Code :
  1. <?php
  2. $table = getData();
  3. ?>
  4. <table>
  5. <?php foreach($table as $row):?>
  6. <tr>
  7.   <td><a href="page2.php?id=<?php echo $row['id']?>">Détail</a></td>
  8. </tr>
  9. <?php endforeach;?>
  10. </table>
  11. <form method="post" target="page1bis.php">
  12. </form>


 
dans page1bis.php :

Code :
  1. <?php
  2. if(!empty($_POST)){
  3.   // Enregistrer les données
  4. }
  5. header('Location: page1.php');
  6. exit;


---------------
Main/Alt1/Alt2/Alt3
Reply

Marsh Posté le 12-08-2013 à 09:29:52    

Ce que tu peux faire aussi, c'est stocker ta page précédente (apc par exemple) et créer un bouton qui charger ta précédente page ainsi que ton javascript

Reply

Marsh Posté le 12-08-2013 à 11:37:40    

Tu peux faire un système de jeton (token) valable qu'une fois. Une fois le formulaire avec le jeton correctement traité, celui-ci n'est plus valide, donc interdit tout re-post...


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

Sujets relatifs:

Leave a Replay

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