Peter Mairhofer: Probleme mit GET??

Hallo,

Mit POST kann ich folgendes machen

<form action="/x.php?var1=1&var2=1&var3=1" method="POST">
(...)
<input type=text name="var3" value="1">
(...)

Und mir stehen beide Variablen in PHP zu Verfügung. Geht das mit GET nicht mehr?!?!

Ich generiere folgendes Formular mit PHP (entschuldigung dass ich den ganzen Code poste aber ich bin so ratlos, dass es vielleicht echt nützlich ist den ganzen Code zu senden):

Damit nicht alles doppelt abgeschickt wird, entferne ich alle Variablen aus der Request URI und nehme das dann als action:

$removeFields = "s_zielgebiet|s_personen|s_thema|s_region|s_budget_von|s_budget_bis|s_zeit_von|s_zeit_bis";
<form name="prog_suche" action="<?=preg_replace("/&($removeFields)=[0-9]*/", "", $REQUEST_URI)?>" method="GET">

<form name="prog_suche" action="/incentives/layout/index.php?scheme=21" method="GET">
<table border=0 cellspacing=3 cellpadding=1 width="100%">
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h1">
 FINDEN
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 TEILNEHMER
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <input type="text" name="s_personen" value="" style="width: 40px">
 mind. 10 Personen
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 ZIELGEBIET
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <select name="s_zielgebiet" style="width: 150px">
 <option value="-1">beliebig</option>
 <option value="1" selected>Österreich</option>
<option value="2" >Deutschland</option>
<option value="3" >Slowenien</option>
<option value="4" >Italien</option>
<option value="5" >Kroatien</option>
<option value="6" >Frankreich</option>
<option value="7" >Schweiz</option>
<option value="8" >Lichtenstein</option>
<option value="9" >Ungarn</option>
<option value="10" >Tschechien</option>
<option value="11" >Rumänien</option>
<option value="12" >Russland</option>
<option value="13" >Weissrussland</option>
<option value="14" >Polen</option>
 </select>
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 REGION
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <select name="s_region" style="width: 150px">
 <option value="-1">beliebig</option>
 <option value="2" >Tirol</option>
<option value="3" >Salzburg</option>
<option value="4" >Niederösterreich</option>
<option value="5" >Oberösterreich</option>
<option value="7" >Burgenland</option>
<option value="8" >Kärnten</option>
<option value="9" >Steiermark</option>
 </select>
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 BUDGET
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <table border=0 cellspacing=0 cellpadding=0 width="100%">
 <tr>
     <td align="left">von</td>
     <td align="right">
  <select name="s_budget_von" style="width: 100px">
  <option value="-1">beliebig</option>
  </select>
     </td>
 </tr>
 </table>
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <table border=0 cellspacing=0 cellpadding=0 width="100%">
 <tr>
     <td align="left">bis</td>
     <td align="right">
  <select name="s_budget_bis" style="width: 100px">
  <option value="-1">beliebig</option>
  </select>
     </td>
 </tr>
 </table>
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 THEMA
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png" class="find_h2">
 <select name="s_thema" style="width: 150px">
 <option value="-1">beliebig</option>
 <option value="1" >Rahmenprogramm</option>
<option value="2" >Tagesprogramm</option>
<option value="5" selected>Themenprogramm</option>
<option value="3" >Incentives</option>
<option value="4" >Incentivereisen</option>
<option value="6" >VIP Pakete</option>
<option value="7" >Betriebsausflug</option>
<option value="8" >Exclusiv für Sie</option>
 </select>
    </td>
</tr>

<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_dunkelblau.png" class="find_h2">
 ZEITRAUM
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <table border=0 cellspacing=0 cellpadding=0 width="100%">
 <tr>
     <td align="left">von</td>
     <td align="right">
  <select name="s_zeit_von" style="width: 100px">
  <option value="-1">beliebig</option>
  </select>
     </td>
 </tr>
 </table>
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <table border=0 cellspacing=0 cellpadding=0 width="100%">
 <tr>
     <td align="left">bis</td>
     <td align="right">
  <select name="s_zeit_bis" style="width: 100px">
  <option value="-1">beliebig</option>
  </select>
     </td>
 </tr>
 </table>
    </td>
