【问题标题】:handle no-button-is-pressed case in multi-step php form?以多步 php 形式处理 no-button-is-pressed 情况?
【发布时间】:2016-01-21 19:11:20
【问题描述】:

我为问题How do I use two submit buttons, and differentiate between which one was used to submit the form?找到了使用两个不同名称按钮的答案

<input type="submit" name="publish" alt="Publish" value=""/> 
<input type="submit" name="save" alt="Save" value=""/>

然后检测哪个被按下

<?php
    if (isset($_POST['publish'])) {
        // Publish-button was clicked
    }
    elseif (isset($_POST['save'])) {
        // Save-button was clicked
    }
?>

然后我在How can I tell which button was clicked in a PHP form submit?这个问题的答案中发现不应该这样做,因为可能会发生没有点击任何按钮的情况。

存在其他提交表单的方式,并且某些浏览器/版本决定 不要在其中一些中发送任何提交按钮的名称/值 情况。例如,许多用户通过按 Enter 提交表单 光标/焦点位于文本字段上时的键。表格也可以 通过javascript提交,以及一些更晦涩的方法。

应该使用

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    //something posted

    if (isset($_POST['publish'])) {
        // Publish-button was clicked
    } else {
        // Assume Save-button was clicked
    }
}

1.问题: 如果您在表单的文本字段中按 Enter,哪个浏览器实际上不会发送提交按钮的名称?我刚刚用 Mozilla 进行了检查,在这个浏览器中它正在发送提交按钮的名称。

2.问题:我想在php中构建一个从第1页到第3页的多步骤表单。所有页面都在同一个php文件中,我从按钮检测到我想下一个页面,结构看起来和这个类似:

<?php
    if(isset($_POST['button1']))
    {
     include 'page2.php';
    }
    elseif(isset($_POST['button2']))
    {
      include 'page3.php';
    }
    else
    {
      include 'page1.php';
    }
  ?>

由于我有前进和后退按钮,我正在考虑将用户当前所在的页面存储在 $_SESSION['current_page'] 中,并且当提交的表单没有按钮值时,我会继续下一页。但是,这对我来说似乎有点太复杂了。有没有更短的解决方案?

【问题讨论】:

    标签: php form-submit


    【解决方案1】:
    1. 正如作者所建议的,许多机器人中的任何一个,鲜为人知的用户 代理、实验客户、脚本、脚本小子、程序员 通过调试工具和 Adrian Lamo 测试功能。

    2. 我想你可以引入隐藏变量;你可以, 或者,通过 GET 传递状态。可能是最好的事情 将是引入强制的Javascript(几乎所有有效) 用户按下其中一个按钮并让服务器生成一个 没有正确按钮提交的任何请求的错误页面。 或者,也许更好,多一点 Web 2.0,不要使用多个 页面表单,但在客户端中发挥你的魔力(通过隐藏和 取消隐藏表单的部分等),然后提交 一次操作中的“多部分”表单以供服务器验证。

    【讨论】:

    • 使用 JavaScript 意味着您在最后阶段只需要一个提交按钮。
    • 关于问题 1:我不想阻止脚本小子破解我的表单。我只关心那些试图通过表单的人在使用过时的浏览器时是否会遇到困难。实际上是否有浏览器在文本字段中按回车键时不传递按钮名称/值?我认为使用 Javascript 也不会阻止脚本小子破解表单。我只知道如何用 javascript 隐藏/取消隐藏东西,但不是每个人都启用了 ahs js。
    猜你喜欢
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多