Considérez ce formulaire:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
Lors de la soumission de ce formulaire (un formulaire GET), les paramètres a et b disparaissent. Y at-il une raison à cela? Existe-t-il un moyen d'éviter ce comportement?
Réponses:
N'est-ce pas à cela que servent les paramètres cachés pour commencer ...?
Je ne compterais sur aucun navigateur conservant une chaîne de requête existante dans l'URL de l'action.
Comme le précisent les spécifications ( RFC1866 , page 46; section HTML 4.x 17.13.3):
Peut-être que l'on pourrait encoder l'URL d'action pour cent pour intégrer le point d'interrogation et les paramètres, puis croiser les doigts pour espérer que tous les navigateurs laisseront cette URL telle qu'elle (et validera que le serveur la comprend aussi). Mais je ne compterais jamais là-dessus.
Soit dit en passant: ce n'est pas différent pour les champs de formulaire non masqués. Pour POST, l'URL de l'action peut contenir une chaîne de requête.
la source
En HTML5, il s'agit d'un comportement par spécification.
Voir http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm
Regardez "4.10.22.3 Algorithme de soumission de formulaire", étape 17. Dans le cas d'un formulaire GET vers un URI http / s avec une chaîne de requête:
Ainsi, votre navigateur supprimera la partie "? ..." existante de votre URI et la remplacera par une nouvelle basée sur votre formulaire.
Dans HTML 4.01, la spécification produit des URI invalides - la plupart des navigateurs ne l'ont pas fait cependant.
Voir http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , étape quatre - l'URI aura un? ajouté, même s'il en contient déjà un.
la source
?
URL d'action est supprimé? Alors, quel est, si le paramètre GET dans l'url d'action contient la cible, où le formulaire doit être traité? comme:action="index.php?site=search"
. Je ne suis pas sûr, si mettre le paramètre GET dans des champs de saisie cachés est une idée divine.Ce que vous pouvez faire est d'utiliser un simple foreach sur la table contenant les informations GET. Par exemple en php:
la source
Vous devez inclure les deux éléments (a et b) comme éléments d'entrée masqués ainsi que C.
la source
Location:
redirection de serveur si vous ne souhaitez aucune interaction avec l'utilisateur final. .J'ai eu un problème très similaire où pour l'action de formulaire, j'avais quelque chose comme:
Le bouton amènerait l'utilisateur au site, mais les informations de la requête ont disparu, de sorte que l'utilisateur a atterri sur la page d'accueil plutôt que sur la page de contenu souhaitée. La solution dans mon cas était de savoir comment coder l'URL sans la requête qui amènerait l'utilisateur à la page souhaitée. Dans ce cas, ma cible était un site Drupal, donc il s'est avéré
/content/something
également fonctionner. J'aurais aussi pu utiliser un numéro de noeud (ie/node/123
).la source
Si vous avez besoin d'une solution de contournement, car ce formulaire peut être placé dans des systèmes tiers, vous pouvez utiliser Apache mod_rewrite comme ceci:
alors votre nouveau formulaire ressemblera à ceci:
et Apache ajoutera le 3e paramètre à la requête
la source
Votre construction est illégale. Vous ne pouvez pas inclure de paramètres dans la valeur d'action d'un formulaire. Que se passe-t-il si vous essayez cela dépendra des caprices du navigateur. Je ne serais pas surpris si cela fonctionnait avec un navigateur et pas avec un autre. Même si cela semblait fonctionner, je ne m'y fierais pas, car la prochaine version du navigateur pourrait changer 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. Pour ne pas être sournois, mais cela revient un peu à demander: «Mais disons que mon URL utilise des signes de pourcentage au lieu de barres obliques, que puis-je faire? La seule réponse possible est que vous pouvez corriger l'URL.
la source
C'est en réponse au message ci-dessus par Efx:
Si l'URL contient déjà la variable que vous souhaitez modifier, elle est à nouveau ajoutée en tant que champ masqué.
Voici une modification de ce code pour éviter la duplication de vars dans l'URL:
la source
changer la méthode de demande en «POST» au lieu de «GET».
la source
J'écris habituellement quelque chose comme ça:
Cela fonctionne, mais n'oubliez pas de nettoyer vos entrées contre les attaques XSS!
la source