【问题标题】:Form that spans many pages跨越多页的表单
【发布时间】:2011-04-26 10:37:53
【问题描述】:

如何创建跨越多个页面的表单?我想问大量的问题,根据之前问题的答案,会提出新的具体问题。

【问题讨论】:

  • 到目前为止你得到了什么?

标签: php javascript jquery html forms


【解决方案1】:

有几种方法可以做到这一点:

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

如果您想成为超级时尚,您可以在 HTML5 客户端存储中积累信息。当然,这会排除旧版 Microsoft 浏览器。

【讨论】:

    【解决方案2】:

    不存在跨越多个页面的单个表单:每个页面/表单都独立于其他页面/表单。

    如果您以某种方式跟踪已输入的内容(可能在会话变量中),那么您可以只以新形式显示新问题,直到获得所需的所有数据。

    【讨论】:

      【解决方案3】:

      传统方法:将所有之前的问题答案存储在后续页面的<input type="hidden">字段中,以便最后一个表单包含整个提交(只是不是全部可见)。缺点:文件上传很烦人,数据量会很大。

      常用方法:将目前为止的答案放入会话或 cookie 中,并在最后挑选出来。缺点:并发操作最终会产生不可预测的冲突结果。文件上传仍然很烦人。我会避免使用 cookie/session 存储解决方案。

      现代方法:有一个简单(长)的单一表单,但使用 JavaScript 一次只显示其中的一部分。单击“下一步”时,您只需隐藏上一页的内容并显示下一个。最后一个按钮是真正的提交按钮。

      【讨论】:

        【解决方案4】:

        我假设您的问题是,因为没有多页表单之类的东西,您的意思是如何通过使用多个页面来构建一组用户的答案,每个页面都包含一个表单。

        PHP 为此类事情提供的机制是会话机制。当用户提交每个页面时,您将在会话中建立一组答案,当您拥有完整的集合时,会话中的完整答案集将提交到数据库。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-21
          • 1970-01-01
          • 1970-01-01
          • 2017-11-13
          • 2013-08-07
          • 1970-01-01
          相关资源
          最近更新 更多