在页面之间维护/重新提交POST变量的最合理机制是什么?


What is the most sensible mechanism by which to maintain/resubmit POST variables between pages?

可能是一个愚蠢的问题,但是我正在寻找维护和"重新提交" POST变量的最合理的机制。基本的工作流程如下:

step1)选择要支付的费用,并输入支付信息

步骤2)显示确认/摘要页面,选择"继续付款"或"编辑信息"

步骤3)返回"编辑"表单或发送待处理的数据。

我目前使用一个单一的页面为所有的行动(只是一个巨大的开关基于一个"行动"变量),并提交信息。我遇到的问题是,在"确认页面"和任何一个选项之间,我丢失了我的POST数据(我理解)。我现在需要的是一种保存该数据的方法,而不需要在每个SWITCH节中重复输入字段。以下是我考虑过的一些选择。请随意评论每个人的优点或愚蠢:

1)序列化它到一个SESSION变量然后反序列化它?

2)简单的键/值到一个SESSION数组?

3)为呈现的每个"表单"重新创建每个INPUT并重新填充值

4)把SWITCH放在一个单独的表格中,只显示相关的部分

5)我会用Javascript(一种伪提交技术)来处理这一切,但目前在初始表单和摘要和ajax之间发生的处理将是一个巨大的问题。

对于经典的INPUT->CONFIRM->PROCESS过程,推荐的操作过程是什么?如果我只是错过了一些很明显/简单的东西,那就太棒了。

供参考:目前使用PHP 5.1.6

最好!

编辑1 显然,需要使用单独的页面来实现各种功能。我之所以不使用单独的页面,是因为其他页面都依赖于这个页面,而管理部门不允许在这个时间点上进行彻底的中断。它在3年前建造得很差,现在正在部分修复。

在这里我使用:

 foreach($_POST as $key=>$value)
      <input type="hidden">.......

  1. 序列化它到一个SESSION变量然后反序列化它?
  2. 简单的键/值到一个SESSION数组?

    非常糟糕。单击"确认"应该总是确认页面上显示的内容,而不是在某些服务器上存储的一些模糊会话中发生的事情(如果您有负载均衡集群,则可能不是服务于前一个请求的服务器)。

  3. 当你按下后退键时,有很多网站会尝试检测并显示错误页面,可能是由于相关原因。
  4. 为呈现的每个"表单"重新创建每个INPUT并重新填充值

    对于"返回编辑"页面,无论如何你都需要这样做。

    在确认页面上的循环中<input type="hidden" ... />有什么困难?

  5. 把SWITCH放在一个单独的表单中,只显示相关的部分

    你的意思是把所有的输入都放在确认页的display:none中?

首先,将其分成多个页面可能是一个很好的解决方案,但我不知道您的具体需求。

1和2是坏主意。话虽如此,我不知道对会话变量进行序列化和反序列化能获得什么,而会话中的简单键值对无法获得这些。如果你在负载平衡器后面运行多台服务器,会话管理就会变得相当麻烦

4听起来很奇怪。我不知道这个开关给了你什么。如果你必须使用条件逻辑向用户显示完全不同的功能,那么最好在单独的页面上显示。

5虚假提交?听起来像个杂烩。您的意思是将数据发送回服务器并返回相同的数据并显示确认div?为什么不直接使用Javascript来操作DOM呢?不过这主意不好。

只需将参数重新发布到确认表单并相应地填充确认字段。(标准流程)。我认为这是什么3,但我建议你使用不同的页面为每一步。只是为了保持干净。

最后我用了

<?$forward_post_data = base64_encode(serialize($_POST));?>
<input type="hidden" value="<?=$forward_post_data?>"/>

…然后根据需要进行解码。