CGI Perl - 改变动作和模式变量

时间:2012-09-20 02:03:04

标签: perl variables cgi action mode

我对CGI Perl有点不高兴,我正在开发一个使用'mode'和'action'变量来确定加载哪些页面的Web应用程序。

$mode   = param('mode');
$action = param('action');

  if ($mode eq 'page1') {

      if ($action 'eq') {

          &performAction;
      }
      displayPage1;
  }
  elsif ($mode eq 'page2') {

      &displayPage2
  }

在开发过程中,我一直无法确定在表单提交后尝试导航到不同模式/操作时设置这些变量的最佳方法。

在某些情况下,在表单中放置隐藏值将起作用

hidden(-name=>'action',-value=>'save')

但有时它不会。如果是后者,在表单之前放置​​param('action',“save”)将在提交表单时更改操作。 我无法弄清楚为什么会发生这种情况,是否存在影响我不知道的这两个变量的因素?

我现在需要做的是在同一表单上有两个按钮,一个用于设置保存表单数据的操作,另一个用于保存表单数据但导航到具有该表单数据的另一个模式/页面

如果有人能够至少指出我正在研究的方向,我会非常感激。

2 个答案:

答案 0 :(得分:0)

默认情况下,CGI模块实现一种称为“粘性”字段的状态保留行为。这种方法的工作方式是,如果要重新生成表单,生成表单字段值的方法将询问param()以查看查询字符串中是否存在类似命名的参数。如果他们找到一个名称相同的参数,他们将使用它来设置默认值。

你想要

hidden(-name=>'action', -value=>$new_value, -override=>1)

hidden(-name=>'action', -value=>'default_value')

param('hidden_name', $new_value);

答案 1 :(得分:0)

这是一次尝试,不确定它是否有效。

尝试在按钮之前设置隐藏变量并在每个按钮之前更改它,因此应该采用新值。

例如:

<input type='hidden' name='op' value='save'/>
<input type='submit' name='Save Form' value='SaveForm'/>
<input type='hidden' name='op' value='submit'/>
<input type='submit' name='Submit Form' value='SubmitForm'/>
<input type='hidden' name='op' value='cancel'/>
<input type='submit' name='Cancel Form' value='CancelForm'/>

您可以在perl脚本中检查隐藏变量'op'。