History.back() et HTTP_REFERER [Résolu]

Signaler
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
-
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
-
Salut !
Voici mon problème, je capte vraiment pas d'où ca peut venir !!

index.php: juste un lien vers page2.php
<html>
[page2.php PAGE 2]
</html>

page2.php: un formulaire POST vers page3.php + un echo $_SERVER["HTTP_REFERER"];
<html>
<form action="page3.php" method="post"></form>
<?php echo $_server["http_referer"];?>
</html>

page3.php: history.back()
<html><script>alert("retour"); window.history.back();</script></html>

Le problème est que mon echo $_SERVER["HTTP_REFERER"]; affiche toujours index.php, même quand je valide mon formulaire !!!
Si qqun a une idée, parceque là je vois pas !
merci d'avance

_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne

11 réponses

Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

essaie un:
session_cache_limiter('private_no_expire');
avant le session.start() normalement cela évite l'envoi du header qui empèche la mise en cache (responsable du problème).
http://kysicurl.free.fr/
Messages postés
591
Date d'inscription
mercredi 20 juillet 2005
Statut
Membre
Dernière intervention
16 juillet 2009
2
Saell og blesuð


Quand vous faites un window.history.back(); vous demandez au navigateur client de faire un precedent donc il va chercher dans son cache et reaffiche la page2 mais le server lui n est pas solicite




Vilhjálms
Sigurðsdóttir aka Frëyjá
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
ok c'est logique merci !
Et y'a-t-il un moyen de faire ca !?
Parceque ma page2.php est un gros formulaire, ca éviterait de le re-remplir !

_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Salut,
Une première solution est de sauvegarder la dernière page visitée par le client sur le serveur en utilisant par exemple les sessions.
Une autre est de remplacer le history.back() par un lien vers la page du formulaire et de prépremplir le formulaire avec ce qu'il avait posté la première fois (ce qui implique donc de sauvegardé ce qu'il a posté (session encore...)).
Une autre est sans doute de ce passer d'HTTP_REFERER, mais il faudrais savoir a quoi il vous sert.
(L'header ou la balise méta nocache sont peut être une solution, mais j'ai peur que de toute façon même si le navigateur recharge la page il envoit comme referer celle qui précède dans l'historique, c'est à dire la page index, et de toute manière cela supprimera surement le contenu du formulaire également).
Sinon je suppose que la page3 sert à traiter le formulaire, il est aussi possible de traiter le formulaire sur la même page que celle qui l'affiche, avec affichage éventuel de l'erreur avant le formulaire si il a été mal rempli (ça évite d'avoir à sauvegarder le contenu du formulaire pour le réafficher puisque qu'à ce moment là il est disponible dans les variables POST).
Enfin voilà, il y a plein de solutions en fait, tout dépend de ce que vous voulez faire...
http://kysicurl.free.fr/
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
Salut !
merci de ta réponse !

En fait mon formulaire de page2 est pré-rempli quand on passe par index.
Dans page3, si certaines infos sont incorrectes, je retourne sur page2. Mais du coup il ne faudrait pas que le formulaire se préremplisse ....
en gros dans page2 :

si provenance=index -> pré-remplir le formulaire (en js)
sinon garder les infos entrées par l'utilisateur

traiter le formulaire sur page2 me ferait faire bcp trop de modifs ! (page3 sert a traiter plusieurs form)

je pense que je vais être obligé de stocker le contenu et dans page3, au lieu de window.history.back() :
window.location.href='page2.php?info1=xxx&info2=xxx&etc....';

Si vous avez une autre idée hésitez pas !
encore merci

_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Salut,
ba ça devrait marcher tout seul alors (je dois pas comprendre).
Exemple:
1.html:
   <form method="pos" action="2.html">
   
   
    </form>
2.html:
    [javascript: history.go(-1); retour]
Quand on arrive la première fois sur la première page, le champ est prérempli avec "essai", mais si l'on change le champ, puis qu'on valide, puis qu'on fait retour, on retrouve bien ce que l'on a saisie (le navigateur laisse ce qu'on a rentré).
(et  on peut bien sur changer le contenu de value en php suivant la provenance).
http://kysicurl.free.fr/
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
Alors là je pige plus rien !!
Avec l'exemple ca marche nickel, et avec mon appli ca marche pas ....
pourtant y'a rien de spécial dans mes pages !

J'ai tout simplifié jusqu'à avoir un truc aussi simple que l'exemple .... ca a marché, mais pas du premier coup
du coup j'ai remis les pages telles qu'elles étaient au début .... ca a marché 3-4 fois et maintenant ce remarche plus !

je capte plus rien là
_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

Ce qu'il serait intéressant de savoir c'est si la page est rechargée ou si le navigateur se sert du cache (en affichant l'heure du serveur sur la page par exemple).
Sinon est-ce que cela à avoir avec le temps entre le premier chargement de la page 2 et le moment ou l'on y retourne ?
(voir avec une balise meta : <meta http-equiv="Expires" content="3600"/> )
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
je ne crois pas que ca vienne du cache sinon ca ne marcherait pas pour l'exemple !

apparement ca vient de ma session php !????

avec session_start(); au début de ma page2 ca ne marche pas !
j'enleve le session_start, je relance mon navigateur ca marche !

moi pas comprendre

_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne
Messages postés
332
Date d'inscription
mardi 12 juillet 2005
Statut
Membre
Dernière intervention
17 juillet 2010

et sinon (en php avant d'ouvrir la session):
header("Cache-Control: private_no_expire");
header("Pragma: private_no_expire");
header("Expires: 1");

http://kysicurl.free.fr/
Messages postés
536
Date d'inscription
lundi 5 mai 2003
Statut
Membre
Dernière intervention
29 janvier 2009
1
Yessss ca marche !!!
Merci beaucoup, je n'aurais pas trouvé tout seul !!
Une journée qui commence bien !
Encore merci ;) a+++
_____________________
 http://www.bzh-metal.com
Communauté Métal Bretonne