如何使用PHP为数据库创建动态字段

时间:2014-09-13 16:19:35

标签: php dynamic-forms

我有一个我写的多客户端级PHP应用程序。这个应用程序有许多数据库对象,就像任何其他PHP应用程序但由于它是一个多客户端级别的应用程序,每次我们登上新客户端时,我都有不同的客户端要求。有几个共同对象(也称为帐户)承载大部分客户信息。但最重要的是,每次我想向数据库添加新客户端时,这个新客户端都需要添加帐户数据库中的新列,因为它们将具有一些唯一数据。有标准的必需数据(即。account_name,status ......),但有些数据是唯一的,并根据客户业务类型标记为不同。

目前,我需要做的是满足要求

  1. 更改帐户表并手动添加此新列。
  2. 编辑PHP脚本,我在其中显示帐户信息并显示字段的内容,如此

    如果(空($行[' new_filed']!)) echo'单个客户所需字段:' 。 $行[' new_filed'];

  3. 如果该字段是可编辑的,那么我必须在编辑/添加表单中添加规则,以便在保存之前进行数据验证检查。

  4. 我正在尝试构建一个可以自动为我做的前端工具。这样我就可以拥有一个管理员"而不是一个程序员"转到前端工具并添加一个新字段,该字段将显示在所选页面的选定部分中。

    从前端工具我希望能够添加一个名为" brand_c"的自定义字段。并使其成为varchar(100)类型。然后在名为" account_info.php"的页面上在名为"其他"使用标签" Brand"显示此字段只有当客户=' XYZ'所以,如果数据属于客户' ABC'不显示数据,因为此列仅适用于' XYZ'。

    我知道这是一个广泛的问题,但我正在寻找的是如何构建这样的东西的任何帮助(从这开始?)。这是大多数大型CRM所做的事情,即。 Microsoft CRM Dynamic,Salesforce.com ......)拥有它。我该如何设计这样的东西?

    谢谢

2 个答案:

答案 0 :(得分:1)

您需要做的第一步是正确设计表,因此基本上您需要知道如何设计表以支持动态字段,并且该字段将能够验证/处理此类数据。

我对我的应用程序(在应用程序的管理员中可以配置UI字段的动态应用程序)所做的是将配置保存在数据库中,每次有事务时,页面将获取所选票据的配置和它将生成必填字段。并且在提交表单时,应用程序将再次获取配置并根据client_field中的设置进行验证

帐户表*包含帐户

等信息
  • account_id //此表的主键
  • ACCOUNT_NAME
  • ACCOUNT_STATUS

客户表

  • client_id //此表的主键
  • account_id //外键:帐户表
  • client_name
  • client_status

您可以根据需要为客户端添加不同的列,但请确保不要在此表中添加所需的UI字段,而是创建如下表格

client_field表//将包含可以定义/配置的表

  • field_id //此表的主键
  • client_id //外键:客户表
  • field_name //将出现在用户界面中的字段名称
  • field_title //在字段上鼠标悬停时显示
  • field_datatype //这可以是文本,整数,日期,布尔值等
  • field_type //字段输入类型:可以是文本框,日期选择器,下拉列表等
  • field_required //指示是否需要该字段的标志
  • field_display //指示字段是否将在用户界面中显示/隐藏的标志
  • field_defaultvalue //页面呈现时设置的默认值
  • field_minvalue //字段将接受的最小值:仅当dataytpe为integer / double时才可接受
  • field_maxvalue //与field_minvalue描述相同,而不是检查最大整数/双精度值
  • field_maxlength //字段的最大长度
  • field_order //界面中字段的顺序
  • 字段状态//激活或停用字段

您可以添加其他列,但需要确保它不流畅且不冗余。

让我们说,你有field_type下拉列表,你需要创建另一个表,让我们调用它

field_dropdown

  • id //此表的主键
  • field_id //来自client_field的外键
  • dropdown_value //选中时将在下拉列表中使用的值
  • dropdown_description //将出现在下拉列表中的说明
  • dropdown_order //项目的顺序
  • dropdown_status //标记此记录是处于活动/非活动状态

如果是这种情况,您可能想知道如何保存数据,数据必须保存在另一个表中,我们可以调用它

client_information

  • id //此表的主键:
  • client_id //来自客户端表的外键
  • field_id //来自client_table的外键。
  • value //来自用户界面的值

这样,当您保存新客户端时,client_field中的每个字段都会在client_information表中添加一个新行以及用户插入的值

设计此类应用程序时的挑战是:

  • 很难开发(很多条件和映射,需要很多时间)
  • 您需要正确配置字段才能使其正常工作
  • 适当的系统设计,架构和流程否则会破坏系统的动态性
  • 您将需要适当的文档,以便了解哪个是哪个。
  • 除了您可以通过将流程保存到数据库中来改变自己的流程外,所有客户端的流程都是线性的

此设计的 PROS 是:

  • 一旦完成,您不再需要开发人员添加其他代码,除了软件增强功能,例如发布时不支持的功能。
  • 应用程序将是动态的,并且通过管理模块
  • 添加任何字段将变得容易和可维护

我不是说这是必须做的,但这是我关于如何开发需要动态数据字段的应用程序的建议,而且从我开发的应用程序的经验到目前为止,只要设计得很好,它确实运行良好并且发展了。

答案 1 :(得分:0)

您可以创建一个新表,例如extra_dataaccount_id和{data_label,而不是将其他字段作为新列添加到您的帐户表中{1}}。这样,您可以将每个帐户的额外数据保存到该表中,并在account_info.php中获取。