Marc: Perl & Multiselektionslisten

Hallo!

Ich habe eine Multiselektionsliste:

<select name="fausw" multiple size=2>
    <option value="001" selected> Eins
    <option value="002"             > Zwei
    <option value="003"             > Drei
</select>

Wie kann ich die Übergabewerte "...fausw=001&fausw=002&fausw=003"
(wenn halt alle drei markiert wurden!) mit $in in ein Perl-Array einlesen?

Marc

  1. Hallo Marc

    Wie kann ich die Übergabewerte "...fausw=001&fausw=002&fausw=003"
    (wenn halt alle drei markiert wurden!) mit $in in ein Perl-Array einlesen?

    Wenn sie tatsaechlich so vorliegen, kannst du sie mit der split-Funktion aufgrund der Trennzeichen auseinanderdividierten (siehe <../../tgck.htm#a2>).

    Bei einem Test habe ich allerdings in Perl nach Einlesen von Formulardaten mit Mehrfachauswahl in den ueblichen FORM-Hash nur den untersten der ausgewaehlten Listeneintraege im value gehabt. Ich waere auch dankbar, wenn jemand mal das genaue Handling zur Auswertung von <select multiple> in Perl genauer beschreiben koennte.

    viele Gruesse
      Stefan Muenz

    1. Hallo Stefan,

      Wie kann ich die Übergabewerte "...fausw=001&fausw=002&fausw=003"
      (wenn halt alle drei markiert wurden!) mit $in in ein Perl-Array einlesen?

      Wenn sie tatsaechlich so vorliegen, kannst du sie mit der split-Funktion aufgrund der

      Die liegen natürlich nicht so vor! - Tschuldigung, mein Fehler!
      Der obige "String" sollte ein Auszug aus der Locationbar des Browsers sein!

      " http://www.xyz.de/cgi-bin/script.pl?name=marc&fausw=001&fausw=002&fausw=003 "

      Trennzeichen auseinanderdividierten (siehe <../../tgck.htm#a2>).

      viele Gruesse
        Stefan Muenz

      MfG Marc

    2. hi!

      Wie kann ich die Übergabewerte "...fausw=001&fausw=002&fausw=003"
      (wenn halt alle drei markiert wurden!) mit $in in ein Perl-Array einlesen?
      Wenn sie tatsaechlich so vorliegen, kannst du sie mit der split-Funktion aufgrund der
      Trennzeichen auseinanderdividierten (siehe <../../tgck.htm#a2>).

      Bei einem Test habe ich allerdings in Perl nach Einlesen von Formulardaten mit
      Mehrfachauswahl in den ueblichen FORM-Hash nur den untersten der ausgewaehlten
      Listeneintraege im value gehabt. Ich waere auch dankbar, wenn jemand mal das genaue
      Handling zur Auswertung von <select multiple> in Perl genauer beschreiben koennte.

      Man könnte das folgenermaßen lösen:
      === cut ===
      if ($ENV{'REQUEST_METHOD'} eq "GET")
      {
        $EnvDaten = $ENV{'QUERY_STRING'};
      } else {
        read STDIN, $EnvDaten, $ENV{'CONTENT_LENGTH'};
      }
      $Trennzeichen = ":";
      for (split /&/, $EnvDaten)
      {
        my ($key, $value) = split /=/;
        $value =~ tr/+/ /;
        $value =~ s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
        $value =~ s/</</g;
        $value =~ s/>/>/g;
        ($p{$key}) && ($p{$key} .= "$Trennzeichen$value") ($p{$key} = $value);
      }
      === cut ===

      Das Trennzeichen sollte man natürlich so wählen, dass es sonst in keinem der Werte vorkommt. In ein Array splitten lässt sich der Skalar, der alle Werte der Liste enthält, mit dem Befehl split:
        @werte = split /$Trennzeichen/, $p{'name_der_auswahlliste'};

      bye, Frank!