2012-06-18 34 views
5

私はスクリプトをカスタマイズしようとしており、perlを使用してフォームからPOST値を取得する必要があります。 私はperlの背景がありませんが、これはかなり簡単なことですので、難しくないはずです。perlでPOST値を取得する方法

これは私がPerlで持ちたいコードのPHPのバージョンである:

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

私はこれがすべてでPERLバージョンに関連しないかもしれません知っているが、それは私がまさに私明確に推測助けることができますお探しですか?

+0

もう少し説明できますか? – vijay

+2

@vjshahあなたが皮肉なことをしているのかどうかはわかりませんが、確かにPOSTの値を(提出されたフォームから)取得し、それを変数に代入する方法を知る必要があります。 –

答えて

6

まあ、その場合には、この単純なコードを見てください。これはあなたを助けるでしょう:

#!/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; 
} 
+0

これはかなり良い例ですが、私はそれを得ると思いますが、私が使っているスクリプトはGET/POSTの値を使っていますが、 'new CGI'を含んでいません。 –

+1

その場合、1つの方法は、jQueryを使用してpost.Andを扱うことができ、いつでもjavascriptコードをperlに含めることができます。 print qq(ヘッダ#jQuery( 'form_id')を含めます)submit(function(){var val = jQuery( "id")。val();})); – vijay

+0

thats perfect :)私はjqueryを使うことを考えなかった。ありがとう –

0

開始するには、ここをクリックしてください。The Fool's Guide to CGI.pm, the Perl module for CGI scripting

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

希望すると便利です。

+0

私はそれをスキャンし、 'param( 'sample')'を実行できることを知りました。私は見つけられなかった何かがGETリクエストとPOSTリクエストを区別する方法でしたか? '' POST'が設定されている場合にのみ値が$ download –

+0

$ ENV {'REQUEST_METHOD'} =〜tr/a-z/A-Z /に割り当てられる必要があります。 if($ ENV {'REQUEST_METHOD'} eq "POST") {#do something here;} – d5e5

+2

'CGI.pm'の' request_method() 'を使って' POST'リクエストを確認することができます。 'my $ requestMethod = $ cgi-> request_method()'です。 – Kenosis

4

スタイルのアドバイスを:あなたはほとんどの変数に0または1を割り当てる必要がありません。 boolの文脈で値そのものを評価するだけです。 body_parametersPlack::Request (PSGI)

#!/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.'; 

、あなたはPOSTのためのさまざまな方法があります:CGI.pm (CGI)


param方法は、POSTをマージし、パラメータをGETので、私たちは、別途リクエストメソッドを検査する必要があります)とGET(query_parameters)があります(parameters)。

#!/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.']]; 
}; 
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"; 
関連する問題