271 votes

soumettre un formulaire GET avec des paramètres de chaîne de requête et des paramètres cachés disparaissent

Considérez cette forme :

<form ... action="http:/www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" /> 
</form>

Lorsque je soumets ce formulaire (un formulaire GET), les paramètres a et b disparaissent. Y a-t-il une raison à cela ? Existe-t-il un moyen d'éviter ce comportement ?

Merci, Tal.

0voto

wanis Points 9

Si vous avez besoin d'une solution de rechange, car ce formulaire peut être placé dans des systèmes tiers, vous pouvez utiliser Apache mod_rewrite comme ceci :

RewriteRule ^dummy.link$ index.php?a=1&b=2 [QSA,L]

alors votre nouveau formulaire ressemblera à ceci :

<form ... action="http:/www.blabla.com/dummy.link" method="GET">
<input type="hidden" name="c" value="3" /> 
</form>

et Apache ajoutera le 3ème paramètre à la requête

-3voto

Jay Points 14781

Votre construction est illégale. Vous ne pouvez pas inclure de paramètres dans la valeur d'action d'un formulaire. Ce qui se passe si vous essayez ceci va dépendre des bizarreries du navigateur. Je ne serais pas surpris que cela fonctionne avec un navigateur et pas avec un autre. Même si cela semble fonctionner, je ne m'y fierais pas, car la prochaine version du navigateur pourrait modifier le comportement.

"Mais disons que j'ai des paramètres dans la chaîne de requête et dans les entrées cachées, que puis-je faire ?" Ce que vous pouvez faire, c'est corriger l'erreur. Sans vouloir être narquois, c'est un peu comme si vous demandiez : "Mais disons que mon URL utilise des pourcentages au lieu de barres obliques, que puis-je faire ?". La seule réponse possible est que vous pouvez corriger l'URL.

-3voto

Rápli András Points 1265

J'écris généralement quelque chose comme ça :

foreach($_GET as $key=>$content){
        echo "<input type='hidden' name='$key' value='$content'/>";
}

Cela fonctionne, mais n'oubliez pas d'assainir vos entrées contre les attaques XSS !

-4voto

Shashidhar Gr Points 88
<form ... action="http:/www.blabla.com?a=1&b=2" method ="POST">
<input type="hidden" name="c" value="3" /> 
</form>

changer la méthode de demande en 'POST' au lieu de 'GET'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X