tobias_: Ein Dropdown mit zwei Parametern

Hallo Forumgemeinde,

Ich habe ein Formular mit einem Drop-Down-Feld. Es müssen zur Weiterverarbeitung zwei Parameter übergeben werden, es ja allerdings nur einer über den Name und Value übergeben werden. Für meine Zwecke müssen aber zwei übergeben werden.

  
<form action="start0815.php" method="get">  
  <p>  
    <select name="index" size="1">  
      <option value="a&event=0>">Reise</option>  
      <option value="m&event=12">Urlaub</option>  
      <option value="b&event=9">Auto</option>  
      <option value="k&event=4">Fahrrad</option>  
      <option value="i&event=9">Essen</option>  
    </select>  
    <input type="submit" value=" OK ">  
  </p>  
</form>  
  

Wenn ich so mache, dann wird das "&" zu "&26" und das "=" zu "%3D". Gibt es eine Möglichkeit die Sonderzeichen zu entwerten bzw. eine Möglichkeit wirklich zwei Parameter zu senden?

Tobias

  1. <form action="start0815.php" method="get">
      <p>
        <select name="index" size="1">

    ...

    <option value="i&event=9">Essen</option>

    Du musst in html das & maskieren.

    </select>
        <input type="submit" value=" OK ">
      </p>
    </form>

    
    >   
    > Wenn ich so mache, dann wird das "&" zu "&26" und das "=" zu "%3D". Gibt es eine Möglichkeit die Sonderzeichen zu entwerten bzw. eine Möglichkeit wirklich zwei Parameter zu senden?  
      
    Ist der eine Parameter vom anderen abhängig, dann verwalte den Zusammenhang auf dem Server.  
      
    Wenn du wirklich eine Auswahl verschieden-parametrischer URIs via POST anbieten willst, solltest du jede URI durch ein eigenes Formular auslösen, und die verschiedenen Formulare in ein CSS-Dropdown stecken.  
      
    mfg Beat
    
    -- 
    Surftipp:  
    [Die NATO](http://edvan.fadeout.ch/ref/?customerId=30&channelId=43&broadcastId=252&wide=)  
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    Der Valigator leibt diese Fische
    
    1. Ist der eine Parameter vom anderen abhängig, dann verwalte den Zusammenhang auf dem Server.

      Wenn du wirklich eine Auswahl verschieden-parametrischer URIs via POST anbieten willst, solltest du jede URI durch ein eigenes Formular auslösen, und die verschiedenen Formulare in ein CSS-Dropdown stecken.

      mfg Beat

      So, und jetzt bitte noch mal langsam zum mitschreiben. Verstehe nur Bahnhof!

      Tobias

      1. hallo tobias_,

        Ist der eine Parameter vom anderen abhängig, dann verwalte den Zusammenhang auf dem Server.

        wenn auf Parameter a mit Inhalt "Bock" immer Parameter b mit "wurst" folgt, brauchst du nicht beide über ein Formular übermitteln. Es reicht, den ersten zu senden und dann serverseitig (z.B. mit PHP) über if() oder switch() den zweiten zu ermitteln.

        switch($param1)  
           {  
           case 'Bock': $param2 = 'wurst';break;  
           case 'foo': $param2 = 'bar';break;  
          // etc.  
        }
        

        Wenn du wirklich eine Auswahl verschieden-parametrischer URIs via POST anbieten willst, solltest du jede URI durch ein eigenes Formular auslösen, und die verschiedenen Formulare in ein CSS-Dropdown stecken.

        mfg Beat

        schreib für jedes vorkommende Parameterpaar ein Formular mit zwei hidden-inputs für die Parameter und ein submit zum Abschicken.
        Diese ganzen Formulare packst du in ein Dropdown-Menü. Mit CSS lässt sich das wunderbar lösen. So kannst du ein Select-Feld nachahmen.

        grüße,
        henman

        --
        "Sir! We are surrounded!" - "Excellent! We can attack in any direction!"
    2. [code lang=html]
      <form action="start0815.php" method="get">
        <p>
          <select name="index" size="1">
      ...
            <option value="i&event=9">Essen</option>

      Du musst in html das & maskieren.

      Ja, Ne is klar, in dem Fall musst Du es genau umgekehrt machen: die Delimiter
      & zu %26 und = zu %3D notieren, die Werte jedoch nicht escapen. Beim Parsen auf dem Server wird das wieder umgedreht, und Du kannst an den Delimitern splitten.

      value="name%3DHansel%26vname%3DUlrich"
               name=Hansel&vname=Ulrich
      Gute Nacht,
      Hotti

      1. Hi,

        Ja, Ne is klar, in dem Fall musst Du es genau umgekehrt machen: die Delimiter
        & zu %26 und = zu %3D notieren, die Werte jedoch nicht escapen.

        ähm, also die Werte escapen, aber nicht escapen ...?

        Beim Parsen auf dem Server wird das wieder umgedreht, und Du kannst an den Delimitern splitten.

        Nein, vor der Übertragung wird das % zu %25 kodiert. Beim Parsen kommt dann %26 raus, wo in der Übertragung %2526 stand.

        value="name%3DHansel%26vname%3DUlrich"

        Dieser Wert wird bei korrekter serverseitiger Handhabe (und nicht schwerwiegend defekten Clients) wieder in exakt dieser Form vorliegen. Das Vor- und das Nachher sind absolut identisch - deswegen wird kodiert und dekodiert.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes
  2. hi,

    Wenn ich so mache, dann wird das "&" zu "&26" und das "=" zu "%3D".

    Mit enctype="application/x-www-form-urlencoded" wird ein Ampersand zum %26 und ein Gleichheitszeichen zum %3D aber nur für die Übertragung. Wird das serverseitig geparst, entsteht aus der Komponente wieder das Originalzeichen (unescape).

    Gibt es eine Möglichkeit die Sonderzeichen zu entwerten bzw. eine Möglichkeit wirklich zwei Parameter zu senden?

    Ein Value ergibt einen Parameter. Du könntest eine Struktur reinbringen, aber nicht mit textlichen Delimitern sondern mit Längenangaben, Beispiel für vier Einzelwerte:

    value="004otto006Hannes010Petersilie007Ännchen"

    Hier beinhaltet eine Längenangabe, die stets deistellig ist, die Anzahl der zu lesenden Zeichen. Serverseitig kannst Du dann mit substr() die einzelnen Werte zurückgewinnen (Iteration über den gesamten String).

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Mit enctype="application/x-www-form-urlencoded" wird ein Ampersand zum %26 und ein Gleichheitszeichen zum %3D aber nur für die Übertragung. Wird das serverseitig geparst, entsteht aus der Komponente wieder das Originalzeichen (unescape).

      Ich möchte ja, dass er genau das nicht macht. Es soll ja in der URL start.php?index=a&event=0 stehen, damit der Server die GET Variblen auch als solche erkennt und nicht denkt, dass index="a&event=0" ist, was jetzt nämlich passiert. Ist das irgendwie möglich?

      1. Hi,

        Mit enctype="application/x-www-form-urlencoded" wird ein Ampersand zum %26 und ein Gleichheitszeichen zum %3D aber nur für die Übertragung.
        Ich möchte ja, dass er genau das nicht macht.

        das wäre ein schwerwiegender Konzeptfehler innerhalb von HTTP, der genau deswegen in den Browsern auch niemals passieren wird. Daher verbleibt als Konzeptfehler, dass Du mit einer Auswahl mehr als einen Parameter verknüpfst, aber diesen Mangel hast Du durch die Korrektur des serverseitigen Mechanismus' in der Hand.

        Cheatah

        --
        X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
        X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
        X-Will-Answer-Email: No
        X-Please-Search-Archive-First: Absolutely Yes