如何检查是否按下了CGI按钮然后重定向它们

时间:2016-10-13 08:46:19

标签: perl cgi

例如,很难解释。如果我有这样的事情:

print submit(value => Exit), "\n";

如何制作它,以便当用户按下浏览器中的退出按钮时,它会将它们重定向到例如“cya later”的页面。

2 个答案:

答案 0 :(得分:1)

您正在使用CGI.pm中的HTML生成功能。这些都是deprecated for some time(它们从来都不是一个好主意)。我建议您使用templating engine instead

话虽如此,您需要的更改非常简单。您需要在两个地方更改代码。首先,您需要更改生成提交按钮的代码,以便为生成的HTML添加名称。

# Don't do this. Use a template.
# NB: Note the '-' I've added to the option names.
print submit(-value => 'Exit', -name => 'Exit'), "\n";

然后你需要更改处理传入参数的代码来处理这个新参数。

if (param('Exit')) {
  print redirect('http://somewhere_else.com/');
  exit;
}

请注意:a)应该打印重定向标题而不是您计划返回的任何其他标题(因此,不包括内容类型标题)和b)您的程序应在打印后立即退出重定向标题 - 您不应该打印任何其他输出。

更新:还值得指出的是,避免HTML生成功能的原因之一是它们(必然)过于复杂而无法使用。一个很好的例子就是你对它们的使用:

print submit(value => Exit)

这实际上是错误的,因为它产生了这个输出:

<input type="submit" name="value" value="Exit" />

我怀疑你的意思是:

print CGI->new->submit(-value => 'Exit')

这给出了这个:

<input type="submit" name=".submit" value="Exit" />

由于您没有给出明确的名称,该函数已为您合成了一个(.submit)。在上面的例子中,我给输入一个明确的名字:

print submit(-value => 'Exit', -name => 'Exit')

产生这个:

<input type="submit" name="Exit" value="Exit" />

答案 1 :(得分:0)

将提交按钮设为name。如果用于提交表单,它将显示在params中。