Perl CGI表格问题

时间:2014-03-23 16:25:17

标签: perl cgi

我有一个Perl CGI表单的问题,它有两个提交按钮。让我用示例代码解释。

print $q->start_form(
    -name => 'main',
    -method => 'POST',
);

print $q->popup_menu(      #drop down list
    -name    => 'popup1',
    -values  => @test,
    -default => 'value2'

print $q->submit(
    -name     => 'do one thing',
);
print $q->submit(
    -name     => 'do two things',
);

if ($q->param("do one thing")) {
    do certain functions;
}

if ($q->param("do two things")) {

    ##########output a checkbox#############
    print $q->checkbox_group(
        -name     => 'checkemail',
        -values   => @test2,
        -columns  => 2,
        -rows     => 10,
    );
    ###############submit the checkbox###########
    print $q->submit(
        -name     => 'Submit',
    );
    if ($q->param("Submit")) {
        do certain functions;
    }

代码很简单。当我们点击"做一件事"按钮它应该做某些功能。当我们点击"做两件事"它应该显示一个复选框。表单工作正常,直到这个。复选框后面有一个提交按钮,用于提交此复选框并执行某些功能。不幸的是,如果我点击提交按钮提交复选框,它就不会在提交按钮后执行任务。在我们点击复选框的提交按钮后,它甚至不会显示复选框。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

你的缩进是混乱的。这可能是问题的一部分:您错放了处理“提交”按钮的代码。它仅在"做两件事情时运行。按下了按钮,但无法同时按下这两个按钮。修复(和可运行)代码:

#!/usr/bin/perl
use strict;
use warnings;

use CGI;

my $q = 'CGI'->new;

my @test  = qw(a b);
my @test2 = qw(A B);

print $q->start_form( -name => 'main',
                      -method => 'POST',
                    );

print $q->popup_menu(      #drop down list
                     -name    => 'popup1',
                     -values  => \@test,
                     -default => 'value2');

print $q->submit(-name => 'do one thing');

print $q->submit(-name => 'do two things');

if ($q->param('do one thing')) {
    print "One thing: ", $q->param('popup1'), "\n";
}

if ($q->param('do two things')) {
    print $q->checkbox_group( -name     => 'checkemail',
                              -values   => \@test2,
                              -columns  => 2,
                              -rows     => 10,
                            );
    print $q->submit(-name => 'Submit');
}

if ($q->param('Submit')) {
    print 'Sencond thing', $q->param('checkemail'), "\n";
}

请注意,代码使用-values中的数组引用。

相关问题