Frank Schönmann: Perl & Multiselektionslisten

Beitrag lesen

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!