töbi: $_GET-Variablen weiter senden in <form method="get">

Hallo allerseits

Wenn ich ein Formular abschicke, das die Methode "GET" verwendet, wird der ganze "Query-String" in der URL abgeschnitten.
Ich will aber unbedingt ein Formular mit der Methode GET abschicken so dass die vorhandenen GET-Variablen erhalten bleiben.

Eine möglichkeit wäre ja:

foreach($_GET AS $get_key => $get)
{
   echo '<input type="hidden" name="'.$get_key.'" value="'.$get.'">';
}

Im Formular,
aber sobald es Arrays sind geht das auch nicht mehr. Was dann raus kommt sieht natürlich so aus:

<input type="hidden" name="arrayVariable" value="Array">

Ich will aber:

<input type="hidden" name="arrayVariable[a]" value="wert">

Kennt jemand das Problem?

Ich weiss wirklich nicht weiter.

mfg
Töbi

  1. Hallo töbi,

    Wenn ich ein Formular abschicke, das die Methode "GET" verwendet, wird der ganze "Query-String" in der URL abgeschnitten.

    nö. Außer wenn er zu lang ist. Aber das passiert nur, wenn du z.B. <textarea>-Eingaben und sowas per GET verschickst. Sollte man nämlich lieber dann per POST machen.

    Ich will aber unbedingt ein Formular mit der Methode GET abschicken so dass die vorhandenen GET-Variablen erhalten bleiben.

    wieso?

    foreach($_GET AS $get_key => $get)
    {
       echo '<input type="hidden" name="'.$get_key.'" value="'.$get.'">';
    }

    Moment, jetzt redest du aber über etwas ganz anderes! Jetzt geht es also mal wieder um die wie-kann-ich-ein-formular-auf-mehrere-Dateienn-verteilen-frage ;-) (siehe archiv)...

    Im Formular,
    aber sobald es Arrays sind geht das auch nicht mehr. Was dann raus kommt sieht natürlich so aus:
    <input type="hidden" name="arrayVariable" value="Array">

    gnau.

    <input type="hidden" name="arrayVariable[a]" value="wert">
    Kennt jemand das Problem?

    Nö, aber lass uns mal überlegen...:

    Wir bekommen ein "Array" geschickt:

    ?array[]=bla&array[]=ble&array[]=blo&array[]=bli

    nun ist $_GET["array"] ein Array. Was machen wir also folglich?

    foreach($_GET AS $get_key => $get)
    {
        if(is_array($get))
        {
            foreach($get as $key => $value)
            {
                echo '<input type="hidden" name="'.$get_key.'['.$key.']" value="'.$value.'">';
            }
        }
        else
            echo '<input type="hidden" name="'.$get_key.'" value="'.$get.'">';
    }

    So müsste es gehen.

    Was wird hier gemacht? Wir schauen uns in unserer Schleife an, ob der aktuelle Wert ein Array ist. Ist er das, gehen wir es durch und drucken für jedes Ding so ein <input> aus. Ist er es nicht, dann druchen wir es einfach so aus.

    WauWau

    --
    ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
    E-Mail WauWau: [mailto:der-wauwau@gmx.de]
    1. Hallo töbi,

      Wenn ich ein Formular abschicke, das die Methode "GET" verwendet, wird der ganze "Query-String" in der URL abgeschnitten.

      nö. Außer wenn er zu lang ist. Aber das passiert nur, wenn du z.B. <textarea>-Eingaben und sowas per GET verschickst. Sollte man nämlich lieber dann per POST machen.

      Schon mal beim Mozilla-Browser probiert? Bei meinem ist es genau so! :-(

      Ich will aber unbedingt ein Formular mit der Methode GET abschicken so dass die vorhandenen GET-Variablen erhalten bleiben.

      wieso?

      Ich will den query-String weiter verwenden um aus der Aktuellen ansicht eventuell einen Menue-Punkt zu generieren. Es macht auf jeden fall Sinn.

      foreach($_GET AS $get_key => $get)
      {
         echo '<input type="hidden" name="'.$get_key.'" value="'.$get.'">';
      }

      Im Formular,
      aber sobald es Arrays sind geht das auch nicht mehr. Was dann raus kommt sieht natürlich so aus:
      <input type="hidden" name="arrayVariable" value="Array">

      gnau.

      <input type="hidden" name="arrayVariable[a]" value="wert">
      Kennt jemand das Problem?

      Nö, aber lass uns mal überlegen...:

      Wir bekommen ein "Array" geschickt:

      ?array[]=bla&array[]=ble&array[]=blo&array[]=bli

      nun ist $_GET["array"] ein Array. Was machen wir also folglich?

      foreach($_GET AS $get_key => $get)
      {
          if(is_array($get))
          {
              foreach($get as $key => $value)
              {
                  echo '<input type="hidden" name="'.$get_key.'['.$key.']" value="'.$value.'">';
              }
          }
          else
              echo '<input type="hidden" name="'.$get_key.'" value="'.$get.'">';
      }

      So müsste es gehen.

      Genial!!

      Jetzt habe ich aber noch ein anderes Probelm das dazu kommt:
      Wenn ich das Formular absende mit den erzeugten Hidden tags (und deiner Hilfe) Sieht das so aus:

      ?beispielArray%5Ba%5D=1  anstatt wie gewollt:
      ?beispielArray[a]=1

      macht das ganze viel komplizierter, wenn ich das mit einem preg_replace oder was änlichem löschen will.

      {
      preg_replace("beispielArray[a]=1","",$query};
      )

      was meinst du dazu?

      töbi

      1. Genial!!

        Jetzt habe ich aber noch ein anderes Probelm das dazu kommt:
        Wenn ich das Formular absende mit den erzeugten Hidden tags (und deiner Hilfe) Sieht das so aus:

        ?beispielArray%5Ba%5D=1  anstatt wie gewollt:
        ?beispielArray[a]=1

        macht das ganze viel komplizierter, wenn ich das mit einem preg_replace oder was änlichem löschen will.

        {
        preg_replace("beispielArray[a]=1","",$query};
        )

        was meinst du dazu?

        Hm wieso einfach wenns auch kompliziert geht?

        lasse dasgnazen einmal durch str_replaceerstzen.
        Aber NUR die [ udn ] 's

        ganz easy ;)

        1. Hallo erstmal.

          lasse dasgnazen einmal durch str_replaceerstzen.
          Aber NUR die [ udn ] 's

          Oder du bentutzt die Funktion rawurldecode(), die wandelt automatisch alle ASCII-Codes in Zeichen um.
          MfG _Siro.

          1. Hallo

            Oder du bentutzt die Funktion rawurldecode(), die wandelt automatisch alle ASCII-Codes in Zeichen um.
            MfG _Siro.

            Das isäs!

            Danke

            1. Hallo töbi, siro, hä? und sonstwer,

              Oder du bentutzt die Funktion rawurldecode(), die wandelt automatisch alle ASCII-Codes in Zeichen um.

              Gut, an sowas habe ich jetzt nicht gedacht ;-)

              WauWau

              --
              ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
              E-Mail WauWau: [mailto:der-wauwau@gmx.de]
    2. Hallo du da draußen,

      So müsste es gehen.

      Müsste zwar in seinem Fall so funktionieren, aber der Vollständigkeit halber: Was ist, wenn $_GET['bla']['bla2'] auch ein Array ist? Wenn nämlich in $_GET mehrdimensionale Arrays vorkommen, funktioniert deine Lösung nicht mehr.

      function print_inputs($array, $prefix="")
      {
        if(!is_array($array))
          return false;

      foreach($array as $key=>$val)
        {
          if($prefix == "")
            $name = $key;
          else
            $name = $prefix."[".$key."]";
          if(is_array($val))
            print_inputs($val, $name);
          else
            echo "<input type="hidden" name="".htmlentities($key)."" value="".htmlentities($name)."" />\n";
        }
      }
      print_inputs($_GET);

      Diese Funktion sollte auch mit mehrdimensionalen Arrays funktionieren.

      Man könnte es natürlich auch einfacher machen, indem man einfach den QueryString selbst zerlegt:

      $get = explode("&", $_SERVER['QUERY_STRING']);
      foreach($get as $val)
      {
        list($key,$val) = explode("=", $val, 2);
        echo "<input type="hidden" name="".htmlentities($key)."" value="".htmlentities($val)."" />\n";
      }

      Das führt wohl zum gleichen Ergebnis, ist aber irgendwie einfacher.

      Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
      Candid Dauth (Dogfish)

      --
      Selten Dumme sind nicht selten, aber dumm.
      http://dogfish.net.tc/
      1. Hallo ihr da draußen,

        Oje, ich habe wohl eine Kleinigkeit vergessen:

        $get = explode("&", $_SERVER['QUERY_STRING']);
        foreach($get as $val)
        {
          list($key,$val) = explode("=", $val, 2);

        echo "<input type="hidden" name="".htmlentities($key)."" value="".htmlentities(urldecode($val))."" />\n";

        }

        Das urldecode ist hier wohl nötig, da im QueryString die Zeichen ja noch maskiert sind.

        Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
        Candid Dauth (Dogfish)

        --
        Selten Dumme sind nicht selten, aber dumm.
        http://dogfish.net.tc/
        1. Hallo Candid,

          Wunderschöne Lösung von dir ;-) - aber jetzt mal ehrlich: Wieso sollte man bei Formularen mit mehrdimensionalen Arrays handeln? Ich meine, eindimensionale sind ja aufgrund von <option> mit mehrfachauswahl schon mal notwendig, aber ein Sinn für mehrdimensionale - außer man hat kein gigantisch kompliziertes <form>, bei dem man es einfach ein bisschen zur Strukturierung einsetzt - fällt mir momentan nicht ein...

          Grüße von hier drinnen (da draußen ist es so naß :[),

          WauWau

          --
          ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
          E-Mail WauWau: [mailto:der-wauwau@gmx.de]
          1. Hallo du da draußen,

            Wieso sollte man bei Formularen mit mehrdimensionalen Arrays handeln? Ich meine, eindimensionale sind ja aufgrund von <option> mit mehrfachauswahl schon mal notwendig, aber ein Sinn für mehrdimensionale - außer man hat kein gigantisch kompliziertes <form>, bei dem man es einfach ein bisschen zur Strukturierung einsetzt - fällt mir momentan nicht ein...

            Mir fällt als Beispiel nur das Umfragenscript ein, das ich irgendwann mal geschrieben habe. Darin gab es mehrere Umfragen auf einer Seite, und in jeder Umfrage konnte man mehrere Antworten auswählen. In jenem Fall hielt ich es zum Beispiel für sinnvoll, mehrdimensionale Arrays zu benutzen.
            antwort[x][y]
            x stand für die Nummer der Umfrage und y für die Nummer der Antwort.

            Grüße von hier drinnen, aus Biberach an der Riss (http://www.stadt-biberach.de/),
            Candid Dauth (Dogfish)

            --
            Selten Dumme sind nicht selten, aber dumm.
            http://dogfish.net.tc/
            1. Hallo duuu da ;-),

              Mir fällt als Beispiel nur das Umfragenscript ein, das ich irgendwann mal geschrieben habe. Darin gab es mehrere Umfragen auf einer Seite, und in jeder Umfrage konnte man mehrere Antworten auswählen. In jenem Fall hielt ich es zum Beispiel für sinnvoll, mehrdimensionale Arrays zu benutzen.
              antwort[x][y]
              x stand für die Nummer der Umfrage und y für die Nummer der Antwort.

              ja genau, das meinte ich so in etwa mit "Gliederung".

              WauWau

              --
              ss:) zu:) ls:& fo:) de:] va:) ch:° n4:( rl:( br:^ js:| ie:% fl:{ mo:|
              E-Mail WauWau: [mailto:der-wauwau@gmx.de]