retour à la page précédente : conserver les données de session

retour à la page précédente : conserver les données de session - PHP - Programmation

Marsh Posté le 03-12-2008 à 22:43:02    

Hello,
J'ai 3 fichiers : un formulaire pour taper un mot de passe, un PHP qui affiche une liste de liens (appelons le php1), et un PHP qui affiche du texte après le clic sur un des liens (fichier php2)
 
J'utilise le MdP à la fois dans php1 et php2 : j'ai donc créé une session pour pouvoir utiliser le MdP sous la forme d'une variable dans les deux fichiers
 
Tout marche bien, sauf lorsque, depuis php2, je veux retourner à php1 pour revoir ma liste (et éventuellement cliquer sur un autre lien) : j'ai alors le fameux message :

Citation :

Avertissement : expiration du délai pour cette page  
Pour envoyer vos informations à nouveau et afficher cette page Web, cliquez sur le bouton Actualiser.


 
Y a t il un moyen d'éviter ça, tout en gardant le MdP dans sa variable : l'objectif est de pouvoir cliquer sur un autre lien de la liste, visualiser le contenu avec php2, revenir sur la liste, etc ...


---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Marsh Posté le 03-12-2008 à 22:43:02   

Reply

Marsh Posté le 04-12-2008 à 09:40:54    

Après une requête de type POST, le mieux est de ne pas balancer l'affichage de php1 tout de suite comme ça. Il faut plutôt rediriger vers php1 (donc forcer la méthode GET dessus), et du coup ça roule. Donc après traitement du mot de passe, balance un :

Code :
  1. header('Location: http://tonsite/machin/php1.php', true, 303);


Message édité par FlorentG le 04-12-2008 à 09:41:00
Reply

Marsh Posté le 04-12-2008 à 09:43:00    

c'est parce-que tu reviens sur la cible de ton formulaire. La solution est de traiter le formulaire dans un script qui ne fait pas d'affichage lui-même, mais redirige vers une autre page quand il a terminé le traitement. Ca donne quelque chose dans ce genre :

 

toto.html :

Code :
  1. <form action="toto.php"...>
  2. ....
 

toto.php :

Code :
  1. //on traite les données envoyées via le formulaire, on met en session ce dont on a besoin plus tard
  2. ...
  3.  
  4. header('Location: titi.php');
 

titi.php:

Code :
  1. //là tu affiche ta page sur laquelle l'utilisateur va revenir...

Message cité 1 fois
Message édité par skeye le 04-12-2008 à 09:43:09

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-12-2008 à 09:45:31    

skeye a écrit :

Code :
  1. //on traite les données envoyées via le formulaire, on met en session ce dont on a besoin plus tard
  2. ...
  3.  
  4. header('Location: titi.php');



Le header location doit avoir une adresse absolue :o (HTTP/1.1 Location)
 
Et après une requête POST, c'est un 303 See Other pour forcer le GET qu'il faut utiliser :o

Reply

Marsh Posté le 04-12-2008 à 10:27:13    

FlorentG a écrit :


Le header location doit avoir une adresse absolue :o (HTTP/1.1 Location)
 
Et après une requête POST, c'est un 303 See Other pour forcer le GET qu'il faut utiliser :o


 
[:tartragnan]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 04-12-2008 à 10:32:38    


Nargue-moi avec tes smileys, vas-y :o

Reply

Marsh Posté le 07-12-2008 à 22:56:52    

bon, donc ça marche !  Parfait le coup du PHP intermédiaire !
 
Par contre, bizarre, ça marche sur un de mes comptes OVH, mais pas sur un autre (qui pourtant accepte le PHP) : je copie les mêmes fichiers dans un répertoire nommé pareil, et ça coince !
On dirait que cet autre compte OVH (le plus basique, 1 Mo, offert avec le nom de domaine), gère le PHP mais pas les sessions.
C'est possible ?
 
EDIT : ça marche ce matin !  Peut être une histoire de cache mal vidé entre mes différents test  
En tout cas, merki pour la soluce  :)


Message édité par F22Raptor le 08-12-2008 à 08:29:19

---------------
Is it a bird? Is it a plane? No it s F22Raptor !  -  I love flying because football, baseball, rugby, and golf only take one ball
Reply

Sujets relatifs:

Leave a Replay

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