Commander Keen: Cgi - UserData

Für ein aktuelles Perl-Projekt muss ich wissen wie man einem Perl-Script
über ein Form-Tag Daten übergeben kann!
Hat jeand eine Idee??
Thanx in advance, hotcore@gmx.net!

  1. Hi,

    Für ein aktuelles Perl-Projekt muss ich wissen wie man einem Perl-Script
    über ein Form-Tag Daten übergeben kann!

    über das Form-Tag selber gibst Du normalerweise keine Daten weiter, sondern über anschließende Input-Felder. Dazu kannst Du entweder dem Benutzer die Eingaben überlassen (<input type=text> etc.) oder selber Daten vordefinieren mit <input type=hidden name=Name value=Wert>. Im Perl-Script mußt Du diese Input-Felder dann noch auslesen. In meinen Scripts mache ich das immer so:

    &GetQuery(*data);

    sub GetQuery {
       local (*qs) = @_ if @_;
       if ($ENV{'REQUEST_METHOD'} eq "GET") { $qs = $ENV{'QUERY_STRING'}; }
       elsif ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$qs,$ENV{'CONTENT_LENGTH'}); }
       @qs = split(/&/,$qs);
       foreach $i (0 .. $#qs) {
          $qs[$i] =~ s/+/ /g;
          $qs[$i] =~ s/%(..)/pack("c",hex($1))/ge;
          ($name,$value) = split(/=/,$qs[$i],2);
          if ($qs{$name} ne "") { $qs{$name} = "$qs{$name}:$value"; }
          else { $qs{$name} = $value; }
       }
       return 1;
    }

    Anschließend kannst Du mit dem Hash %data (Name in der ersten Zeile beliebig wählbar) die Werte verarbeiten:

    print "$data{'Name'}"; gibt dazu "Wert" aus, wenn die Eingabe wie im obigen Beispiel erfolgte. Das Script kann übrigens später nicht mehr zwischen den Typen der Eingabefelder unterscheiden, ein <input type=text> wird genauso behandelt wie <input type=hidden>.

    Jemand hat hier mal eine Routine gepostet, die (nach eigenen Angaben) mehr beachten soll, die habe ich aber leider nicht mehr. Wenn sich derjenige bitte noch einmal melden könnte... :-) Ich hatte aber mit obiger Routine noch keinerlei Probleme, bisher hat sie immer funktioniert.

    Cheatah

    1. hi!

      Ich finde deine Methode immer noch viel zu umständlich.

      if ($ENV{'REQUEST_METHOD'} eq "GET") { $EnvDaten = $ENV{'QUERY_STRING'}; }
        else { read STDIN, $EnvDaten, $ENV{'CONTENT_LENGTH'}; }
      for (split /&/, $EnvDaten)
      {
        tr/+/ /;
        s/%([a-fA-F0-9]{2})/pack("C", hex($1))/eg;
        ($key, $value) = split /=/;
        $data{$key} = $value;
      }

      bye, Frank!

  2. hi!

    Für ein aktuelles Perl-Projekt muss ich wissen wie man einem Perl-Script
    über ein Form-Tag Daten übergeben kann!
    Hat jeand eine Idee??

    Hast du schonmal dran gedacht, dich selbst zu informieren, bevor du eine Frage postest? <../../tgcm.htm>

    bye, Frank!