7

スクリプトをカスタマイズしようとしていますが、perlを使用してフォームからPOST値を取得する必要があります。私はperlのバックグラウンドを持っていませんが、これはかなり単純なことなので、難しいことではないと思います。

これは私がPERLに入れたいコードのphpバージョンです:

<?php
$download = ($_POST['dl']) ? '1' : '0';
?>

これはPERLバージョンとはまったく関係がないかもしれませんが、私が何をしようとしているのかを明確にするのに役立つかもしれません。

4

4 に答える 4

7

その場合は、この単純なコードを見てください。これは次のことに役立ちます。

#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use CGI::Carp qw(fatalsToBrowser);

sub output_top($);
sub output_end($);
sub display_results($);
sub output_form($);

my $q = new CGI;

print $q->header();

# Output stylesheet, heading etc
output_top($q);

if ($q->param()) {
    # Parameters are defined, therefore the form has been submitted
    display_results($q);
} else {
    # We're here for the first time, display the form
    output_form($q);
}

# Output footer and end html
output_end($q);

exit 0;

# Outputs the start html tag, stylesheet and heading
sub output_top($) {
    my ($q) = @_;
    print $q->start_html(
        -title => 'A Questionaire',
        -bgcolor => 'white');
}

# Outputs a footer line and end html tags
sub output_end($) {
    my ($q) = @_;
    print $q->div("My Web Form");
    print $q->end_html;
}

# Displays the results of the form
sub display_results($) {
    my ($q) = @_;

    my $username = $q->param('user_name');
}

# Outputs a web form
sub output_form($) {
    my ($q) = @_;
    print $q->start_form(
        -name => 'main',
        -method => 'POST',
    );

    print $q->start_table;
    print $q->Tr(
      $q->td('Name:'),
      $q->td(
        $q->textfield(-name => "user_name", -size => 50)
      )
    );

    print $q->Tr(
      $q->td($q->submit(-value => 'Submit')),
      $q->td('&nbsp;')
    );
    print $q->end_table;
    print $q->end_form;
}
于 2012-06-18T18:32:13.507 に答える
5

スタイルのアドバイス:変数に0または1を割り当てる必要はほとんどありません。ブールコンテキストで値自体を評価するだけです。


CGI.pm (CGI)では、paramメソッドはPOSTパラメーターとGETパラメーターをマージするため、リクエストメソッドを個別に検査する必要があります。

#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use CGI qw();
my $c = CGI->new;
print $c->header('text/plain');
if ('POST' eq $c->request_method && $c->param('dl')) {
    # yes, parameter exists
} else {
    # no
}
print 'Do not taunt happy fun CGI.';

Plack :: Request(PSGI)を使用すると、混合インターフェース( )に加えて、POST(body_parameters)とGET( )に異なるメソッドがあります。query_parametersparameters

#!/usr/bin/env plackup
use strict;
use warnings FATAL => 'all';
use Plack::Request qw();
my $app = sub {
    my ($env) = @_;
    my $req = Plack::Request->new($env);
    if ($req->body_parameters->get_all('dl')) {
        # yes
    } else {
        # no
    }
    return [200, [Content_Type => 'text/plain'], ['Do not taunt happy fun Plack.']];
};
于 2012-06-18T19:13:02.097 に答える
0

開始するのに適した場所は次のとおりです。CGIスクリプティング用のPerlモジュールであるCGI.pmのフールガイド

これにより、「...(送信されたフォームから)POST値を取得し、それを変数に割り当てる方法」が表示されます。

お役に立てれば!

于 2012-06-18T18:15:36.827 に答える
0

上記の例は少し複雑です。次のコードは、POST値を変数に読み込みます。そこからキー値を抽出できます。GETの場合は、CGIモジュールを使用する方が適切です。

#!/usr/bin/perl

my $FormData = '';
read(STDIN, $FormData, $ENV{'CONTENT_LENGTH'});

## Variable $FormData holds all POST values passed

use CGI;
my $cgi = new CGI;
print $cgi->header();
print "$FormData";
于 2017-03-19T18:47:59.010 に答える