PHP中的大规模动态表单:最好的方法?

时间:2009-10-06 22:13:35

标签: php oop forms

这个问题可能比SO的平均问题要长一些,所以我会尽量缩短它:

我正在设计一个用户需要填写并提交的动态表单。这种形式是巨大的,有500多个可能的问题。显示给用户的问题取决于先前答案中给出的答案(例如,仅当用户选中“仍在学校”复选框时,学校相关问题页面才会显示。)

此表格有很多要求:

  • 多个页面,可根据给出的答案“打开或关闭”。
  • 当用户返回并更改特定答案时,已关闭的已填充组需要清空其问题的答案。
  • 根据之前给出的答案预先填写了一些问题。
  • 每个新页面请求都需要将表单保存到数据库中,以便用户可以随意暂停并继续填写表单。

最好的方法似乎是OO;定义一个接受多个选项的类(标题,要使用的输入类型,可能的答案等),并相应地构建HTML。

然而,这种方法的主要问题在于,因为问题可以“借用”先前信息,所以仅为要在页面上显示的问题创建实例是不够的。实际上,每次用户加载新页面时,唯一可靠的方法是实例化每个可能的问题。

这种方法可能会破坏PHP性能;对我而言,似乎这不是适当的OO解决方案。

这个问题有更好的解决方案吗?

本质上,我需要一种快速轻量的方法来创建500到1000条记录的多维数组(类实例?),其中大约10条将在任何给定时间显示在页面上。

最好,我想将表单存储为XML文档,因此任何在这方面都能很好地工作的方法都是首选。

2 个答案:

答案 0 :(得分:2)

我将描述一个使用数据库作为存储机制的解决方案,您可以使用任何有效的方法,但这将更容易描述。

开始我建立一个包含调查所有“页面”的表格。这只会用于分组问题,并定义显示的任何要求

第二次构建一个表来存储表单中的每个问题。此表应包含有关问题的基本信息,类型,答案(如果已预定义)等。以及指定预定义数据可能来自何处的任何信息。

第三个构建一个表/表来保存用户数据。

现在您已经掌握了所有数据,构建了一个将加载表单所有用户数据的网页。使用用户数据+会话数据来确定需要显示数据库中的“页面”。使用该信息拉出显示的“页面”的所有问题,并将它们构建为HTML表单以显示给用户。您的表单应该提交回自己,可以有多个按钮来控制上一个,下一个功能。如果您的页面加载时已经提交,则需要在将用户数据撤回之前存储任何值POSTED。

这就是我从头开始解决这个问题的方法。您可以将这些部分中的许多部分分解为各种对象,以帮助封装您的数据和功能。但是你的问题听起来好像你已经迷失了从哪里开始,所以希望这会帮助你巩固事情。

答案 1 :(得分:0)

如果您能够灵活地使用框架,那么可以使用Zend框架之类的东西,您可以简化表单的创建和验证的处理。

Zend Forms是zend表单控件中内置的一些功能的示例。它使得它非常容易,并且获得MVC风格框架的一些经验并不是一件坏事。

如果由于某种原因你不能使用框架我会建议编写一个自定义类来处理表单持久性,这样你就可以在几个“视图”或“页面”之间传递数据

.NET使用多视图控件非常方便:)