在PHP

时间:2016-05-11 06:58:21

标签: php mysql forms dynamic

请原谅我,如果我看起来很傻,因为我是PHP的新手并从中学习东西。

我会尽可能清楚地解释我的内容

目前,我有一个针对不同级别用户的个人资料页面,例如

  

管理员,级别1,级别2,级别3

所有4个个人资料页面的字段都不相同。

  

对于等级1,我将显示姓名,年龄,图片

  

对于等级2,我将显示姓名,图片,位置,国家

  

Level3的其他一些

以上我已经完成了它并没有任何问题。

现在我需要的是让管理员动态选择表单字段。比如,管理员应该有一个设置类型的页面,我将列出级别名称下不同级别用户的所有需要​​的字段,附近有一个复选框(我已完成)。

现在的困惑是管理员可以检查需要哪些字段,这将反映在该用户的该个人资料页面中,我对如何继续感到困惑,因为我无法知道如何继续。此外,他应该能够添加额外的字段(仅允许文本框),就像他将单击添加并输入标签名称一样。这个新添加的文本框应该像在db中存储值并检索一样。

希望我能解释清楚。如果你不清楚任何东西,请原谅我并发表评论,我会进一步解释。

我需要帮助来获得关于如何处理我的要求的想法或结构。

1 个答案:

答案 0 :(得分:1)

您可以在数据库中创建一个表,输入类型的列,名称标记的列以及将使用此字段的权限列。

表(input_tb)将如下所示:

input_id | input_type | name_tag |   label  |  user_type
---------+------------+----------+----------+-------------
    1    |    text    |   name   |   Name   |     1 /* ASSUMING 1 IS FOR LEVEL 1 PROFILE */
    2    |   number   |   age    |    Age   |     1
    3    |    file    |  picture |  Picture |     1

假设您的user_tb看起来像这样:

user_id | user_type
--------+-----------
   1    |     1 /* MEANS THAT USER 1 HAS A LEVEL 1 PROFILE */

因此,当用户访问该表单时,您将获取input_tb中的相应行(假设您将user_type存储在下面的会话中):

$stmt = $con->prepare("SELECT input_id, input_type, name_tag, label FROM input_tb WHERE user_type = ?");
$stmt->bind_param("i", $_SESSION["user_type"]);
$stmt->execute();
$stmt->bind_result($inputid, $inputtype, $nametag, $label);
while($stmt->fetch()){
    echo $label.': <input type="'$inputtype..'" name="'.$nametag.'"><br>';
}
$stmt->close();

然后,信息将存储在另一个表中:

info_tb的示例,在此处使用单个示例用户:

info_id | user_id | input_id |   input_data 
--------+---------+----------+-----------------
   1    |    1    |    1     |    Richard      /* User 1's Name */
   2    |    1    |    2     |       18        /* User 1's Age */
   3    |    1    |    3     | profile_pic.png /* User 1's Picture */

提醒:

  • 当输入字段为textarea
  • 时,您还可以考虑为代码设置条件
  • 当输入字段是文件类型时,输入条件。在将相应的文件名插入数据库之前,必须先进行上传过程