我正在尝试用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(这只是为了测试功能,一旦它起作用,我就必须弄清楚如何实际实现它,以便它将打印正确的问题)。
希望这个描述是有意义的,但如果您需要更多详细信息,请告诉我。我真的被困在这个上面,所以任何帮助都非常感谢,提前感谢!
您存在不一致的情况;您将隐藏字段命名为"隐藏",但从参数"question"中获取值。 我不知道这是否存在于您的实际代码中。
使用 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,增量"逻辑。