0

所以我在这里要做的是为网页构建一对。所以有主页(比如m1)。所以 m1 只有一个输入字段和一个提交按钮。所以我想做的是从主页的输入字段中获取变量(一个字符串),然后将它与一组字符串进行比较,然后重定向到相应的网页。例如,如果我在输入字段中输入“蓝色”,它应该取值,将其与一组值进行比较并重定向到相应的网页(可能是蓝色背景的页面)

这是我正在尝试使用的代码,经过长时间的搜索后得到的。

 use CGI qw/:standard :html3/;

 # this defines the contents of the fill out forms
 # on each page.
 @PAGES = ('Main','Blue','Red','Yellow','Green');
 %FIELDS = ('Main' => ['Name'],
            );
 # accumulate the field names into %ALL_FIELDS;
 foreach (values %FIELDS) {
 grep($ALL_FIELDS{$_}++,@$_);
 } 


 # figure out what page we're on and where we're heading.
 $current_page = calculate_page(param('page'),param('go'));
 $page_name = $PAGES[$current_page];

 print_header();
 print_form($current_page)         if $FIELDS{$page_name};
 print_review($current_page)       if $page_name eq 'Review';
 print_confirmation($current_page) if $page_name eq 'Confirmation';
 print end_html;

 # CALCULATE THE CURRENT PAGE
 sub calculate_page {
 my ($prev,$dir) = @_;
 return 0 if $prev eq '';   # start with first page
 return $prev + 1 if $dir eq 'Submit Application';
 return $prev + 1 if $dir eq 'Next Page';
 return $prev - 1 if $dir eq 'Previous Page';
 }

 # PRINT HTTP AND HTML HEADERS
 sub print_header {
 print header,
 start_html("Your Friendly Family Loan Center"),
 h1("Your Friendly Family Loan Center"),
 h2($page_name);
 }

 # PRINT ONE OF THE QUESTIONNAIRE PAGES
 sub print_form {
 my $current_page = shift;
 print "Please enter the name",
    start_form,
    hr;
 draw_form(@{$FIELDS{$page_name}});
 print hr;
 print submit(-name=>'go',-value=>'Previous Page') 
    if $current_page > 0;
 print submit(-name=>'go',-value=>'Submit'), 
    hidden(-name=>'page',-value=>$current_page,-override=>1),
    end_form;
 }

我的问题是如何访问第一页中提交的变量以及如何与变量集进行比较?当我说变量集时,它表示一个数组,其值为红色蓝色绿色黄色

4

2 回答 2

1

您正在寻找重定向标头

CGI.pm:生成重定向标头

详细地说,一旦你计算了下一个 URL,你就添加一个重定向头来告诉浏览器去那里。有两种方法。第一种方法是调用redirect($new_url)。二是调用header('Location', $new_url)。

我发现有时候,redirect() 方法对我不起作用,我不得不求助于 header() 方法。但这可能是我的旧版 CGI.pm。

要记住的另一件事是,这些方法都不会结束您的请求处理。他们只是在响应的标题列表中添加一个标题。正确退出脚本由您决定。

于 2013-06-03T18:34:58.577 回答
1

首先,回答你的问题:

你可以像这样从你的 CGI 模块创建一个对象:

my $cgi = CGI->new;

把它放在最上面。该对象有几个方法。其中之一是$cgi->param()。您可以使用它来获取表单的值。因此,如果您有一个名为 的字段action,则可以这样查看:

my $action = $cgi->param('action');

在您的情况下,您有一个Name要与数组进行比较的字段。

my @colors = qw( red blue green yellow );
for (my $i=0; $ <= $#colors; $i++) {
  if ( $colors[$i] eq $cgi->param('Name') ) {
    print "<p>You have entered $colors[$i]. ";
    print "It was the $i. element in the array!</p>";
  }
}

我们制作了一个迭代变量$i,从 0 计数到@colors. 然后我们将这些元素中的每一个与表单变量进行比较。

您可以在 CPAN 上的 CGI 手册中找到有关其工作原理的更多信息。


我不会详细说明您的代码是多么不现代的 Perl。如果您想改进,请获取 2010 年之后编写的现代 Perl 书籍。但请从使用use strictand开始use warnings

于 2013-06-03T18:35:10.150 回答