Redirection un peu problématique

Eléphant du PHP | 250 Messages

02 déc. 2007, 00:33

Bonjour, comment finaliser une redirection "marche arrière" correcte sans avoir de messages des navigateurs?
en fait j'ai un message d'alerte avec Explorer qui est le suivant:

Avertissement : expiration du délai pour cette page La page requise a été créée en utilisant les informations fournies dans un formulaire. Cette page n'est plus disponible. Par sécurité, Internet Explorer ne renvoie pas automatiquement les informations vous concernant.
Pour envoyer vos informations à nouveau et afficher cette page Web, cliquez sur le bouton Actualiser .
Si on actualise, on revient carrément sur la page d'accueil du site ce qui pose problème.

Avec Mozilla, il y a aussi un message qui apparait mais en confirmant on revient au moins à la page précédente.

En virant le history back et en passant par la flèche précédente des navigateurs, c'est pareil.
voici le bout de script.
<?php
session_start();
$id = $_SESSION['id'];
include 'connexion.php';
$sql= " SELECT x, y, z FROM membres WHERE id = ". $id ." ";  
$res=mysql_query($sql) or die('Erreur SQL '.$sql.'<br>'.mysql_error());
($data = mysql_fetch_assoc($res));
if (($data['x'] == "toto") &&($data['y']== 'tata')&& ($data['z']==''))
       {
echo'<center><body background="image/fond.jpg" bgproperties="fixed"><img src="aspect/choix1.gif">
<br><a href="javascript:history.back()">retour</a></center>';
}
?>

Mammouth du PHP | 881 Messages

02 déc. 2007, 03:24

Si t'as le même problème avec la page ci-bas
http://patriboom.cartefoi.net/patrick/f ... bi02_a.htm (en bas complètement, il y a un lien Revenir en arrière, j'ai peut-être un problème sur mes pages aussi. (Pour tester mon lien, il de faudra passer par d'autres pages semblables avant, mais dès la première tu devrais trouver ton message d'erreur s'il y a lieu).

Si t'as pas de problème là (lien ci-haut), c'est qu'il y a peut-être une faute que je ne vois pas dans ton code ou encore un niveau de sécurité très élevé.
Soyez artisans de paix

Eléphant du PHP | 250 Messages

02 déc. 2007, 22:56

Le lien de ta page ne fonctionne pas depuis chez moi.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 déc. 2007, 11:51

Dès le moment où tu envois des données à une page en POST, alors celle-ci ne peut être réactualisée (par un refresh ou un précédent) sans le renvoi d'information. Par sécurité les navigateurs te demandent donc une confirmation du renvoi de ces données (contrairement à celle passées en get, puisqu'elle font partie de l'url elle sont resoumises automatiquement).

Cela permet d'éviter par exemple de recharger deux fois une page dans laquelle tu commandes et payes un article et te faire débiter 12 fois sans t'en rendre compte :)


Pour éviter cela, on applique en général un pattern PRG : Post-Redirect-Get (p'tite recherche sur le forum :)). C'est à dire que les données du formulaire sont envoyée en POST à une page (éventuellement la même) qui les gère et qui une fois le traitement terminée effectue un header() pour rediriger le navigateur vers une nouvelle page appellée en GET.

L'intérêt de cette méthode, c'est que le navigateur ne voit que deux pages : celle du formulaire et celle du résultat appellé en get. Du coup l'actualisation renvoi les données en GET, donc pas d'envoi en double des données, et la fonction "précédent" renvoi sur le formulaire. Le navigateur n'essayera donc plus de renvoyer des données en POST et n'affichera donc plus de message de confirmation :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 250 Messages

03 déc. 2007, 18:06

Je ne suis pas sur d'avoir tout compris :roll: mais bon. En fait, je ne vois pas dans mon cas un quelconque envoi avec POST ou GET...
Par contre, et je tenais à le signaler, ce bout de script fonctionne parfaitement sur un autre site (hébergé chez la meme boite) ....

Au pire, je redirige sur une page avec un simple lien html et ca devrait le faire.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

03 déc. 2007, 21:53

Comment fait-on pour arriver sur cette page ? on suit un lien ? on clique un bouton ? une image ?
T'aurais un lien à nous donner pour qu'on puisse voir le site ?

Sinon pour le fait que l'actualisation de la page te renvoi vers la page d'accueil à chaque fois, c'est très probablement parce qu'il y a une frame sur le site et que lorsque tu actualises, ce n'est pas la page que tu vois, mais la frame (dont l'url est toujours spécifiée dans la barre d'adresse) qui se recharge :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 881 Messages

06 déc. 2007, 08:43

Le lien de ta page ne fonctionne pas depuis chez moi.
Avant de cliquer sur le lien de "Page précédente", il faut que tu visites une deuxième page, là tu trouveras de nouveau ce lien qui te ramènera à la première.

C'est moins compliqué de repiqué ceci:

Code : Tout sélectionner

<A HREF="javascript:history.back()">Revenir en arri&egrave;re</a>
La différence avec le tien, c'est qu'il n'y a pas d'espace ni de caractère entre javascript: et history
Soyez artisans de paix

Eléphant du PHP | 271 Messages

08 déc. 2007, 10:39

Tu peux utiliser ça pour revenir à la page précédente

Code : Tout sélectionner

<a href="javascript:history.go(-1);">texte ou photo</a>
Patience et obstination sont des qualités !