将动态表单域存储在数据库中

时间:2010-07-20 13:45:32

标签: php database-design forms dynamic

我已经阅读了这个(或至少接近这个)主题的其他答案,但我无法清楚地了解它,所以我再次寻求帮助。

我有一个复杂的动态HTML表单,我想使用PHP提交到数据库。表单被拆分为多个选项卡,在每个选项卡中,我都会获得触发表单其他部分的复选框。示例:在我的表单中的某个点,我有一个复选框组,其中包含选项:“hotel”和“restaurant”。如果我查看酒店,我会看到表格的另一部分,特定于“酒店”。 “餐厅”也是一样。所以它在这里非常动态,我不知道哪个是在数据库中存储每个表单字段的最佳方法。因为它可以包含15个字段或20个字段,具体取决于选择。任何一个例子都会受到赞赏,因为我不是那么先进的数据库设计。

谢谢!

2 个答案:

答案 0 :(得分:2)

  

所以这里非常有活力,但事实并非如此   知道哪种方法最好   用于存储每个表单域   数据库中。

如果我在这里误解了你,我很抱歉,但我相信你应该根据数据设计数据库而不是表格。如果不知道您的情况的具体细节,很难评论,所以这里有一个例子:

如果您通常将表单中的所有数据转储到单个表中,但是因为有时这将涉及提交5个值而其他时间这将涉及提交10,因此您不确定您的表应该有多少列,然后我认为问题出在数据库设计中。

确定哪些数据依赖于其他数据。例如,您提到检查“酒店”可能会打开更多特定于该选项的字段。让我们假设这涉及“套房”,“床型”等等。然后你应该有3个表,一个注册表(假设用户使用表格来购买这些服务),酒店表和registration_hotel表。注册表将记录特定于注册的一些详细信息,例如客户的姓名和唯一的ID号。酒店的桌子仅包含酒店特有的信息,例如有多少间客房设有连接浴室。 registration_hotel表将保存该酒店注册的详细信息。您可能需要bool类型的列来记录用户是否请求“en-suite”。

提交表单时,请检查用户使用if(isset($_POST['hotel']) && !empty($_POST['hotel']))输入的内容。然后只有在条件为真的情况下才将内容发送到registration_hotel表。

如果此设计导致对数据库进行过多单独调用,您可能需要查看transactions,这将有助于您管理这些调用的速度和安全性。

如果您可以发布一些您不知道该怎么做的具体示例,那将非常有用。

答案 1 :(得分:0)

您没有指定如何管理此动态表单。你能编辑它的PHP / HTML源吗?如果您可以标记不同的变量,例如hotel[]restaurant[]等,那就太棒了。

如果您提交的表单足够清晰(我的意思是语义正确),您可以将整个提交的表单序列化。

注意:此方法仅在您不需要搜索数据库中的特定项目时才有效。

编辑:也许我误解了你的问题。

您可以像这样创建一个'metadata'表:

form_id  |  option_name  | option_value
---------------------------------------
1        |  hotel        | true
1        |  restaurant   | false