如何控制PHP多页表单的流程?

如何控制PHP多页表单的流程?,php,forms,controls,Php,Forms,Controls,我是个PHP新手 我已经开发了一个多页表单,目前运行良好-每个阶段都在另一页上(我使用会话来保留数据)。 然而,我知道用户并不总是按照您想要的方式使用这些表单 我想控制表单的流 我希望用户能够使用浏览器的后退和前进按钮,以便于使用 他们不应该通过直接在地址栏中输入表单阶段URL来跳过表单的一部分,以获取表单中后期阶段的URL(实际上是跳过表单的一部分) 表单也不是每次都以相同的路径流动,它取决于用户选择接下来显示哪个阶段 我想知道是否有人有办法控制这个多页表单的流量谢谢 将表单结果存储在会话

我是个PHP新手 我已经开发了一个多页表单,目前运行良好-每个阶段都在另一页上(我使用会话来保留数据)。
然而,我知道用户并不总是按照您想要的方式使用这些表单

我想控制表单的流

  • 我希望用户能够使用浏览器的后退和前进按钮,以便于使用
  • 他们不应该通过直接在地址栏中输入表单阶段URL来跳过表单的一部分,以获取表单中后期阶段的URL(实际上是跳过表单的一部分)

  • 表单也不是每次都以相同的路径流动,它取决于用户选择接下来显示哪个阶段


我想知道是否有人有办法控制这个多页表单的流量谢谢

将表单结果存储在会话中(如果敏感,则对其进行加密)

然后检查每个表单是否设置了值,并根据需要显示

使用另一个会话检查表单的“进度”,以防止用户提前跳过。 例如

<?php
  /* on form 3 */
    if(isset($_SESSION['progress'] && $_SESSION['progress']==2)
    {
       //the second form has been filled out and validates
    }
    else
    {
      // the 2nd form hasn't been finished, redirect
    }
?>

将非当前字段的数据推送到浏览器中的隐藏字段中(以节省时间和精力-只需序列化数组/对象)

我希望用户能够使用浏览器的后退和前进按钮

如果允许用户重新进入以前的阶段,只需让他们在会话中重写当前阶段即可。
如果不是,则将表单字段设置为只读,并且不处理前一阶段提交的表单


这是我在这里看到的唯一问题。

您可以使用会话数据在多个页面之间保持状态,也可以传输每个页面上的所有数据。通常情况下,您可以使用隐藏字段执行后一种操作,或者创建一个庞大的表单,并使用javascript使其看起来像是多个页面,而实际上并非如此


每种解决方案都有利弊。

这是一个非常糟糕的主意。会话应该只保存会话数据——存储事务数据只是自找麻烦。在处理虚拟会话/多个浏览器时,你会陷入困境。我显然没有想到这一点。指向taken@symcbean这样一种形式应该只有一个实例。在会话中存储这样的事务并没有什么坏处。“用户并不总是以您想要的方式使用这些表单”为什么不在您用来保留数据的同一会话中保存进度?如果可能,请使用ajax来执行此操作。不确定我是否应该对此进行上下表决,所以我只想通过。使用隐藏字段是一个可行的选择。不过,序列化内容并放在那里是个坏主意。@troelskn OP说,
用户并不总是按照你想要的方式使用这些表单
——这很清楚。愚蠢的隐藏字段不是一个好主意option@shrapnel我不确定是哪种方式使隐藏字段变得愚蠢?我只是建议序列化用户提交的数据-在将其用于任何用途之前,仍应验证这些数据。当用户不直接与数据交互时,使用序列化值只需省去编写大量隐藏字段的工作量。如果您认为这会损害应用程序的完整性,请解释如何操作。