Sur IE, history.back() ne restitue liste
François
-
Quid37 -
Quid37 -
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>
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:
- Sur IE, history.back() ne restitue liste
- Liste déroulante excel - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
- Site dangereux liste - Guide
- Comment cacher sa liste d'amis sur facebook - Guide
1 réponse
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.
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.
Sauf autre proposition de solution, je vais devoir tester d'autres moyens d'arriver à mes fins.
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.
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.