少し減速する必要があります。最初は、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;
各レコードをユーザー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;
したがって、そのテーブルにオプションを入力すると、ユーザーはこれらのタイプのフィールドのいずれかを(デフォルトのフィールドの上に)追加して名前を付けることができるはずです。つまり、「Movies」は「text_label」という名前のフィールドに保存されます。タイプは「TextArea」になります。次に、そのtbl_attributes.idは、それを作成したユーザーのユーザーIDを使用してtbl_user_attributesに挿入されます。次に、データベースを読み取ることにより、プログラムが残りの作業を行います。その中にユーザーデータを保存する場合は、「データ」フィールドに保存します(常にテキストの場合は、BLOBの代わりにTEXTタイプを使用できますが、BLOBを使用しても問題はありません。 'type'フィールドで判断するデータを処理する必要があります。つまり、TextAreaは、テキストがBLOBに格納されたことを意味します。
お役に立てれば。