2012-07-20 66 views
3

我正在用PHP創建一個CMS,就像練習一樣,並希望給用戶創建可在其網站註冊/註冊時使用的自定義表單域的功能(類似於SocialEngine或PHPFox)。但是,我真的不知道我將如何完成這一任務。我需要製作某種插件(「掛鉤」)系統嗎?我原本有這樣的想法,但我不知道這是否是一個很好的選擇:PHP/MySQL - 允許用戶爲CMS創建自定義表單域

CMS的管理員將獲得一個窗體,其中包含要創建的窗體字段名稱的選項,字段的類型(字符串,布爾值,日期等),字段的類別以及它是否爲必填字段。

然後將這些值傳遞到一個名爲「custom_form_fields」的數據庫表中,其列爲:id, field_name, field_type, category, required。 也用於存儲這些字段的值;一列將被添加到存儲所有用戶數據的'用戶'表中。

ALTER TABLE users ADD the_custom_form_field_name datatype 

但現在我很困惑,我怎麼會顯示PHP不同的表單字段和我將如何從插入表單字段數據到用戶的表。

如果你不明白我的問題,請看:http://www.phpfox.com/features/custom-fields/它顯示了我正在努力實現的目標。

任何人都可以幫我解決這個問題嗎?

謝謝

回答

3

你需要放慢一點;起初,您的問題似乎是關於動態生成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做。

希望這有助於。

+0

謝謝你的提示,但我其實是問我怎麼能允許我正在爲他們的網站註冊表單創建自定義表單域的CMS的管理員,就像SocialEngine或PHPFox一樣。http://www.phpfox.com/features/custom-fields/顯示我正在努力實現的目標。 – user1302430 2012-07-20 23:45:55

+0

你的意思是基本信息/ Interestes/+一個自定義的嗎? – Ozzy 2012-07-21 22:36:15

+0

是的,就像那樣。 – user1302430 2012-07-22 20:18:42