我正在尝试用perl编写一个多问题调查,一次显示一个问题,带有“上一个”和“下一个”按钮。最终我需要从文件中读取问题,但我还没有那么远,所以我现在很难编写它们。
部分分配要求是我必须使用CGI,所以我不能直接打印任何HTML。
目前我有脚本打印出第一个问题,还有两个提交按钮,一个标记为“下一个”,另一个标记为“上一个”。
print $form->submit(-name=>'question', -value=>'next');
print $form->submit(-name=>'question', -value=>'previous');
我也有一个隐藏的领域:
print $form->hidden(-name=>'hidden', -value=> $currentQ);
我的想法是,一旦点击下一步,我会增加(或减少,如果之前被点击)$ currentQ,以便脚本知道它在哪个问题。
我按下的问题是按下按钮后操纵隐藏的字段。我有:
my $direction = $form->param( 'question' ) || '';
if ($direction eq 'next'){
$currentQ++;
}
连同打印声明打印$ currentQ。换句话说,每次我点击下一步它应该打印一个更高的数字,但它所做的只是保持为1(这只是为了测试功能,一旦这个工作,我必须弄清楚如何实际实现它,以便它会打印正确的问题)。
希望这个描述有一定道理,但如果您需要更多细节,请告诉我。我真的很喜欢这个,所以非常感谢任何帮助,提前谢谢!
答案 0 :(得分:4)
你有不一致的地方;您将隐藏字段命名为“隐藏”,但是从参数“问题”获取值。我不知道你的实际代码中是否存在这种情况。
使用CGI的一个问题是传递给输入字段生成方法的值只是一个默认值;随请求提供的值优先:
use CGI;
$form = CGI->new("hidden=41");
print $form->hidden(-name=>'hidden', -value=>42);
打印
<input type="hidden" name="hidden" value="41" />
要更改此设置,您需要提供-override参数:
print $form->hidden(-name=>'hidden', -value=>42, -override=>1);
或更改参数的存储值:
$form->param('hidden',42);
print $form->hidden(-name=>'hidden', -value=>42);
在调用隐藏方法生成html之前,请确保执行“if next,increment”逻辑。