Denn: Fomular auswertung mit perl (select multiple)

Hallo,

habe in ein Formular ein "select"-Feld mit multiple- Auswahl eingebaut.
Leider wird die Mehrfachauswahl nicht mit übertragen, sonderm nur der erste selektierte Begriff.
Hat jemand eine Lösung?

dieser lösung funktioniert leider nicht bei mir. Weiss nicht woran es liegt. Wie kriegt mann raus ob überhaupt das Modul CGI.pm installiert ist oder nicht vielleicht liegt daran, aber dann würde der server einen Fehlermeldung raus bringen.

Gibt's eine Lösung ohne verwendung von use CGI ? (z.B mit den anderen alten Parse methoden)

use CGI;
my $cgi = CGI->new;

my @multiple_auswahl = $cgi->param( 'multiselect_name' );

<select name="multiselect_name" multiple="multiple">
   <option>...</option>
</select>

Danke, im Voraus

Gruss, Dennis

  1. Tag Denn.

    habe in ein Formular ein "select"-Feld mit multiple- Auswahl eingebaut.
    Leider wird die Mehrfachauswahl nicht mit übertragen, sonderm nur der erste selektierte Begriff.

    Woran erkennst du das?

    dieser lösung funktioniert leider nicht bei mir. Weiss nicht woran es liegt.

    Entweder der HTML-Code des Formulars ist fehlerhaft oder es wurde schlicht nichts ausgewählt. Oder am Perlcode stimmt was nicht.

    Wie kriegt mann raus ob überhaupt das Modul CGI.pm installiert ist oder nicht vielleicht liegt daran, aber dann würde der server einen Fehlermeldung raus bringen.

    Ja, einen 500er, den du aber offensichtlich nicht bekommst.

    Gibt's eine Lösung ohne verwendung von use CGI ? (z.B mit den anderen alten Parse methoden)

    Bestimmt, aber CGI.pm ist schon die erste Wahl.

    Siechfred

    1. Tag Siechfred,

      Woran erkennst du das?

      weil gar nichts ausgegeben wird. Ich lese einen Formular mit anderen Felder, checkboxes usw, die richtig gelesen und ausgegeben werden, nur die select multiple wird nicht ausgegeben?? komisch.

      dieser lösung funktioniert leider nicht bei mir. Weiss nicht woran es liegt.

      Entweder der HTML-Code des Formulars ist fehlerhaft oder es wurde schlicht nichts ausgewählt. Oder am Perlcode stimmt was nicht.

      kann nicht sein weil die anderen Felder richtig ausgegebn werden was ich oben schon gesagt habe.
      Was mich wundert, ich habe der nur "use CGI;" ganz weg gelöscht und den rest des code unverändert gelassen und trotzdem funktioniert der Script, liest die Anderen Felder ganz richtig und mit select multiple passiert ja gar nicht. Müsste er in diesem Fall einen Fehlermeldung rausbringen?

      Wie kriegt mann raus ob überhaupt das Modul CGI.pm installiert ist oder nicht vielleicht liegt daran, aber dann würde der server einen Fehlermeldung raus bringen.

      Ja, einen 500er, den du aber offensichtlich nicht bekommst.

      mit dem Befehl perl -le 'use CGI; print $CGI::VERSION' habe ich rausbekommen dass Version 2,46 bei mir installiert ist.

      Gibt's eine Lösung ohne verwendung von use CGI ? (z.B mit den anderen alten Parse methoden)

      Bestimmt, aber CGI.pm ist schon die erste Wahl.

      Wie köönte eine andere Lösung Aussehen. Ich bekomme beim konventionellen parsing Methoden nur der esten selected value. Wie bekomme ich alle selected values?

      Danke für eine Antwort.

      Siechfred

      1. weil gar nichts ausgegeben wird. Ich lese einen Formular mit anderen Felder, checkboxes usw, die richtig gelesen und ausgegeben werden, nur die select multiple wird nicht ausgegeben?? komisch.

        Lass dir den Array @multiselect_name doch mal ausgeben (z.B. mit Data::Dumper).

        Was mich wundert, ich habe der nur "use CGI;" ganz weg gelöscht und den rest des code unverändert gelassen und trotzdem funktioniert der Script, liest die Anderen Felder ganz richtig und mit select multiple passiert ja gar nicht. Müsste er in diesem Fall einen Fehlermeldung rausbringen?

        Du hast die Zeile "use CGI" rausgeschmissen? Dann dürfte dein Script eigentlich nichts mehr tun.

        Wie köönte eine andere Lösung Aussehen. Ich bekomme beim konventionellen parsing Methoden nur der esten selected value. Wie bekomme ich alle selected values?

        Du kannst die Daten von Hand parsen:

        my $data;  
        my %form_data;  
        my $method = $ENV{'REQUEST_METHOD'};  
        if ($method eq "GET") {  
          $data = $ENV{'QUERY_STRING'};  
        }  
        elsif ($method eq "POST") {  
          read (STDIN, $data, $ENV{'CONTENT_LENGTH'});  
        }  
        else {  
          die "Invalid request method!";  
        }  
        my @paare = split(/&/, $data);  
        foreach (@paare) {  
          $_ =~ tr/+/ /;  
          $_ =~ s/%([\dA-Fa-f][\dA-Fa-f])/pack ("C", hex ($1))/eg;  
          ($schl, $wert) = split (/=/, $_);  
          if(defined $form_data{$schl}) {  
            $form_data{$schl} .= ";" . $wert";  
          }  
          else {  
            $form_data{$schl} = $wert;  
          }  
        }
        

        Der Zugriff erfolgt über $form_data{"Name_des_Formularfeldes"}. Mehrere Werte erkennst du daran, dass sich mehrere Werte, getrennt durch ein Semikolon, im jeweiligen String befinden. Ob das Semikolon dabei der geeignete Trenner ist, musst du selber entscheiden.

        Siechfred

  2. use CGI;
    my $cgi = CGI->new;

    my @multiple_auswahl = $cgi->param( 'multiselect_name' );

    <select name="multiselect_name" multiple="multiple">
       <option>...</option>
    </select>

    Genauso funktioniert es mit dem Modul. Du hast irgendeinen anderen Fehler in deinem Code.

    Struppi.