0

我目前正在开发一个使用 CodeIgniter 的网络应用程序,具体来说,我正在构建注册表单。

此表单由 3 个不同的步骤组成,我只是想知道在 2 个步骤之间保存信息的最佳方法是什么?我只想在最后一步完成后将所有信息保存到数据库中。

我应该只使用本机 PHP 会话来执行此操作吗?或者我应该使用 CI flashdata?

4

3 回答 3

1

我使用了隐藏的字段和会话。我倾向于在每个阶段结束时将所有表单值保存到文本文件中。然后,如果在任何给定阶段发生某些事情,我可以选择如何处理保存在文本文件中的数据。

例如,如果您希望可以在第一页捕获电子邮件地址。如果表单没有完成(因为所有阶段都已成功完成),那么您可以在适当的阶段向潜在用户发送一封电子邮件,其中包含指向注册表单的链接。潜在用户不必重新填写他们已填写的任何字段,您就有机会重新获得他们作为用户的身份。

我倾向于使用文本文件作为保存多阶段表单任何阶段的所有数据的默认方式。在表格的最后,我可以将数据处理到数据库中并删除文本文件。为了捕捉部分完整的注册,我可以编写一个脚本,该脚本通过每分钟运行的 cronjob 执行。我总是在数据文件中保存一个时间戳,代表上次更新文件的时间。如果时间戳超过 X 分钟,则在其上运行未完成的注册脚本或将其删除。

在每个阶段保存数据很简单。在第一阶段之后,您$dataFile使用$dataFile = file_put_contents(json_encode($data));where创建$data = array('timestamp'=>...) + $_POST;。每个阶段之后我第一次使用$data = json_decode(file_get_contents($dataFile), TRUE) + $_POST;, 和$data['timestamp'] = ...;. 然后使用 file_put_contents 将其保存回文件。显然,您将需要跟踪 $dataFile 变量,但这很容易通过隐藏字段或会话数据完成。

该文件在被处理和删除之前只会存在 X 分钟,但是如果您希望在短时间内对文本文件进行安全保护,那么我建议您查找密码或在简单的 Ceasar 密码上创建自己的变体. 对字段名称和值使用密码。

早在 12 月,我正在为自己解决最新 CodeIgniter 中的多阶段表单问题。我不能说这是一个普遍接受的最佳实践,但文本文件过去对我来说效果很好。我在这里发布了一些多阶段表单的示例代码:多阶段表单示例

于 2013-01-14T04:48:35.680 回答
0

您可以将值发布到下一个表单,您可以在其中使用隐藏字段来存储这些值,这样当您发布最后一个表单时,您就会拥有所有值并且您可以一次处理它们。

于 2013-01-14T04:19:16.687 回答
0

我在我的最新项目中遇到了这种情况,我使用 Codeigniter 的会话将在 userdata 会话中验证后提交的数据保存为最后一步中的数组,我将数据发送到数据库

于 2016-03-06T07:41:44.037 回答