perl-cgi:如何检索表单的选择?

时间:2011-06-28 16:41:54

标签: perl forms cgi validation

有人可以告诉我如何根据以下代码中的下拉菜单确定用户的选择是什么?我做错了什么?

#!/usr/bin/perl -wT

use     strict ;
use     warnings ;
use     CGI ;
use     CGI::Carp qw(warningsToBrowser fatalsToBrowser) ;


my      $cgi = new CGI ;
print   $cgi->header(-type=>"text/html", -charset=>"utf-8") ;
print   $cgi->start_html(-title=>"Data Analysis | hellas online") ;

my %labels = (  "yes"   =>      "For Sure!",
                "no"    =>      "Not for me.",
                "maybe" =>      "Maybe So."     ) ;    
print $cgi->popup_menu( -name           => "your_answer",
                        -values         => ["yes", "no", "maybe"],
                        -default        => "yes",
                        -labels         => \%labels     ) ;
my @selected = $cgi->param("your_answer") ;
foreach my $i (@selected)
{
        print $cgi->$i."\n" ;
}
print   $cgi->end_html ;

...打印$ cgi-> $ i。" \ n" ; ...声明没有显示任何内容?!

谢谢。

3 个答案:

答案 0 :(得分:0)

您使用了错误的语法: 不是print $cgi->$i."\n" ;而是print $i."\n" ;

发生的事情很简单:

$a = "abc"
print $cgi->$a ."\n"

会查找$cgi

的成员“abc”

答案 1 :(得分:0)

我正在预感这个,所以它可能不正确,但希望它可以作为某种指导,从哪里开始寻找:我认为问题是,如果提供的代码真的是全部你有,网站是静态的 - 即真的选择某些东西是不可能的。一旦用户对下拉菜单中当前显示的内容进行了更改,您的脚本就不会注意到,因为它已经完成了它的工作并且最后一行已经被执行了。下拉菜单中的更改不会被Web服务器传递(甚至被注意到),因此@selected将保留为空列表(也就是说,我不知道为什么@selected不会至少包含你的默认选择,但也许我在这里忽略了一些东西。)

另外,您也可以将@selected更改为$selected,因为您的下拉菜单无论如何都不允许进行多项选择。

答案 2 :(得分:0)

您永远不会创建表单,因此永远不能提交popup_menu的值。您需要将表单控件放在表单中。

$cgi->param只有在表单数据提交后(您还需要提交按钮)从浏览器返回服务器时才会获取数据。