繁体   English   中英

将表结构化的表单数据存储到数据库中-正确的方法?

[英]Storing table structured form data into database - The proper way to do it?

这将是一本长篇小说,所以请多多包涵。 我非常擅长PHP,但是我在数据库设计方面的知识很差。 我正在研究它,因为我已经意识到在设计应用程序时,掌握设计数据库的命令是最重要的事情,如果掌握了它,事情将变得如此容易。 之所以创建该线程,还因为我对数据库交互的了解不足。

我基本上有大约40种形式,其结构类似于下面给出的图像:

表格结构

列和行的数量从一种形式到另一种形式都不同,但是它们或多或少遵循如上所述的相似结构。

我打算实现的目标

  • 使用单个/相同的php页面来处理所有40种形式(即,将数据插入数据库)。 换句话说,我打算对所有表单使用相同的<form action="process.php">
  • 避免硬编码; 保持process.php的代码尽可能动态。

路障

  • 每种形式的参数数量各不相同,因此我需要找出一种方法来找出每种形式中存在的行数。
  • 发现很难决定如何命名表单中使用的元素(单选按钮,复选框,下拉列表,文本区域,文本框等)。
  • 我在尝试弄清楚如何进行插入时遇到麻烦。 一次插入一行似乎很合适,但是我将如何实现呢? 例如,如果使用循环,则在第一次迭代中应插入与Ambiance相关的数据。 在第二个循环中,应插入与TV Room有关的数据,依此类推。 问题是如何相应地编码?

我的想法

  • 形式的列(参数,符合要求,观察,状态,备注)成为MySql表的字段。

  • 然后使用循环在表中一次插入一行。

  • 使用数组来命名表单中使用的元素。 例如,第一行的元素的ambiance [要求],ambiance [观察],ambiance [状态],ambiance [备注]和该房间的room [要求],room [observation],room [status],room [remark]第二排,依此类推。 然后可以通过使用INSERT INTO tablename (implode(',', array_keys($ambiance))) VALUES (implode(',', $ambiance))在一行中完成插入

这不是什么

  • 要求提供/邮政编码。

  • Give me teh codez不是我的操作方式。 我只是在寻找有关如何完成任务的说明。

这是关于什么

  • 寻求建议。

  • 确定我是否朝着正确的方向前进。

  • 询问是否有其他方法。

我做了类似但不完全一样的事情。 我使用了以下两个表:

  • 形成
    • ID
    • 名称(例如反馈,评论,调查)

  • FormFields **
    • ID
    • 表格ID
    • 标题(例如姓名,公司,地址)
    • 子标题(例如,输入您的全名)
    • 需要
    • 数据类型(例如,整数,数字,字符串,电子邮件)
    • 最长长度

**查看数据库表的架构以获取更多建议。

在您的情况下,您需要另一对表:

  • 表格提交
    • ID
    • 日期

  • 表单提交值
    • ID
    • 表单提交ID
    • FormFieldID(可用于推断FormID,也可以在FormSubmission表中添加FormID)
    • 值(一个足以容纳任何值的字段)

有几个收获。 我记下一些:

  • 用户界面需要根据数据类型而有所不同(整数/数字为10个小字符输入,布尔值为复选框,文本为textarea)
  • 不确定如何处理列表框。 也许您需要另一张桌子
  • 您不能正确使用索引,因为所有内容都存储在通用文本字段中
  • 客户端验证是可能的,但是很困难
  • 这些表必须非常通用。 根据我的经验,这需要额外的精力来确保x与所有y一起使用

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM