2012-04-26 82 views
3

對不起,如果我的問題太簡單了,我只是開始與CGI ... 所以我有一堆複選框具有相同的名稱。示例HTML:複選框與Perl CGI

<form action="/cgi-bin/checkbox.cgi" method="POST"> 
<input name="Loc_opt" value="Loc_1" type="checkbox">Option 1<br> 
<input name="Loc_opt" value="Loc_2" type="checkbox">Option 2<br> 
<input name="Loc_opt" value="Loc_3" type="checkbox">Option 3<br> 
<input type="submit" value="Submit"> 
</form> 

我需要找出哪些使用Perl CGI檢查。我有checkbox.cgi中的以下內容:

print "Content-type:text/html\r\n\r\n"; 
local ($buffer, @pairs, $pair, $name, $value, %FORM); 
    # Read in text 
    $ENV{'REQUEST_METHOD'} =~ tr/a-z/A-Z/; 
    if ($ENV{'REQUEST_METHOD'} eq "POST") 
    { 
    read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); 
    }else { 
    $buffer = $ENV{'QUERY_STRING'}; 
    } 
    # Split information into name/value pairs 
    @pairs = split(/&/, $buffer); 
    foreach $pair (@pairs) 
    { 
    ($name, $value) = split(/=/, $pair); 
    $value =~ tr/+/ /; 
    $value =~ s/%(..)/pack("C", hex($1))/eg; 
    $FORM{$name} = $value; 
    } 

我應該怎麼做才能打印所選複選框的值?

+2

你從哪裏得到這個代碼嗎?無論您發現哪本書或網站,請立即停止閱讀。它大約過了15年,至少包含兩個潛在的問題。 – 2012-04-27 08:47:26

+0

@Dave我發現這個代碼[在這裏](http://www.tutorialspoint.com/perl/perl_cgi.htm)。你能不能讓我知道什麼是問題,什麼是正確的代碼?如果您將答覆作爲單獨答案,我將不勝感激。 – user828647 2012-04-28 15:24:42

+1

是的。任何不使用CGI.pm的CGI教程都應該被忽略。這個模塊已經被Perl包含了15年,並且使得編寫CGO程序變得容易得多。我注意到的兩個問題是1 /它假定參數被'&' (';'分隔也是允許的)並且2 /如果單個參數名稱具有多個關聯值,則中斷。可能會有更多的問題。只需使用CGI.pm中的'param'函數即可。 – 2012-04-29 19:25:46

回答

8

您需要設置的參數()結果到一個數組,如果你有相同的name.From CGI101多個表單元素:

my @colors = param('color'); 
foreach my $color (@colors) { 
    print "You picked $color.<br>\n"; 
} 
+0

感謝您的幫助!這正是我需要的! – user828647 2012-04-26 18:30:07

2

請閱讀CGI module的Perl文檔。有簡單的內置方式來處理所有這些。

+0

感謝您的鏈接...我會研究它。 – user828647 2012-04-26 18:30:27

6
use strict; use warnings; 
use CGI; 

my $cgi = CGI->new; 
my @opt = $cgi->param('Loc_opt'); 
+0

如果早幾分鐘就到了,我會接受你的答案...... – user828647 2012-04-26 18:32:37