FrankS: formular - value und name modern parsen

Beitrag lesen

Moin.

Ich benutze gern eine der beiden folgen Varianten. Mein 1. parse_form erzeugt für jeden übergebenen Parameter eine Variable mit dem entsprechenden Namen und dem Wert. Das funktioniert für Skalare ebenso wie für Arrays, allerdings nicht mit "use strict", da Du im Script Variablen benutzt, die nicht mit 'my' erzeugt wurden.

Hast Du im Formular folgende Zeile
<input type="text" name="einBeispiel" value="blabla">,
dann steht nach Aufruf von parse_form in der Variablen $einBeispiel der String "blabla" und Du kannst ihn "einfach benutzen":

use CGI;
&parse_form();
print $einBeispiel;

sub parse_form {
   # alle Namen der übergebenen Parameter lesen
   my @names = $form->param;
   # für alle übergebenen Parameter...
   foreach (@names){
      # ... die Werte erstmal in ein Array lesen
      my @value = $form->param($_);
      # testen, ob Skalar oder Array
      if ((scalar @value ) > 1 ){
        # Array erzeugen mit dem Namen des zugehörigen Parameters
        # und Value speichern
        @$_ = @value;
      }else{
        # Skalar erzeugen mit dem Namen des zugehörigen Parameters
        # und Value speichern
        $$_ = $value[0];
      }
   }
}

Mit keinen Änderungen ist dieses "Verfahren" auch mit "use strict" nutzbar. Du mußt Dir einen Hash mit 'my' anlegen, die Namen der Formularfelder werden als Keys verwendet. Der Zugriff erfolgt dann wie gehabt:

use CGI;
my %input = parse_form();
print $input{'einBeispiel'};

sub parse_form {
   my %input;
   my @names = $query->param;
   foreach (@names){
      $input{$_} = $query->param($_);
   }
   return %input;
}

Gruß Frank