it-swarm.cn

如何处理其中一个表单未提交的多个步骤表单

假设您有一个需要两个表单的提交过程。提交第二个表单会触发一封电子邮件。如果没有提交第二份表格,你会怎么做?假设用户意外忘记或关闭了窗口。

我唯一的解决方案是使用标记未发送电子邮件的第一个表单的提交更新数据库。提交第二个表单将触发事件以发送电子邮件并使用标记更新数据库,该标志标识已发送的电子邮件。 cron作业将定期运行以检查未发送电子邮件的任何标志,收集信息并发送电子邮件。

这是处理问题的最佳方式吗?

谢谢。

编辑:清晰度

表单1用户提交一般数据

消息1用户提供了选择。用户需要选择“通过”或“接受”。如果用户提交“接受”表单(表单2),则会发送电子邮件。如果用户提交“通过”表格(表格2),则会向他们提供另一个选择的消息(表格3)。如果用户什么都不做,则提供的最后一个选择是他们的默认选择,但此时仍需要发送电子邮件。

我希望更清楚。

2
user334

由于HTTP是无状态的,因此在浏览器关闭后跟踪用户是否已提交第一个表单的唯一方法是使用持久性机制(例如,数据库),就像您一样。

但是,如果用户提交第一个表单并且cron作业在有机会提交第二个表单之前运行,则可能会遇到问题。您可能还想检查是否已经过了一定的时间。

从理论上讲,你也可以尝试检测浏览器何时关闭并使用该事件来触发一个动作,但我建议强烈地反对它。

0
Andy West

这取决于你为何担心这个问题。

如果您担心的是数据库中的数据不完整,我建议您将输入的数据保留在用户会话中,直到用户完成第二个表单,然后更新数据库并发送电子邮件。如果用户不打算填写第二个表格,那么一旦他的会话超时,整个交易所将被忘记。

如果你关心的是用户没有意识到他们需要完成第二个表格你应该强烈地考虑重新设计表格(可能合并它们)。这是一个用户界面问题。

有一个标志(如上所述)可以帮助确定是否发生这种情况,但它不会告诉你它是通过用户错误发生还是仅仅是因为用户失去了兴趣(除非你有某种类型的专属观众)。

另一种方法是,如果你可以在用户会话到期时挂钩(这对于[Java站点来说相当简单,我对其他服务器端技术中的这个功能并不熟悉)你可以检查一下那里的不完整交易点。

1
Kris

如您所述,您应该在数据库中拥有state进程,以确定哪些步骤已完成。

现在,下一步取决于所使用的技术..

对于ASP/ASP.NET,当会话到期时会触发一个事件(服务器端),并且可以捕获它执行清理/自动完成程序..

不确定这是否可以在PHP环境中进行..我想你可以在第一步完成后存储一个时间戳,并且一个cron作业将定期运行但首先检查时间戳 =在自动完成之前查看是否已经过了一段时间..

0
Gabriele Petrioli