Sur IE, history.back() ne restitue liste

Fermé
François - 28 sept. 2009 à 20:51
 Quid37 - 29 sept. 2009 à 19:54
Bonjour,
J'essaie vainement de trouver une solution pour pouvoir afficher ce que donnera réellement l'envoi d'un formulaire, puis retourner à ce formulaire soit pour corriger, soit pour envoyer.
Mon code fonctionne parfaitement avec Firefox, mais pas avec Internet Explorer.
Sur ce dernier, lors du retour, la liste de choix est désactivée. Y a-t-il une solution simple?
Voici un exemple simplifié illustrant ce que je veux faire (ne traitant pas de l'envoi des données puisque le problème ne se situe pas à ce niveau)

<html>
<head>
<title>Document sans-titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script language="JavaScript">
<!--
function SelectionAutrePays()
{
var Indice = document.forms['Annonce'].elements['Z_PAYS'].selectedIndex;
var Valeur = document.forms['Annonce'].elements['Z_PAYS'].options[Indice].text;
document.forms['Annonce'].elements['Z_AUTRE_PAYS'].style.visibility = (Valeur=="Autre pays")?"visible":"hidden";
document.forms['Annonce'].elements['Z_AUTRE_PAYS'].disabled = (Valeur=="Autre pays")?false:true;
}
//-->
</script>
</head>

<body bgcolor="#FFFFFF">
<form name="Annonce" action="1_Essai.php" method="post">
<?php
if (isset($_POST['B_ENVOI']))
{
if ($_POST['RADIO_SELECTION']=="Poster")
{
if (isset($_POST['Z_AUTRE_PAYS']))
{
echo "Pays choisi: ".$_POST['Z_AUTRE_PAYS'];
}
else
{
echo "Pays choisi: ".$_POST['Z_PAYS'];
}
}
elseif ($_POST['RADIO_SELECTION']=="Voir")
{
?>

<!-- Début partie visualisation **************************************************** -->
<table width="500" border="1" cellspacing="0" align="center">
<tr bgcolor="#008000">
<td colspan="2">
<div align="center"><b><font color="#FFFFFF">Exemple</font></b></div>
</td>
</tr>
<tr>
<td width="179"><b>Pays choisi:</b></td>
<td width="311">
<div align="center"><?php if(isset($_POST['Z_AUTRE_PAYS'])){echo $_POST['Z_AUTRE_PAYS'];}else{echo $_POST['Z_PAYS'];}?></div>
</td>
</tr>
<tr>
<td width="490" colspan="2" height="2">
<div align="center">
<input type="button" name="B_RETOUR" value="Retour" onclick="history.back()">
</div>
</td>
</tr>
</table>
<!-- Fin partie visualisation ***************************************************** -->
<?php
}
}
else
{
?>
<!-- Début partie affichage formulaire******************************************** -->
<p align="center">
<select name="Z_PAYS" size="1" onchange="SelectionAutrePays();">
<option>Belgique</option>
<option>France</option>
<option>Autre pays</option>
</select>
<input type="text" name="Z_AUTRE_PAYS" <?php if (!isset($_POST['Z_PAYS']) OR $_POST['Z_PAYS']!="Autre pays"){echo " disabled style=\"visibility:hidden;\"";}?>>
</p>
<p align="center">Que voulez-vous faire?
<input type="radio" name="RADIO_SELECTION" value="Voir" checked>
Visualiser
<input type="radio" name="RADIO_SELECTION" value="Poster">
Poster</p>
<p align="center">
<input type="submit" name="B_ENVOI" value="Envoyer">
</p>
<!-- Fin partie affichage formulaire*********************************************** -->
<?php
}
?>
</form>
</body>
</html>
A voir également:

1 réponse

Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906
28 sept. 2009 à 21:10
Salut,
c'est normal, firefox par défaut conserve les données saisies.
Il ne s'agit pas d'un fonctionnement lié à du javascript ou autre mais c'est disons une "fonctionnalité/particularité" de firefox. (qui d'ailleurs peut être encombrante dans certains cas).

Pour en revenir au problème, le moyen le plus commun est de retourner à la page du formulaire en passant les divers valeurs saisies en GET.
0
Quid37 Messages postés 2 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 28 septembre 2009
28 sept. 2009 à 21:48
Merci, je vais essayer, mais étant novice, je vais devoir passer un peu de temps à étudier le GET, puis tester. Je donnerai le résultat dès que possible, succès ou non.
0
Quid37 Messages postés 2 Date d'inscription lundi 28 septembre 2009 Statut Membre Dernière intervention 28 septembre 2009
28 sept. 2009 à 23:26
J'ai remplacé le $Post par $GET, çà ne change rien, ce qui n'est pas une surprise.
Sauf autre proposition de solution, je vais devoir tester d'autres moyens d'arriver à mes fins.
0
Bon, j'ai testé le Get qui ne m'a pas apporté de solution. En fait, au rechargement de la page par history-back, IE a bien conservé la valeur sélectionnée dans la liste de choix. Le problème est donc: comment peut-on récupérer cette valeur avec php (ou javascript?) lors du rechargement de la page afin d'activer/désactiver la zone de texte selon cette valeur. Le parcours de nombreux groupes ne m'a pas permis de trouver une réponse. Finalement, ce n'est sans doute pas possible en php. Je vais essayer avec Jacascript.
0
Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020 906 > Quid37
29 sept. 2009 à 16:14
Oublie le history.back()!

Tout devra être géré coté serveur (= php), et pas de javascript.
Tu as deux scripts php:
- ton formulaire
- le script de traitement qui va traiter les informations saisies

Ton formulaire va envoyer les infos en POST au script de traitement. Celui-ci va vérifier notamment le format des données saisies comme par exemple le format des emails sous la forme "xxx@xxx.xx". Si les données saisies sont correctes alors on redirige vers la suite sinon on revient vers le formulaire en passant en GET les données saisies.
Cela impose dans la page du formulaire que l'on affiche si elles existent (au moyen de la fonction isset() ) les données transmises en GET.

Donc pas de javascript et surtout pas de history.back().

Je te renvois aux différents tutos existants sur la toile pour les précisions.
0
Quid37 > Zempachi Messages postés 7472 Date d'inscription vendredi 14 octobre 2005 Statut Contributeur Dernière intervention 5 juin 2020
29 sept. 2009 à 17:31
Merci de ton aide,
Les traitements préconisés ont bien été programmés. Le code que j'ai envoyé n'était qu'un exemple, j'ai, en réalité 842 lignes pour ma page.
Le formulaire m'envoie un mail qui comporte tout le code HTML d'une page. Un copier-coller, je vérifie le contenu puis l'envoie sur le site.
Les membres qui postent des annonces d'actions (site d'une organisation humanitaire) souhaitent maintenant pouvoir visualiser ce que donnera la page avant publication, et retourner sur le formulaire contenant les infos déjà saisies pour éventuelles modifications.
Je ne souhaitais pas passer par une base de données, et afficher une page dont le code se trouve avec le formulaire. Selon le choix, avec des radios, le clic sur le bouton d'envoi soit affiche la page telle qu'elle sera sur le site - c'est là qu'est le bouton qui utilise le history-back - , soit m'envoie les données.
Cà me semblait être un concept simple.
Je cherche encore un peu, et si je trouve une méthode , je publie avant de clore la discussion.
0