跨越多个页面的表单

3

我该如何创建一个跨越多个页面的表单?我想要询问大量的问题,并根据之前问题的答案,来询问新的特定问题。


1
你现在得到了什么? - David Thomas
4个回答

5
传统方法:在后续页面的<input type="hidden">字段中存储所有以前的问题答案,以便最后一个表单包含整个提交(仅不是所有可见内容)。缺点:上传文件需要记住,数据量可能会变得很大。
常用方法:随着进展,将已有答案放入会话或cookie中,在最后选出它们。缺点:并发操作会导致不可预测的冲突结果。上传文件仍然麻烦。我会避免使用cookie/session存储解决方案。
现代方法:拥有一个简单(长)的单一表单,但使用JavaScript一次只显示其中的一部分。点击“下一页”时,您只需隐藏上一页的内容并显示下一页的内容。最后一个按钮是真正的提交按钮。

1

有几种方法可以实现这个目标:

  • 逐步填充数据库,逐个提交
  • 在每个页面上保留所有表单字段,但隐藏(<input type='hidden' ...>)不应显示的字段(如@Trufa在另一个答案中建议的那样)
  • 累积一个隐式持久化在会话中的对象(取决于您的服务器架构)
  • 在一个或多个 cookie 中累积内容(看起来很恶心,但我为了完整性而列出它)

如果你想要超级时髦,你可以在HTML5客户端存储中累积信息。当然,这将排除旧的Microsoft浏览器。


0

不存在跨越多个页面的单一表单:每个页面/表单都是独立的。

如果你以某种方式跟踪已经输入的内容(可能是在会话变量中),那么你可以在新表单中显示新问题,直到你拥有所需的所有数据。


0

我假设您的问题是关于如何通过多个页面构建用户答案集,因为不存在多页表单这样的东西。

PHP提供的机制是会话机制。当用户提交每个页面时,您将在会话中构建答案集,当您拥有完整的答案集时,会话中的全部答案集都会提交到数据库。

当然,这不是唯一的方法,您也可以在每次页面提交时增量添加数据到数据库中,但这样可能会出现部分答案集,即人们只完成了第一页或前几页然后放弃了。您需要编写代码来处理这些部分提交。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接