Lars: CGI-Übergabeparameter

Wie kann ich Parameter an ein CGI-Programm übergeben?

Ich versuchte das Programm folgendermaßen zu starten: programmname.cgi?PARA=http://www.adresse.de

Bei dem Versuch den Parameter auf eine Variable im Programm abzuspeichern ($parameter=$ARGV[0]) wurde der Variablen aber nie ein Wert zugewiesen.

Was mache ich falsch?

  1. Wie kann ich Parameter an ein CGI-Programm übergeben?

    Ich versuchte das Programm folgendermaßen zu starten: programmname.cgi?PARA=http://www.adresse.de

    Bei dem Versuch den Parameter auf eine Variable im Programm abzuspeichern ($parameter=$ARGV[0]) wurde der Variablen aber nie ein Wert zugewiesen.

    Was mache ich falsch?

    Hi Lars,
    Parameterübergabe funktioniert folgendermaßen:
    <A HREF="http://localhost/programmname.pl?Parameter"></A>

    Den festen Paramter kannst Du im Script über die Query_String Umgebungsvariable auslesen.
    Soll der Parameter fest sein, gehst Du über die POST oder auch GET Methode mit Formularen.
    Die vordefinierte Variable $ARGV[Zahl] enthält nur einen Wert, wenn Du das Programm direkt
    mit Parameterzuweisung startest, wie z.B. über die DOS-Eingabeaufforderung.

    Viele Gruesse
    Cosmo

    1. Hi,

      um Parameter sowohl aus POST- als auch aus GET-Operationen auslesen zu können, hilft folgende Routine:

      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;
      }

      Aufruf (am besten am Anfang des Scripts) mit &GetQuery(*data); Danach greifst Du auf die übergebenen Parameter zu mit $data{'ParameterName'}, also wenn Du "script.pl?PARA=wasauchimmer" übergeben hast, steht danach in $data{'PARA'} der String 'wasauchimmer'. Statt "data" kannst Du natürlich jeden beliebigen Namen benutzen.

      Cheatah

      1. hi!

        um Parameter sowohl aus POST- als auch aus GET-Operationen auslesen zu können, hilft folgende Routine: [...]

        Ich will dich ja nicht kritisieren, aber man muss etwas ja nicht unbedingt unnötig kompliziert lösen! Außerdem war ein Fehler drin.

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

        bye, Frank!

        1. Hi,

          Ich will dich ja nicht kritisieren, aber man muss etwas ja nicht unbedingt unnötig kompliziert lösen! Außerdem war ein Fehler drin.

          ich gebe zu, Deine Routine ist etwas kürzer. Aber wo ist der Fehler, den Du erwähntest? Ich finde keinen!

          Cheatah