Timo Haberkern: Hashes mit doppelter Belegung

Ich hab folgendes Problem:

In meiner HTML form habe ich ein Select Feld, in dem mehrere Zeilen gleichzeitig ausgewählt werden können. Mein Skript zum Auswerten des HTTP Request liefert mir einen Hash zurück in dem alle Parameter drin stehen.

Das Problem ist jetzt nur, dass fuer den Eintrag des Select-Feldes mehrere Werte existieren und auch im Hash drin stehen (sieht man wenn man das mit print ausgibt)

Wenn ich auf den Eintrag zugreife bekomme ich aber nur einen Wert zurückgeliefert. Wie komme ich jetzt an die anderen heran?

  1. Hallo Timo,

    In meiner HTML form habe ich ein Select Feld, in dem mehrere Zeilen gleichzeitig ausgewählt werden können. Mein Skript zum Auswerten des HTTP Request liefert mir einen Hash zurück in dem alle Parameter drin stehen.

    Das Problem ist jetzt nur, dass fuer den Eintrag des Select-Feldes mehrere Werte existieren und auch im Hash drin stehen (sieht man wenn man das mit print ausgibt)

    Wenn ich auf den Eintrag zugreife bekomme ich aber nur einen Wert zurückgeliefert. Wie komme ich jetzt an die anderen heran?

    Das liegt wohl daran, dass einem Hashelement jeweils nur ein Wert zugeordnet werden kann. Vermutlich ignoriert der (oder das?) Hash alle Werte ausser dem ersten, auch dann, wenn mehr drinstehen. Ich glaube Du solltest in diesem Fall mit einem normalen Array arbeiten, das Du nur fuer den select-Teil des Formulars benutzt. Oder mit einem zweidimensionalen Array, bei dem waeren dann allerdings alle Felder der zweiten Dimension leer mit Ausnahme der Felder fuer die select-Angaben.

    Vielen Gruesse

    Beate Mielke

  2. Ich hab folgendes Problem:

    In meiner HTML form habe ich ein Select Feld, in dem mehrere Zeilen gleichzeitig ausgewählt werden können. Mein Skript zum Auswerten des HTTP Request liefert mir einen Hash zurück in dem alle Parameter drin stehen.

    Das Problem ist jetzt nur, dass fuer den Eintrag des Select-Feldes mehrere Werte existieren und auch im Hash drin stehen (sieht man wenn man das mit print ausgibt)

    Wenn ich auf den Eintrag zugreife bekomme ich aber nur einen Wert zurückgeliefert. Wie komme ich jetzt an die anderen heran?

    Hi Timo!

    Ich hatte ein ähnliches Problem:
    Auf eine Seite waren mehrere Checkboxen mit dem selben Namen:

    <INPUT TYPE="CHECKBOX" NAME="marker_delete" VALUE="abc">;
    <INPUT TYPE="CHECKBOX" NAME="marker_delete" VALUE="xyz">;

    Im Script lese ich den Parameter so:

    use CGI qw(:standard);  
      .
      .
      .
    @marker_delete = param('marker_delete');      
      .
      .
      .

    #und greife auf die einzelnen Element so zu:
    foreach $marker (@marker_delete){
       # hier hast Du in $marker immer nur einen Wert,
       # in diesem Fall einmal abc und einmal xyz
    }

    Gruß Frank

    1. Noch ein Beispiel aus selfhtml (<../../tgcb.htm>)

      #!/usr/bin/perl
        @Daten = ("Jana",23,"Berlin","Abitur");
        print $Daten[0], " ist ", $Daten[1], " Jahre alt, wohnt in ", $Daten[2], " und hat ", $Daten[3];

      Gruß Frank

  3. Hallo Timo

    Das Problem ist jetzt nur, dass fuer den Eintrag des Select-Feldes mehrere Werte existieren und auch im Hash drin stehen (sieht man wenn man das mit print ausgibt)

    "print %hash;" gibt alle Elemente und Unterelemente aus? Kann ich mir nicht vorstellen.

    Wenn ich auf den Eintrag zugreife bekomme ich aber nur einen Wert zurückgeliefert. Wie komme ich jetzt an die anderen heran?

    Auf eine Array in einem Hash kannst du so zugreifen:

    @array = @{$hash{$name}};
    oder
    $string = $hash{$name}[$ElementNr];

    (siehe auch <../../tgcb.htm#a4>)

    Ich hoffe, das hilft.

    Gruss
    Andreas

  4. In meiner HTML form habe ich ein Select Feld, in dem mehrere Zeilen gleichzeitig ausgewählt werden können. Mein Skript zum Auswerten des HTTP Request liefert mir einen Hash zurück in dem alle Parameter drin stehen.

    Das Problem ist jetzt nur, dass fuer den Eintrag des Select-Feldes mehrere Werte existieren und auch im Hash drin stehen (sieht man wenn man das mit print ausgibt)

    Benutze CGI.pm dann hast Du solche Probleme nicht. Von param bekommst Du ein Array zurückgeliefert.

    Ich stelle fest, daß die meisten Probleme hier hausbacken sind, weil nicht Standardroutinen eingesetzt werden, sondern irgendetwas zusammengeschustertes.

    Peter