• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

form method GET überschreibt GET variabeln in action

shylux

Neues Mitglied
Folgendes Szenario:
HTML:
<form method="GET" action="test.php?a=testa&b=testb">
  <input name="value" type="input" />
  <input type="submit" value="Submit" />
</form>

Der generiert daraus sowas:
Code:
test.php?value=whatever

Die variabeln a und b werden überschrieben. Ich weis das POST eine möglichkeit wäre, aber ich möchte aus "transparenz" alle parameter per get übergeben.
Ist es möglich die werte aus den input feldern an die existierenden in der action anzuhängen? oder gibts irgendwelche hacks die das machen?

#edit:
Ich werde es als workaround mit hidden feldern realisieren. Es würde mich aber trotzdem interessieren ob das nicht anders geht.
 
Zuletzt bearbeitet:
Darum wird sowas inzwischen oft mit /param/value/param2/value2/ gelöst. Du brauchst zwei <input type=hidden> mit denen du die GET-Parameter durch reichst (man könnte mit PHP über $_GET schleifen und diese erzeugen (htmlspecialchars nicht vergessen)).
 
versuch mal das & durch ein &amp; zu ersetzen...
dann sollte das klappen... läuft jedenfalls bei mir so ;)

wenn das nich läft, die existierenden get elemente mit php auslesen und in hidde felder schreiben :D
 
&amp; ist nur zu Maskierung da, da & in HTML reserviert ist für Entities. Sollte am Verhalten des Browsers, wie er die URL zusammenbaut nichts ändern.
 
Ich würde mir mittels $_REQUEST mal alle Variablen ausgeben lassen, die der das Formular sendet. Mit $_REQUEST muss man sich auch nicht drum kümmern, ob es nun GET oder POST war. An Überschreiben glaub ich ehrlich gesagt nicht, es sei denn, du machst das irgendwo, schließlich werden GET und POST massenhaft problemlos eingesetzt.
PHP:
   if (isset($_REQUEST)) {
     echo "<table border=\"0\">";
     while (list($key,$value) = each($_REQUEST)) {
         echo "<tr><td>$key</td><td>$value</td></tr>";
     };
     echo "</table>";
   } else {
      echo "<h1>Nix gefunden</h1>";
   }
 
PHP:
   if (isset($_REQUEST)) {
     echo "<table border=\"0\">";
     while (list($key,$value) = each($_REQUEST)) {
         echo "<tr><td>$key</td><td>$value</td></tr>";
     };
     echo "</table>";
   } else {
      echo "<h1>Nix gefunden</h1>";
   }
Hervorragend! Cross-Site-Scripting-Gefahr nicht gebannt, sondern gefördert!

PHP:
<?php foreach ($_GET as $key => $value): ?>
    <input type="hidden"
           name="<?php print htmlspecialchars($key); ?>"
           value="<?php print htmlspecialchars($value); ?>" />
<?php endforeach; ?>
Und $_REQUEST würde ich eben nicht loopen, da dort auch $_COOKIE mit enthalten ist.
 
Es war einfach ein Tip, mal zu sehen, was für Daten sein Formular überhaupt sendet. Scheinbar macht es ja was völlig anderes als erwartet.
 
Zurück
Oben