【问题标题】:How do I cause a CGI program to run when someone clicks on a button?当有人单击按钮时,如何使 CGI 程序运行?
【发布时间】:2018-05-10 17:51:10
【问题描述】:

我有一个 Perl CGI 程序,我在其中设计了一个 HTML 表单。 如果有人单击此表单中的按钮,则会执行此文件中的 CGI/Perl 子例程。 因为表单中有多个按钮,所以我将它们的类型设置为“按钮”,而不是“提交”。

这是一个书店网站,我为一种书籍分别设置了三个按钮(例如,我的按钮是:“科幻小​​说”、“小说”和“诗歌”)。我必须使用按钮。单击每个按钮后,将显示该类型的书籍列表,用户可以选择书籍。我不应该使用 javascript:它应该由 CGI 控制。

【问题讨论】:

  • 当他们单击按钮时可以转到不同的页面,还是您想要 AJAX 解决方案?
  • 是的,点击按钮后跳转到不同的页面是可以的。我不应该使用 AJAX。我期待着您的回音。非常感谢您的帮助。
  • 听起来您的问题描述得不好,而您真正想知道的是如何确定从脚本中单击了哪个按钮;这在我的回答中。

标签: perl button cgi


【解决方案1】:

它应该像你的表单一样简单:

<input type="submit" name="Button1" value="Button 1" />
<input type="submit" name="Button2" value="Button 2" />
<input type="submit" name="Button3" value="Button 3" />

并且,在您的脚本中:

if ($cgi->param('Button1')) {
    # Button1 was clicked, do stuff...
} elsif ($cgi->param('Button2')) {
    # Button2 was clicked, do something else...
} elsif ($cgi->param('Button3')) {
    # Button3 was clicked, do whatever you want...
} else {
    # No button clicked; show the form
}

【讨论】:

    【解决方案2】:

    您可以在表单中拥有的type="submit" 按钮的数量没有限制。只要他们有一个名称/值集,只有用于提交表单的按钮的名称/值对将被发送到服务器。

    如果您使用图像提交按钮或&lt;button&gt; 元素本身,由于浏览器支持,有一些注意事项,但在这种情况下似乎不会发生这种情况。

    【讨论】:

    • 我将所有按钮的类型更改为“提交”,然后检查它们的值以了解按下了哪个按钮。您的指导使我对如何处理我的问题有了很好的了解。非常感谢。
    【解决方案3】:

    如果需要,您可以在服务器端指定不同的名称来区分它们。 否则,您可以尝试使用 JavaScript 提交表单...

    我相信你可以用 JavaScript 实现它!

    你到底想做什么?

    【讨论】:

    • 这是一个书店网站,我有3个按钮,每个按钮对应一种书籍(例如,我的按钮是:“科幻小​​说”、“小说”和“诗歌”)。我必须使用按钮。单击每个按钮后,会显示该类型的书籍列表,用户可以选择书籍。我不应该使用 javascript。它应该由CGI控制。我认为您的第一个解决方案对我来说更好。您能否再解释一下,或者举个例子。我非常感谢您的任何其他指导。再次感谢。
    • 感谢您的回复和指导 :)
    【解决方案4】:

    有一次我遇到了类似(我认为)但更简单的情况:我有一个 CGI 程序生成一个表单,当单击“提交”按钮时,我希望运行相同的表单。为此,只需让表单的 action 属性调用相同的 CGI 程序即可。

    对于您的情况,您似乎需要调用多个 Perl 脚本,具体取决于按下的按钮。我在 CGI 中使用的 Perl 不多,但一种方法是使用单个 CGI 脚本,无论调用哪个按钮,它都会被调用。该脚本然后检查 GET 或 POST 值并确定按下了哪个按钮,然后调用适当的子例程或脚本。 Google 找到了PerlDoc CGI page,它应该可以帮助您入门。

    【讨论】:

    • 谢谢。我使用了“拥有一个 CGI 脚本”然后“意识到按下了哪个按钮”的指导。这很有帮助。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-10-25
    • 2021-07-18
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    相关资源
    最近更新 更多