0

我有一个多步骤表单,我分布在 4 个单独的页面上 - 换句话说,4 个部分(我选择了这种方法,因为它太复杂而无法在一页上处理我的所有字段)。在我的 MySQL 数据库中,我为每个页面上的每个部分都有一个表(step1, step2, step3, step4)。提交第一页后,我想将我的 Page1 数据插入数据库并让它返回主键,我的目标是然后将其发布到下一页 ( step2.php) ...步骤 3 和步骤 4 将遵循相同的过程。

数据库中 Step2、Step3 和 Step4 的表都有一个主键 ( reg_id),它们也是 的外键step1.reg_id

我想就如何:

  1. 每次提交页面后将数据发回我的数据库(我是发回同一页面,还是有一个单独的处理器页面来处理?)
  2. 重定向到下一页
  3. 将Step1reg_id返回的内容传递到Next Step页面

我正在使用简单明了的 PDO 在 MySQL 中获取我的数据。我承认我没有太多的 PHP 知识来完成这项工作,因为我太习惯于 ASP.NET webforms 开发的生命周期,因此我在这里寻求您的专业知识。

一如既往的感激!

4

2 回答 2

2

正如 Karl 在他的评论中所说,在重定向到下一页之前将表单值保存为 $_SESSION 值是最有意义的。然后表单处理器访问来自 $_SESSION 的值,就像您将它们作为 $_POST 值发送一样。

为了进一步说明为什么这样做会更好一些,您必须考虑如果您的用户不只是从第 1 页到第 2 页……再一次坐到表单的末尾会发生什么。如果有人在中途退出向导怎么办?如果他们需要返回并编辑值,有时是多次,该怎么办?简而言之,如果您的用户的工作流程导致表单不完整或用户在表单页面之间来回切换,您最终可能会进行大量不必要的验证并写入数据库。

如果您将表单值保存在会话中,并且仅在用户完成整个多页表单时将它们存储在数据库中,那么您就消除了这些不必要的数据库写入的可能性。

它还使人们可以轻松地在表单中返回以进行编辑,而不会破坏您表示的验证有点复杂。前任。假设第 1 页上的值 x 与第 4 页上的值 y 相关。用户一直到第 5 页,但随后决定他们要返回第 1 页来编辑 x。第 1 页可以访问会话,因此可以访问 x 和 y ——例如,如果他们的新 x 值会使 y 无效,或者类似的情况,您可以警告他们。

于 2013-02-26T14:42:40.343 回答
0

您可以为此设置 5 个单独的页面,并在它们之间传递数据。

Page1.php 将具有初始表单但不进行任何处理,它将所有数据发布到 page2 onSubmit。

Page2.php 将从 page1.php 中检索所有发布数据,存储到数据库中,并检索其 ID,然后为向导的第二阶段显示一个表单。此表单 onSubmit,将 ID(在隐藏字段中)和表单元素发送到 page3.php

Page3.php 存储来自 page2.php 的帖子数据,检索 ID 并显示下一个表单。再次提交隐藏的 ID 和表单字段,这次提交到 page4.php

您可以根据向导中的步骤重复此步骤的次数。


另一种方法是将所有内容放在一个页面中。将有几个 if 语句,用于读取已发送的数据。隐藏字段将跟踪当前步骤。IE

如果 $step == 1,则显示第一个表单(onsubmit sent $step = 2 作为隐藏字段)

如果 $step == 2 从第一个表单中检索发布数据并插入 DB 然后显示第二个表单(onsubmit 发送 $step = 3 作为隐藏字段)

如果 $step == 3 从前一个表单中检索发布数据并插入数据库,然后显示第二个表单(onsubmit send $step = 4 作为隐藏字段)

等等

于 2013-02-26T14:34:01.387 回答