Seb.: Formular verarbeiten

Hallo,

ich lese mit dem folgenden CGI-Skript (Ausschnitt) ein Formular aus:

my @Feldnamen = $cgi->param();

print $cgi->header(),
      $cgi->start_html('CGI-Feedback'),
      $cgi->h1('CGI-Feedback vom Programm ',$cgi->i('comments.pl'));
      foreach my $Feld (@Feldnamen) {
        print $cgi->b('Feldname: '),
              $Feld,
              $cgi->b(', Inhalt: '),
              $cgi->param($Feld), "<br>";
      }

(Vgl. http://de.selfhtml.org/perl/module/cgi.htm#formularverarbeitung.)

Nun sollen aber nicht alle Felder des Formulars ausgelesen werden, sondern - beispielsweise - erst alle Felder ab dem dritten Feld.

Wie muß ich das Skript ändern, damit dies funktioniert?

Dank & Gruß
Seb.

  1. Tag Seb.

    my @Feldnamen = $cgi->param();
    Nun sollen aber nicht alle Felder des Formulars ausgelesen werden, sondern - beispielsweise - erst alle Felder ab dem dritten Feld.

    Obiger Code liefert dir alle Formularfelder in einem Array. Willst du also nur alles ab dem dritten Element haben, dann schreibe:

    for(my $i = 2; $i <= $feldnamen; $i++) {  
      print $cgi->b('Feldname: '),  
                  $Feld,  
                  $cgi->b(', Inhalt: '),  
                  $cgi->param($Feld), "<br>";  
    }
    

    (ungetestet)

    Siechfred

    1. Korrektur:

      my @Feldnamen = $cgi->param();  
      for(my $i = 2; $i <= $Feldnamen; $i++) {  
        print $cgi->b('Feldname: '), $Feldnamen[$i],  
        $cgi->b(', Inhalt: '), $cgi->param($Feldnamen[$i]), "<br>";  
      }
      

      Siechfred

      1. my @Feldnamen = $cgi->param();

        Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.

        for(my $i = 2; $i <= $Feldnamen; $i++) {

        keine schöne Perl Schleife und du benutzt nicht strict oder?
        $Feldnamen existiert nicht.

        Schöner:
        for my $i (2...@Feldnamen){

        Struppi.

        1. Tag Struppi.

          Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.

          Ja, daran hatte ich gar nicht gedacht. Besser wäre es dann natürlich, die unerwünschten Formularfelder anhand ihres Namens auszuschließen.

          for(my $i = 2; $i <= $Feldnamen; $i++) {
          keine schöne Perl Schleife und du benutzt nicht strict oder?
          $Feldnamen existiert nicht.

          Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.

          Siechfred

          1. Wobei ich nicht sicher wäre, ob die Felder wirklich immer in einer definierten Reihenfolge ankommen (ich weiß es aber nicht), deshalb benutzt man ja Namen für die Parameter.

            Ja, daran hatte ich gar nicht gedacht. Besser wäre es dann natürlich, die unerwünschten Formularfelder anhand ihres Namens auszuschließen.

            Da wären wir wieder mal bei der typischen, was will der OP eigentlich, Frage.

            for(my $i = 2; $i <= $Feldnamen; $i++) {
            keine schöne Perl Schleife und du benutzt nicht strict oder?
            $Feldnamen existiert nicht.

            Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.

            Dadurch machst du es dir schwerer als nötig, da das der Index des letzten Elements ist musst du den Vergleich kleiner, gleich als bemühen. Mit
            for(my $i = 2; $i < @Feldnamen; $i++) {
            reicht das kleiner als, aber perliger ist auf jeden Fall 2...@Feldname

            Struppi.

            1. Tag Struppi.

              Ups, da fehlte eine Raute, es sollte $#Feldnamen heißen.
              Dadurch machst du es dir schwerer als nötig, da das der Index des letzten Elements ist musst du den Vergleich kleiner, gleich als bemühen.

              Das halte ich hier für völlig unproblematisch.

              aber perliger ist auf jeden Fall 2...@Feldname

              Nö, "perliger" wäre for $i (0 .. $#Feldnamen).

              Siechfred