多页注册系统:如何保持状态?

时间:2011-09-24 04:10:49

标签: php joomla1.6

我建立了一个系统,允许新成员去年加入一个组织,当时我刚刚开始担任程序员。这是一个跨多个页面的多步骤过程,在成功的信用卡交易之后结束。部分复杂因素是家庭成员资格的要求,它记录了家庭中每个人的详细信息,并为他们创建了记录。

最初,我使用会话变量中的数组维护表单输入数据,并在信用卡付款完成后将数据提交给数据库。

我现在正在完全重建它,因为从那时起我学到了很多东西,而且维护起来太乱了,但我仍然不知道管理这些数据的最佳方法是什么。

最初的理由是,因为有很多步骤,并且最后要求付款,所以在过程完成之前向数据库提交数据似乎毫无意义,特别是因为它涉及到记录多个表以及必须定期清除不完整记录的想法似乎是不必要的和过于复杂的努力。在第一次完成它之后,会话变量中的数组变得非常混乱并且在代码中涉及大量验证,因为它可能容易出错。我也失去了很多时间来纠正会话超时(这似乎比我在开发时预期的更频繁)。

所以我问那些比我更有知识和经验的人: 通过多页注册流程维护临时数据的最佳方法是什么?

2 个答案:

答案 0 :(得分:4)

一般来说,没有太多不同的方法可以解决这个问题。

所有数据都将在会话中保留,或者只有一个唯一标识符会在会话中保留,从而允许您在整个过程中查询数据库中的所有数据。

会话很不稳定,所以数据库是一种更好的方法。

将部分数据的每一步保存到数据库中,但在每个相关表中都有一个类似“已完成”或“已提交”的列,默认情况下为0,并且只有在完成该过程时才将它们全部标记为1。

编写一个每晚被cron调用一次的php脚本去删除所有已提交的记录= 0和最后修改的>这并不是太麻烦。 1天(你有一个列,当修改正确时自动更新时间戳?)或类似的东西。或者更好的是,不要删除,而是将它们移动到另一个名为“warm_leads”的表中 - 那些对您的服务感兴趣但由于某种原因获得保释并且有销售/客户服务跟进的人。

另外,将会话超时增加到1或2小时:

ini_set(’session.gc_maxlifetime’, 120*60); // 120 minutes

或者,只要浏览器处于打开状态并且javascript没有被破坏,就会在每个页面上每隔10分钟触发一次基本执行会话保持活动以扩展会话的AJAX请求。

另一个好消息是数据库持久化数据,你只需要在进入途中验证一次,而不是每一步都验证它。

答案 1 :(得分:3)

这是我的另一个想法。如果你根本不想使用SESSIONS,你可以使用Javascript(是的,请听我这个)。因此,基本上你会立即加载整个表单然后隐藏它的一部分,当有人点击下一步以进入它将显示的进程中的后续步骤(你甚至可以为幻灯片设置动画)隐藏的部分并隐藏它们刚刚完成的内容

因此,您不会加载不同的页面,而是在用户视图内外“滑动”内容。您可以在继续之前验证用户是否已输入数据,但您不会保存数据,而且您不需要。

这里是jQuery中的一个例子(注意它不显示字段,但你明白了。)

http://cssglobe.com/lab/easyslider/03.html

单击向下按钮。