Betrachten Sie dieses Formular:
<form action="http://www.blabla.com?a=1&b=2" method="GET">
<input type="hidden" name="c" value="3" />
</form>
Beim Absenden dieses Formulars (eines GET-Formulars) verschwinden die Parameter a und b. Gibt es einen Grund dafür? Gibt es eine Möglichkeit, dieses Verhalten zu vermeiden?
Antworten:
Sind das nicht die versteckten Parameter, mit denen man anfangen soll ...?
Ich würde nicht damit rechnen, dass ein Browser eine vorhandene Abfragezeichenfolge in der Aktions-URL beibehält.
In den Spezifikationen ( RFC1866 , Seite 46; HTML 4.x, Abschnitt 17.13.3) heißt es:
Vielleicht könnte man die Aktions-URL prozentual codieren, um das Fragezeichen und die Parameter einzubetten, und dann die Daumen drücken, um zu hoffen, dass alle Browser diese URL so lassen, wie sie ist (und überprüfen, ob der Server sie auch versteht). Aber darauf würde ich mich nie verlassen.
Übrigens: Bei nicht ausgeblendeten Formularfeldern ist das nicht anders. Für POST könnte die Aktions-URL jedoch eine Abfragezeichenfolge enthalten.
quelle
In HTML5 ist dies ein Verhalten pro Spezifikation.
Siehe http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm
Siehe "4.10.22.3 Formularübermittlungsalgorithmus", Schritt 17. Im Fall eines GET-Formulars an einen http / s-URI mit einer Abfragezeichenfolge:
Ihr Browser wird also den vorhandenen "? ..." - Teil Ihrer URI in den Papierkorb werfen und ihn basierend auf Ihrem Formular durch einen neuen ersetzen.
In HTML 4.01 erzeugt die Spezifikation ungültige URIs - die meisten Browser haben dies jedoch nicht getan.
Siehe http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 , Schritt vier - der URI hat ein? angehängt, auch wenn es bereits eine enthält.
quelle
?
in der action url wird entfernt? Was ist also, wenn der GET-Parameter in der Aktions-URL das Ziel enthält, wo das Formular verarbeitet werden soll? wie :action="index.php?site=search"
. Ich bin mir nicht sicher, ob es eine gute Idee ist, den GET-Parameter in versteckte Eingabefelder zu setzen.Sie können ein einfaches foreach für die Tabelle verwenden, die die GET-Informationen enthält. Zum Beispiel in PHP:
quelle
Sie sollten die beiden Elemente (a und b) als versteckte Eingabeelemente sowie C einfügen.
quelle
Location:
wenn Sie keine Interaktion mit dem Endbenutzer wünschen .Ich hatte ein sehr ähnliches Problem, bei dem ich für die Formularaktion so etwas hatte wie:
Die Schaltfläche würde den Benutzer auf die Site bringen, aber die Abfrageinformationen verschwanden, sodass der Benutzer auf der Startseite und nicht auf der gewünschten Inhaltsseite landete. In meinem Fall bestand die Lösung darin, herauszufinden, wie die URL ohne die Abfrage codiert werden kann, die den Benutzer zur gewünschten Seite führt. In diesem Fall war mein Ziel eine Drupal-Site, so wie sich herausstellte,
/content/something
funktionierte es auch. Ich hätte auch eine Knotennummer (dh/node/123
) verwenden können.quelle
Wenn Sie eine Problemumgehung benötigen, da dieses Formular in Systemen von Drittanbietern platziert werden kann, können Sie Apache mod_rewrite wie folgt verwenden:
dann sieht Ihr neues Formular folgendermaßen aus:
und Apache hängt den 3. Parameter an die Abfrage an
quelle
Ihre Konstruktion ist illegal. Sie können keine Parameter in den Aktionswert eines Formulars aufnehmen. Was passiert, wenn Sie dies versuchen, hängt von den Macken des Browsers ab. Es würde mich nicht wundern, wenn es mit einem Browser und nicht mit einem anderen funktionieren würde. Selbst wenn es zu funktionieren schien, würde ich mich nicht darauf verlassen, da die nächste Version des Browsers das Verhalten ändern könnte.
"Aber nehmen wir an, ich habe Parameter in der Abfragezeichenfolge und in versteckten Eingaben. Was kann ich tun?" Sie können den Fehler beheben. Um nicht hinterhältig zu sein, aber das ist ein bisschen so, als würde man fragen: "Aber sagen wir mal, meine URL verwendet Prozentzeichen anstelle von Schrägstrichen. Was kann ich tun?" Die einzig mögliche Antwort ist, dass Sie die URL korrigieren können.
quelle
Dies ist eine Antwort auf den obigen Beitrag von Efx:
Wenn die URL bereits die Variable enthält, die Sie ändern möchten, wird sie erneut als verstecktes Feld hinzugefügt.
Hier ist eine Änderung dieses Codes, um das Duplizieren von Variablen in der URL zu verhindern:
quelle
Ändern Sie die Anforderungsmethode in 'POST' anstelle von 'GET'.
quelle
Normalerweise schreibe ich so etwas:
Dies funktioniert, aber vergessen Sie nicht, Ihre Eingaben gegen XSS-Angriffe zu bereinigen!
quelle