在比较perl网页中的输入变量后指向网页

时间:2013-06-03 17:52:55

标签: forms perl cgi webpage

所以我在这里要做的就是为网页建立一对。所以有主页(比如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;
 }

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

的数组

2 个答案:

答案 0 :(得分:1)

您正在寻找重定向标题

CGI.pm: Generating a Redirection Header

详细说明一下,一旦计算出下一个URL,就会添加一个重定向标题,告诉浏览器去那里。有两种方法。第一种方法是调用redirect($ new_url)。第二种是调用标题('Location',$ new_url)。

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

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

答案 1 :(得分: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上找到有关其工作原理in the manual for CGI的更多信息。


我不会详细介绍你的代码不是很现代的Perl。如果您想要改进,请获取2010年之后编写的现代Perl书籍。但请首先使用use strictuse warnings