你需要放慢一點;起初,您的問題似乎是關於動態生成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;
因爲我們分配每個記錄一個USER 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;
然後屬性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;
所以一旦你已經填充選項表,用戶應該能夠添加任何這些類型的字段(在默認域的頂部),並給它一個名稱即「電影」將被存儲在名爲「text_label」的字段中,並且將是「TextArea」類型。然後tbl_attributes.id將被插入到tbl_user_attributes中,創建它的用戶的用戶ID。然後你的程序通過閱讀數據庫來完成剩下的工作。如果你想存儲用戶數據,把它存儲在'數據'字段(如果它總是文本,你可以使用TEXT類型而不是BLOB,但使用BLOB不是問題,因爲你可以計算出你需要由「類型」字段即文本區域判斷的數據是指文本被存儲在BLOB做。
希望這有助於。
謝謝你的提示,但我其實是問我怎麼能允許我正在爲他們的網站註冊表單創建自定義表單域的CMS的管理員,就像SocialEngine或PHPFox一樣。http://www.phpfox.com/features/custom-fields/顯示我正在努力實現的目標。 – user1302430 2012-07-20 23:45:55
你的意思是基本信息/ Interestes/+一個自定義的嗎? – Ozzy 2012-07-21 22:36:15
是的,就像那樣。 – user1302430 2012-07-22 20:18:42