我正在尝试创建一个基本的表单生成器。因此,用户可以在某种 CMS 系统中一起单击 HTML 表单。我仍在为此研究数据库设计,并且在涉及复选框时我有一个问题。
我的数据库设计如下所示:
字段
pk_field_id | field_type | field_name | default_value
1 | textfield | text1 | Some default value
2 | textfield | text2 | NULL
3 | radio | radio1 | NULL
4 | checkbox | check1 | NULL
所以这基本上就是我保存所选字段的方式。当我读到这个表时,我可以通过一个switch
语句并读取field_type
值,所以我知道要呈现什么样的字段。
但这还不是全部。我还有一个表,其中包含像单选按钮这样的分组元素可以具有的“值”。
字段值:
fk_field_id | label | value
3 | Radio 1 | radio1
3 | Radio 2 | radio2
4 | Check 1 | check1
4 | Check 2 | check2
所以现在,当我阅读表格时,fields
我可以JOIN
看到表格fieldvalues
,这样我就知道哪些选项属于 ,哪些radio
属于checkbox
. 这一切似乎工作正常。
现在是棘手的部分。生成表单后,我还需要一个地方来保存输入的值。所以我Form Engine
会自动为此创建一个额外的表。field_name
它为表中的每个创建一个列fields
。所以在这种情况下,动态创建的表如下所示:
我的表格
pk_form_id | text1 | text2 | radio1 | check1 | language_id
现在,当用户在生成的 HTML 表单中输入数据时,我可以轻松保存所有输入的数据。因为文本字段只需要一列。分组的单选按钮最终只提交一个值。但是,当检查两个或多个复选框时,一组复选框当然可以提交多个值。
现在我的问题是,我怎样才能将它保存到数据库中?我认为将多个值存储在一个列中并由某个字符分隔不是一个好主意。因为这也使得执行搜索变得困难。
myform
我最初认为这是一个好方法,因为我可以通过简单的SELECT ... WHERE
查询轻松地从表中提取一行。
所以无论如何,我不确定这是否是一个好的设置......我如何处理复选框可以提交的多个值?
有什么想法吗?