处理多步php表单中没有按钮的情况?

时间:2015-10-22 13:26:18

标签: php form-submit

我在问题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.Question:我想在php中构建一个从第1页到第3页的多步骤表单。所有页面都在同一个php文件中,我从按钮中检测到页面我想接下来,结构看起来类似于这个:

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

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

1 个答案:

答案 0 :(得分:1)

  1. 正如作者所说,任何一个机器人,鲜为人知的用户 代理,实验客户,脚本,脚本小子,程序员 通过调试工具和Adrian Lamo测试功能。

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