我目前正在开发一个使用CodeIgniter的网络应用程序,具体而言,我正在构建注册表单。
这个表单包含3个不同的步骤,我只是想知道在两个步骤之间保存信息的最佳方法是什么? 我只想在完成最后的装订后将所有信息保存到数据库中。
我应该只使用本机PHP会话来执行此操作吗?或者我应该使用CI flashdata吗?
答案 0 :(得分:1)
我使用了隐藏的字段和会话。我倾向于在每个阶段结束时将所有表单值保存到文本文件中。然后,如果在任何给定阶段发生了某些事情,我可以选择如何处理保存在文本文件中的数据。
例如,如果您希望可以在第一页上捕获电子邮件地址。如果表单没有完成(因为在所有阶段都已成功完成),那么您可以向潜在用户发送一封电子邮件,其中包含指向适当阶段的注册表单的链接。未来的用户不必重新填写他们填写的任何字段,您就有机会以用户的身份重新获得它们。
我倾向于使用文本文件作为默认方式来保存多阶段表单的任何阶段的所有数据。在表单的最后,我可以将数据处理到DB中并删除文本文件。为了捕获部分完整的注册,我可以编写一个脚本,该脚本通过每分钟运行的cronjob执行。我总是在数据文件中保存一个时间戳,表示文件上次更新的时间。如果时间戳超过X分钟,则运行未完成注册脚本或仅删除它。
在每个阶段保存数据很简单。在第一阶段之后,您使用$dataFile
$dataFile = file_put_contents(json_encode($data));
创建$data = array('timestamp'=>...) + $_POST;
。首先我使用$data = json_decode(file_get_contents($dataFile), TRUE) + $_POST;
和$data['timestamp'] = ...;
之后的每个阶段。然后使用file_put_contents将其保存回文件。显然,您需要跟踪$ dataFile变量,但这可以通过隐藏字段或会话数据轻松完成。
该文件在处理和删除之前只会在那里停留X分钟,但是如果您希望在这么短的时间内对文本文件有安全保障,那么我建议您查找密码或创建自己的变体。简单的Ceasar的密码。在字段名称和值上使用密码。
回到十二月,我正在为自己解决最新CodeIgniter中的多阶段表单问题。我不能说这是一个普遍接受的最佳实践,但文本文件在过去对我来说效果很好。我在这里发布了一个多阶段表单的示例代码:Multi-Stage Form Example。
答案 1 :(得分:0)
您可以将值发布到下一个表单,您可以使用隐藏字段存储这些值,这样当您发布最后一个表单时,您拥有所有值,并且您可以一次处理它们。
答案 2 :(得分:0)
我在最近的项目中遇到过这种情况,我使用Codeigniter会话将用户数据会话中验证后提交的数据保存为数组,在最后一步中我将数据发送到数据库