1

这将是一个漫长的阅读,所以请多多包涵。我很擅长 PHP,但我在数据库设计方面的知识很差。我正在研究它,因为我意识到在使用应用程序时掌握设计数据库的命令是最重要的事情,如果你掌握了它,事情会变得如此简单。这个线程的开始也是因为我对数据库交互的了解不足。

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

表格结构

列数和行数因一种形式而异,但它们或多或少遵循如上所示的类似结构。

我计划实现的目标

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

路障

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

我的想法

  • 表单的列(参数、满足要求、观察、状态、备注)成为MySql表的字段。

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

  • 使用数组来命名表单中使用的元素。例如,ambiance[requirement], ambiance[observation], ambiance[status], ambiance[remarks] 用于第一行的元素,room[requirement], room[observation], room[status], room[remarks] 用于第一行的元素第二行以此类推。然后插入可以通过使用在一行中完成INSERT INTO tablename (implode(',', array_keys($ambiance))) VALUES (implode(',', $ambiance))

这不是关于什么

  • 要求提供/邮政编码。

  • Give me teh codez不是我的经营方式。我只是在寻求有关如何执行该任务的说明。

这是关于什么的

  • 征求建议。

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

  • 询问是否有其他方法。

4

1 回答 1

1

我做过类似但不完全相同的事情。我使用了这两个表:

  • 形式
    • ID
    • 名称(例如反馈、评论、调查)

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

** 查看数据库表的架构以获得更多想法。

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

  • 表单提交
    • ID
    • 日期

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

有几个问题。我会记下几点:

  • UI 需要根据数据类型而有所不同(整数/数字的小 10 个字符输入,布尔复选框,文本的文本区域)
  • 不知道如何处理列表框。也许您需要另一张桌子
  • 您不能正确使用索引,因为所有内容都存储在通用文本字段中
  • 客户端验证是可能的,但很困难
  • The tables need to be very generic. Based on my experience this requires extra effort to ensure that x works with all y.
于 2012-11-01T09:26:33.700 回答