2009-04-09 5 views
34

Y at-il un bien soutenu, comportement commun que je peux attendre si je fais quelque chose comme ça en HTML:Que se passe-t-il si le champ d'action d'un <form> comporte des paramètres?

<form method="get" action="/somePage.html?param1=foo&param2=foo"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
</form> 

On dirait que ce genre de chose est en soi ridicule, mais je l'ai vu utilisé ici et là et je me demandais ce que le comportement attendu devrait être sur Terre. Est-ce que les navigateurs sont assez intelligents pour ajouter «& param2 = quel que soit & param3 = quoi que ce soit» à l'action, ou jettent-ils simplement un deuxième point d'interrogation? Ou quoi? Y a-t-il des cas où c'est vraiment la bonne façon de faire les choses?

+0

Si vous utilisez apache et besoin contourner ce problème, [il y a une dans une autre réponse stackoverflow] [1] [1]: http://stackoverflow.com/questions/1116019/submitting-a- get-form-with-query-string-params-et-hidden-params-disparaissent/# 16415773 – wanis

Répondre

52

Si l'attribut de méthode est défini sur GET, le navigateur supprime les paramètres de chaîne de requête de l'attribut action avant de construire les valeurs d'argument de formulaire.

Donc, dans votre exemple, la demande au serveur soumettre ressemblera: /somePage.html?param2=value&param3=value

donc pas, lorsque la méthode est « GET », comme dans votre exemple, il n'y a aucune raison de le faire.

+2

et si l'attribut method a été mis à POST, alors les deux seront conservés. La requête au serveur aurait param1 = foo & param2 = foo sur la chaîne de requête, et param2 (avec valeur différente) et param3 comme valeurs de formulaire affichées. – thomasrutter

+0

@thomasrutter tout à fait raison! Je pense que cela dépasse légèrement le cadre de cette discussion. La partie intéressante est la collision évidente. –

+0

@Rex - Je pense qu'il est fascinant que le comportement soit différent pour GET et POST. Ce que je ne m'attendais pas. Y a-t-il une raison logique pourquoi? –

17

Je ne suis pas sûr, mais je pense qu'il est préférable de placer ces variables dans des champs de saisie masqués. De cette façon, cela n'a pas d'importance si votre méthode d'envoi est POST ou GET.

<form method="get" action="/somePage.html"> 
    <input name="param2"></input> 
    <input name="param3"></input> 
    <input type="hidden" name="param1" value="foo" /> 
    <input type="hidden" name="param2" value="foo" /> 
</form> 
4

Vous pouvez changer l'attribut de méthode sous la forme de « POST » avec le script avant de poster le formulaire, donc il pourrait y avoir une raison à la chaîne de requête dans l'action. Cependant, cela ne semble guère être la meilleure solution pour quoi que ce soit.

3

Eh bien, toutes les questions ont été répondues sauf la dernière, à laquelle la réponse est oui. Pour POST, c'est autorisé, mais vous pouvez trouver des cas où cela ne fonctionne pas. J'ai vu des serveurs Web qui autorisent uniquement les postdata ou querystring, donc ce n'est pas fiable.

Questions connexes