【问题标题】:Trouble with Perl CGI FormPerl CGI 表单的问题
【发布时间】:2025-12-18 00:45:01
【问题描述】:

我对有两个提交按钮的 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;
    }

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

【问题讨论】:

    标签: perl cgi


    【解决方案1】:

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

    #!/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 中使用了数组引用。

    【讨论】:

      最近更新 更多