将动态表单数据插入数据库。 PHP

时间:2012-04-07 13:32:06

标签: php mysql codeigniter

我有问题,我正在创建相当复杂的表单。表单的某些部分是动态创建的。假设您从下拉列表中选择某个选项,则会向表单中注入额外的字段。

哪种方法最适合存储数据?我想在不使用多个表的情况下尝试离开。因为我使整个应用程序变得如此复杂。

我在考虑在模型中将所有可能的值初始化为“0”。然后用post数据覆盖它们,并将整个数组存储在表中。有人发现这种方法存在任何问题吗?

2 个答案:

答案 0 :(得分:2)

在模型中使用多个表的必要性并不取决于您需要存储多少数据(多少个字段) - 这取决于模型的逻辑。因此,如果有合理的理由在模型中使用关系(f.e. 1:n,n:m),那就去做吧!

如果您不遵循创建模型的基本规则,将尝试f.e.将所有数据存储在一个表中,虽然它应该分成许多表,但你很快就会后悔。将来代码中的任何更改都会花费您更多的工作,并且在某些时候您将无法理解您自己的代码,并且必须再次编写它,这次遵循规则;)

如果开发合适的模型需要花费大量工作(最近我花了两周时间开发模型),请不要担心 - 这真的很有意义,因为之后你可以更快更有效地工作一个完善的,有计划的模型。

另一方面,有些情况下,在一个表中存储100多个字段是有意义的 - 这取决于逻辑。因此,如果您提供一些示例,也许可以说您是否应该使用一个或多个表。

答案 1 :(得分:0)

很大程度上取决于您以后要对表单数据执行的操作以及频率。

序列化单字段

在最简单的用例中,您可以对所有数据进行base64_encode(序列化($ data))并将其放入数据库中的单个列中。

  • 简单
  • 快速插入
  • 易于添加/更改输入字段
  • 困难和缓慢搜索值(特别是在规模上)
  • 如果您需要对数据进行系统更改,则难以以编程方式进行更新
  • 如果您总是将所有数据从数据库中提取出来并且永远不会通过序列化字符串中的数据缩小您的SQL查询,那就太完美了。

元数据表

添加第二个元数据表可以提供更多的灵活性。第二个表将具有对主表单提交的外键引用,元数据名称和值。这允许您可以轻松存储,搜索和操作的非常灵活的多对一关系。你可以在wordpress中看到这个例子。

  • 2张表,但仍然很简单
  • 易于添加/更改输入字段
  • 通过sql搜索更好。
  • 更容易系统地更新
  • 如果您不总是获取所有数据或必须通过表单数据缩小搜索范围
  • ,那就太完美了

另一个方向 - 如果您发现自己处理了大量此类数据,也可以考虑查看基于文档的数据库,如MongoDB或CouchDB。