Forms imbriqués : problème uniquement avec Internet Explorer

Christine
Invité n'ayant pas de compte PHPfrance

07 juil. 2007, 13:37

Bonjour le groupe,

Etant en train de développer une appli en php, je suis confrontée à un pb :
Dans mon form principal <form1> (avec name, action et method bien définis) j'ai un form imbriqué <form2> pour lequel action et method ne sont pas définis (et onSubmit:return false), car ce form fait appel à un peu de javascript et d'ajax, donc pas de rechargement de page, donc pas de submit (ça me sert à mettre à jour le contenu d'une liste de choix <select> d'après les informations qui ont été saisies dans un champ <text>)
Le pb est que quand je clique sur mon bouton submit du form principal <form1>, il n'y a aucune réaction, comme si ce bouton était lié à mon form imbriqué <form2> qui lui ne possède ni action ni method. Et pourtant ce bouton est bien placé après la balise de fermeture du form imbriqué.
Etant précisé que sous Firefox tout ça fonctionne très bien !

Alors si vous avez des pistes pour m'aider à résoudre ce pb avec ce P#@£$ d'internet explorer (j'ai la v.6)... MERCI BEAUCOUP PAR AVANCE ;-)
Christine

ViPHP
ViPHP | 5924 Messages

07 juil. 2007, 14:21

C'est normal que internet explorer ne supporte pas les forms imbriqués vu que ce n'est pas correct. Les recommandations interdisent de mettre une balise form dans une autre balise form.
Ce qui est étonnant par contre, c'est que ce soit Internet Explorer qui te pose des problème et non les autres...

Invité
Invité n'ayant pas de compte PHPfrance

07 juil. 2007, 14:41

Oui, je connais ces recommandations, mais franchement, j'avais rarement vu Internet Explorer se soucier de ce genre de "détail", il nous donnait plutôt l'impression d'interpréter le html à la va-comme-j-te-pousse, et effectivement, c'était plutôt avec d'autres navigateurs plus stricts qu'on avait ce genre de pb... Apparemment Billou est rentré dans le rang ;-)

J'ai un début de solution qui fait que mon bouton submit réagit désormais : à ce submit j'ai ajouté onClick="javascript:document.monformulaire.action='traitement.php?action=ajouterconfirmer';document.monformulaire.submit()"
Là, je passe bien à la page de traitement du formulaire.

MAIS il subsiste un pb de taille : toutes les données de mon form sont passées en variables, à l'exception des 2 champs de form situés à l'intérieur de mon form imbriqué ! Donc ça me fait une belle jambe d'utiliser ajax dans mon cas, si IE est incapable de transmettre ces données !

Bon, je maintiens comme même ma demande à l'aide... Merci !
C'est normal que internet explorer ne supporte pas les forms imbriqués vu que ce n'est pas correct. Les recommandations interdisent de mettre une balise form dans une autre balise form.
Ce qui est étonnant par contre, c'est que ce soit Internet Explorer qui te pose des problème et non les autres...

Mammouth du PHP | 19672 Messages

07 juil. 2007, 14:53

Comme précisé par Sékiltoyai, il est syntaxiquement interdit d'imbriquer des formulaires en HTML quelle que soit la norme utilisée (HTML 4 ou XHTML).

Donc la solution passer par la suppression de l'imbrication. Ça ne t'oblige nullement à supprimer pour autant les champs contenus dans ce second formulaire.

Et pour terminer, tu as trouvé toi-même une solution en JavaScript.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Christine
Invité n'ayant pas de compte PHPfrance

07 juil. 2007, 15:28

J'aimerais bien supprimer l'imbrication, mais comment je fais pour conserver ma "fonctionnalité ajax" ? Voici en gros le code de mes forms :

<form name="form1" id="form1" action="traitement.php" method="POST" enctype="multipart/form-data">
(...ici quelques champs de form divers...)
<form name="form2" id="form2" action="" method="" onsubmit="return false;">
<input type="text" name="codepostal" id="codepostal" onBlur="majListeVilles(this.form)">
<div id="ChoixVille"style="display:inline"><select name="ListeVille" id="ListeVille"></select></div>
</form> (fermeture du form imbriqué)
(...ici encore quelques champs de forms...)
<input type="submit" value="OK" onClick="javascript:document.form1.action='traitement.php';document.form1.submit()">
</form> (fermeture du form principal)

Sans vous donner le détail, ma fonction majListeVilles(this.form) renvoie à un fichier php "invisible" qui exécute une requête de sélection des villes correspondant au code postal saisi, qui alimente ensuite ma liste de choix <select> avec cette liste de villes filtrées, le tout sans rechargement de page, normal puisque ce form imbriqué possède la méthode "onsubmit:return false;", et que son "action" et sa "method" sont définies au cours de l'exécution de ma fonction de MAJ des villes.

Et c'est là où je pense que l'imbrication de 2 forms est indispensable, parce que leurs 2 actions sont totalement différentes ainsi que leur résultat : l'un met simplement à jour le contenu d'une liste de choix, tandis que l'autre est chargé de passer les variables pour le traitement.

Donc malgré mon début de solution, il me manque le truc pour forcer mon form principal à transmettre les variables des 2 champs situés à l'intérieur du form imbriqué.

Voilà, ya bien une solution bon sang ???!!! désolée, je m'énerve :?

Comme précisé par Sékiltoyai, il est syntaxiquement interdit d'imbriquer des formulaires en HTML quelle que soit la norme utilisée (HTML 4 ou XHTML).

Donc la solution passer par la suppression de l'imbrication. Ça ne t'oblige nullement à supprimer pour autant les champs contenus dans ce second formulaire.

Et pour terminer, tu as trouvé toi-même une solution en JavaScript.

Mammouth du PHP | 19672 Messages

07 juil. 2007, 16:42

As-tu seulement essayé de simplement virer les balises <form> qui sont imbriquées sans toucher aux champs contenus dedans ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Christine
Invité n'ayant pas de compte PHPfrance

09 juil. 2007, 08:23

Effectivement c'est ça, j'suis trop bête, j'étais persuadée que mon petit bout d'ajax devait être emprisonné dans un form, mais que nenni, un form pour tout le monde, et du javascript pour les différents évènements à gérer sur ce même form.
En tout cas merci à vous pour votre aide, sympa !
@+
As-tu seulement essayé de simplement virer les balises <form> qui sont imbriquées sans toucher aux champs contenus dedans ?