PHP 带有用户设置选项的用户仪表板

PHP user dasboard with user set options

我正在尝试构建一个包含用户设置选项的仪表板,例如用户配置文件 private/public 并添加 "Subjects" 以及保留在数据库中的自己的变量。

我已经为用户准备了 table。一切正常。

具有这些属性:

 - user_id
 - user_name
 - user_email
 - user_pass

如果我想让系统用户可以将文本(例如他们最喜欢的颜色)添加到数据库中,而无需为每个注册到系统的新用户创建新的table,我该如何继续。

例如:

CREATE TABLE IF NOT EXISTS user (
user_id SERIAL, 
user_name NOT NULL VARCHAR(32), 
user_email VARCHAR(254), 
user_pass VARCHAR(128) NOT NULL
);

SERIALBIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT 的缩写,您不需要在此处插入值,MySQL 会自动处理。

Official documentation for MySQL 5.5

设置此 table 后,您可以插入行:

INSERT INTO user (user_name, user_email, user_pass) 
VALUES ('some name', 'email@domain.com', 'pass');

听起来像你在问如何创建一个table结构,用户可以在其中定义自己的模式。例如,如果用户正在定义他们自己的 key/value 对信息,那么每个用户都会有所不同。

有几种方法可以采用...

  1. 首先,请仔细考虑您正在做的事情。用户体验真的需要这个吗?或者一些自由格式的文本字段就足够了吗?系统中还有什么需要单独跟踪 key/value 对?

  2. 您可以使用 a schema-less database,例如任何给定记录都可以具有任何可序列化结构的文档存储。

  3. 在关系数据库中,这通常归结为简单地存储 key/value 对。像这样:


Users
----------
id (PK)
username
password
email

UserValues
----------
id (PK)
userid (FK to Users)
key
value

有了这个,任何给定的用户都可以存储任意数量的 key/value 对。如果需要,您可以继续扩展此结构以添加更多用户数据结构。这样做的一个显着缺点是一切都变成 "stringly typed" 这意味着如果值 应该是 数字那么您的代码需要足够健壮以验证该值在任何地方使用,因为在支持数据中,这里的所有内容都将是字符串。