use*_*430 5 php mysql content-management-system
我实际上是使用PHP制作CMS,并希望使用户能够创建可在其网站的注册/注册中使用的自定义表单字段(类似于SocialEngine或PHPFox)。但是,对于如何实现此目标,我真的没有一个好主意。我是否需要制作某种插件(“挂钩”)系统?我本来是想着这个,但是我不知道这是否真的是一个好方法:
CMS的管理员将获得一个表单,其中包含他们要创建的表单字段名称,字段类型(字符串,布尔值,日期等),字段类别以及是否为必填项目。
然后,这些值将被传递到名为“ custom_form_fields”的数据库表中,该表的列为:id, field_name, field_type, category, required。还存储这些字段的值;将在“用户”表中添加一列,其中存储了所有用户的数据。
ALTER TABLE users ADD the_custom_form_field_name datatype
Run Code Online (Sandbox Code Playgroud)
但是现在,我对如何在PHP中显示不同的表单字段以及如何将表单字段中的数据插入用户表感到困惑。
如果您不理解我的问题,请查看:http : //www.phpfox.com/features/custom-fields/它显示了我正在努力实现的目标。
谁能帮我这个忙吗?
谢谢
你需要放慢一点;起初,您的问题似乎是关于动态生成 HTML 表单的 js/php 代码,但后来您开始谈论数据库字段。
你的问题对我来说仍然不是 100% 清楚,但在你的情况下我会做的是从数据库设计开始,不要关注其他任何事情。
我可以看到您正在考虑更改用户表。我认为这没有必要,也不是好的设计。
只要每个用户都有一个主键,即 users.id 字段,您就可以创建一个新表来存储表单字段数据,如下所示:
CREATE TABLE users_custom_form_data(
id INT NOT NULL,
FOREIGN KEY(id) REFERENCES (users.id) ON DELETE CASCADE,
/* then store any data you need to store about a form field */
field_type ENUM("text","number","phone","email","submit","etc"),
field_default_value VARCHAR(100) /* or what you think is necessary */,
field_name VARCHAR(100),
field_id VARCHAR(50),
field_class VARCHAR(50)
/* and any others you need */
) ENGINE = InnoDB;
Run Code Online (Sandbox Code Playgroud)
由于我们将每条记录分配给一个用户 ID,因此我们可以稍后跟踪哪些用户拥有哪些自定义表单字段。
我希望这足以让您开始。
既然您澄清了您的问题,我认为我们现在看到的是一个表,其中包含拥有该记录的用户 ID 的字段,以及自定义属性表 id 的字段以引用其自定义字段。它看起来像这样:
CREATE TABLE tbl_user_attributes(
user_id INT NOT NULL,
FOREIGN KEY(user_id) REFERENCES(tbl_users.id) ON DELETE CASCADE,
attribute_id INT NOT NULL,
FOREIGN KEY(attribute_id) REFERENCES(tbl_attributes.id) ON DELETE CASCADE
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
然后属性 ID 将告诉您用户添加到其 CMS 的字段类型。属性表将由您预先填充并由您定义(使用默认字段)。它可能看起来像这样:
CREATE TABLE tbl_attributes(
id INT NOT NULL AUTO_INCREMENT,
text_label VARCHAR(100),
type ENUM("TextArea","CheckGroup","DropDown"),
data BLOB
) ENGINE=InnoDB;
Run Code Online (Sandbox Code Playgroud)
因此,一旦您使用选项填充了该表,用户应该能够添加任何类型的字段(在默认字段之上)并为其命名,即“电影”将存储在名为“text_label”的字段中它的类型是“TextArea”。然后,tbl_attributes.id 将与创建它的用户的用户 ID 一起插入到 tbl_user_attributes 中。然后你的程序将通过读取数据库来完成剩下的工作。如果您想在其中存储用户数据,请将其存储在“数据”字段中(如果它总是文本,您可以使用文本类型而不是 BLOB,但使用 BLOB 不是问题,因为您可以计算出您想要的内容)需要处理通过“type”字段判断的数据,即 TextArea 意味着文本存储在 BLOB 中。
希望这可以帮助。