2011-11-09 3 views
0

J'ai un index.php dans le dossier racine traitant de toutes les commandes. Dans la page d'url "root /? A = a & b = b", j'ai un formulaire pour POST pour ajouter un nouvel élément. Après avoir envoyé le formulaire, la page devrait être de retour à "root /? A = a & b = b" et un nouvel élément est affiché (j'utilise actuellement l'en-tête ('Location:'. $ _SERVER ['HTTP_REFERER' ])). Dans le même temps, il existe un div dans la page "racine /? A = a & b = b". Si la page revient de la soumission du formulaire, elle doit être affichée; sinon (GET à cette page), il devrait être caché.passer une variable après POST en PHP

J'ajoute actuellement un "& success = true" à la fin de l'url. Mais après avoir soumis le formulaire, il y a un "& success = true" dans l'url, et si je rafraîchis la page, même si je ne reviens pas du formulaire de soumission, le div est toujours affiché.

Je me demande s'il existe un moyen de passer une variable au lieu de modifier l'URL après l'envoi du formulaire. De plus, je ne veux pas utiliser $ _SESSION.

Merci de votre aide!

+1

En dehors de Session, les autres méthodes sont $ _COOKIE, $ _POST, des fichiers ou des bases de données. Quel est le problème avec une variable de session? – EvilChookie

+0

Ce que dit EvilChookie. –

Répondre

2

Ceci est un problème courant et la méthode la plus propre que je connaisse pour contourner ce problème lors de l'utilisation Post-Redirect-Get consiste à définir un cookie dans la réponse au POST, puis à le supprimer immédiatement dans la réponse au GET.

0

Sur la page où vous voulez afficher un div caché, vous devez vérifier referer trop

Si vous venez à cette page de la page avec formulaire, vous devez montrer div, sinon ne montrent pas

vous pouvez également le faire en vérifiant REQUEST_METHOD à url « root /? a = a & b = b » par exemple

if($_SERVER['REQUEST_METHOD'] == 'GET'){ 
    // do what you wonna to do 
    $showForm = false; 
} else if($_SERVER['REQUEST_METHOD'] == 'POST'){ 
    // There is an action of submitting your form. 
    // Do this, after that show info 
    $showForm = true; 
} 

if($showForm){ 
    echo '<div id="hiddenDiv">Hello hidden div</div>'; 
} 
0

cette réponse suppose que vous envoyez des messages et redirigeront sans aucune intervention de l'utilisateur. Si une action de l'utilisateur est requise sur la page de traitement du formulaire, alors la plus grande partie ne s'appliquera pas ...

Presque tous les formulaires que j'écris postent sur la même URL (utilisez action = ""). Cela rend la vie beaucoup plus facile. Je déconseillerais fortement toute utilisation de HTP_REFERER, car il s'agit d'un champ facultatif totalement dépendant du navigateur. La plupart n'envoient pas de références, ou seulement les envoient dans certaines circonstances.

Je vous invite également à reconsidérer s'il est vraiment nécessaire de rediriger depuis le processeur de formulaires. Je suppose que vous le faites pour empêcher l'utilisateur de faire la même chose accidentellement, mais tous les navigateurs modernes affichent un message sensé si l'utilisateur essaie d'actualiser une requête POST, ce qui ne devrait donc pas être nécessaire. Si vous ne redirigez pas depuis le processeur de formulaires, vous pouvez afficher le message de réussite sur la page de traitement, ce qui élimine tout besoin d'utiliser COOKIE ou SESSION.

Questions connexes