</tr>
<tr>
    <td background="http://www2.scc.co.at/incentives/layout/pics/verlauf_hellblau.png">
 <p onClick="document.prog_suche.submit()"><b>JETZT FINDEN</b></p>
    </td>
</tr>
</table>
</form>

Wieso bekomme ich dann beim Abschicken

index.php?s_personen=10&s_zielgebiet=1&s_region=-1&s_budget_von=-1&s_budget_bis=-1&s_thema=5&s_zeit_von=-1&s_zeit_bis=-1

und nicht

index.php?scheme=21&s_personen=10&s_zielgebiet=1&s_region=-1&s_budget_von=-1&s_budget_bis=-1&s_thema=5&s_zeit_von=-1&s_zeit_bis=-1

?

Vielen Dank (trotz des langen Posts)

Peter

  1. Hi,

    <form action="/x.php?var1=1&var2=1&var3=1" method="POST">
    Und mir stehen beide Variablen in PHP zu Verfügung.

    kritisch! Dein Server ist misskonfiguriert, er bietet ein klaffendes Sicherheitsloch. Es sollten Dir nur die Parameter in $_POST zur Verfügung stehen, jedoch keine Variablen namens $var1 o.ä. Davon abgesehen *muss* *jedes* "&" in HTML als "&" kodiert werden, ansonsten ist(!) es die Einleitung einer Entity.

    Geht das mit GET nicht mehr?!?!

    Dann stehen die Parameter natürlich in $_GET.

    Damit nicht alles doppelt abgeschickt wird, entferne ich alle Variablen aus der Request URI und nehme das dann als action:

    Es existiert kein Weg, irgendwelche Variablen über HTTP zu übertragen. Sprich bitte von Parametern.

    Vielen Dank (trotz des langen Posts)

    Beim nächsten Mal kürze den Code bitte auf den relevanten Teil, danke.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      <form action="/x.php?var1=1&var2=1&var3=1" method="POST">
      Und mir stehen beide Variablen in PHP zu Verfügung.

      kritisch! Dein Server ist misskonfiguriert, er bietet ein

      klaffendes Sicherheitsloch. Es sollten Dir nur die Parameter in

      (bekannter Text)
      Mein Server ist weder misskonfiguriert noch bietet er ein klaffendes Sicherheitsloch. Ich meinte dass mir die Variablen *ZU VERFÜGUNG STEHEN*. Ob ich jetzt als $var1 oder $_POST['var1'] zugreife ist doch in diesem Zusammenhang wirklich völlig egal.

      Geht das mit GET nicht mehr?!?!

      Dann stehen die Parameter natürlich in $_GET.

      Das hat meine Frage nicht beantwortet, ausserdem stehen die Daten dann auch nicht in $_GET. Genau deswegen hab ich ja den ganzen Code gepostet, weil dieses komische Phänomen dann vielleicht wer anders ausprobieren könnte ders nicht glaubt. Im Prinzip brauchst du kein PHP dazu. Du brauchst nur schauen, was nach dem Abschicken des Formulars in der URL-Zeile steht. Und das kann nicht so sein.

      Es existiert kein Weg, irgendwelche Variablen über HTTP zu übertragen. Sprich bitte von Parametern.

      $text = preg_replace("/Variablen/", "Parametern", $text);

      Beim nächsten Mal kürze den Code bitte auf den relevanten Teil, danke.

      Siehe oben. Es ist offensichtlich sinnvoll den ganzen Code zu posten.

      Ich wollte lediglich wissen wieso

      <form action="/x.php?var1=25" method="GET">
      <input type="text" name="var2" value="26">
      </form>

      nicht funktioniert.

      Anstatt /x.php?var1=25&var2=26 steht /x.php?var2=26 nach einem Klick auf Submit in der URL-Zeile (und das hat nichts mit PHP zu tun, deshalb mein Thema auch HTML und nicht PHP)

      Peter

      1. Hi,

        Mein Server ist weder misskonfiguriert noch bietet er ein klaffendes Sicherheitsloch. Ich meinte dass mir die Variablen *ZU VERFÜGUNG STEHEN*.

        das ist exakt das aus einer Misskonfiguration resultierende Sicherheitsloch, von dem ich rede.

        Ob ich jetzt als $var1 oder $_POST['var1'] zugreife ist doch in diesem Zusammenhang wirklich völlig egal.

        Nein. Erster Fall (bzw. die Möglichkeit dazu) ist ein Sicherheitsloch, zweiteres ein Zugriff auf _Parameter_, nicht auf Variablen.

        Geht das mit GET nicht mehr?!?!
        Dann stehen die Parameter natürlich in $_GET.
        Das hat meine Frage nicht beantwortet,

        Wenn Du weiterhin versucht hättest, auf $_POST zuzugreifen, hätte es das. Deiner Problembeschreibung konnte man dies nicht entnehmen.

        ausserdem stehen die Daten dann auch nicht in $_GET.

        Sondern?[1] Bzw. was steht wo?[1] Du wirst sicher eine Analyse des Problems durchgeführt haben.

        Genau deswegen hab ich ja den ganzen Code gepostet, weil dieses komische Phänomen dann vielleicht wer anders ausprobieren könnte ders nicht glaubt. Im Prinzip brauchst du kein PHP dazu.

        Um ein Problem in Deinem PHP-Script zu erforschen, brauche ich nicht nur PHP, sondern Zugriff auf Deinen Server. Ich habe weder das eine noch das andere.

        Du brauchst nur schauen, was nach dem Abschicken des Formulars in der URL-Zeile steht.

        Was steht denn drin? Bei dem von Dir verwendeten Browser, meine ich.[1]

        Und das kann nicht so sein.

        Sondern wie?[1]

        Es existiert kein Weg, irgendwelche Variablen über HTTP zu übertragen. Sprich bitte von Parametern.
        $text = preg_replace("/Variablen/", "Parametern", $text);

        Danke :-)

        Beim nächsten Mal kürze den Code bitte auf den relevanten Teil, danke.
        Siehe oben. Es ist offensichtlich sinnvoll den ganzen Code zu posten.

        "Offensichtlich" ist sinnvoll, einen _möglichst kurzen_ Code zu posten, mit dem sich das Problem erkennen lässt.

        Ich wollte lediglich wissen wieso
        <form action="/x.php?var1=25" method="GET">
        <input type="text" name="var2" value="26">
        </form>
        nicht funktioniert.

        Siehst Du, _das_ ist der relevante Code. Den ganzen Rest braucht man nicht - und ganz besonders nicht den geposteten PHP-Code, zumal Du selbst sagst, dass es sich um ein HTML-Problem handelt. Wenn Du eine derartige Code-Masse postest, darfst Du nicht davon ausgehen, dass sich dessen Analyse jemand antut.

        Anstatt /x.php?var1=25&var2=26 steht /x.php?var2=26 nach einem Klick auf Submit in der URL-Zeile

        Und das ist die Problembeschreibung. Das ganze Drumherum mit PHP, Variablen usw. war der Sache alles andere als dienlich - es war hinderlich. Hättest Du gleich dies und _nur_ dies gepostet, hätte ich Dich auch sofort auf <input type="hidden"> hingewiesen. Und darauf, dass es nicht wirklich sinnvoll ist, GET und POST zu vermischen.

        Cheatah

        [1] Diese Fragen stellen sich zwangsläufig, wenn die Problembeschreibung nicht passt.

        --
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes