自定义动态生成表单背后的设计是什么?
想实现类似drupal的CCK。
在控制面板中,表单的所有者设计表单中应包含哪些字段以及表单字段应以何种顺序排列,以及字段的属性,例如“必填:是/否”
表单设计完成后,最终用户填写并提交。
目前我能够让用户创建自定义表单,问题在于表单内容的存储和检索。
通常,当一个人编写一个表单时,谁的数据存储在数据库中,将表单数据输入数据库所需的代码也会被编写。当表单几乎每次都随着不同的字段而变化时,如何编写这段代码?
基本上,我需要了解允许存储和检索自定义表单的数据库设计,而不管字段的数量或类型。
我不想为每个表单提交都有一个新表,也不想为每个表单手动编写代码。
这些是我需要的主要字段类型
- 文本框
- 选择列表
- 单选按钮
- 清单
- 日期字段
- 文本区
下面是我想出的数据库设计
表格1
id、formid、type、position、name、value、select(foreign)、multiple
id:该记录的唯一 ID,自动
formid:唯一的表单id,特定表单中的所有字段将共享相同的formid
类型:它可以是文本框、选择列表、收音机....
位置:字段是第 1 个、第 2 个还是第 5 个?
name:字段的唯一名称
value:如果是文本框,这里输入默认值。如果字段类型不需要值,则它保持为空。
select(foreign):如果是选择列表框,那么会出现外来的idnumber。
多个:如果您想允许在该列表框中进行多项选择,则该值将为 1 否则将为空
table2 id,选择,值
所以,如果你想要一个选择列表框字段,在table1中,你的类型为selectbox,你将在table2中获得与“select”相关的外键值。
如果要文本区,输入table1就是文本区,如果需要默认值,输入,否则为null
table1 没有所有属性的列表,但你明白了。根据您想要的字段类型,确定您需要填写的属性。如果该属性需要存储额外的数据,例如选择列表框,则简单地做一个关系,就像在 table2 中所做的那样
为了呈现表单,系统解释数据库中的数据并相应地创建字段。
到目前为止一切都很好,但是,当字段总是在变化时,如何将数据存储在数据库中?
存储此类数据需要什么样的数据库设计?
以上是动态生成表单的正确方法吗?