【问题标题】:How would I generate an HTML form based on table data from two different tables using PHP?如何使用 PHP 根据来自两个不同表的表数据生成 HTML 表单?
【发布时间】:2012-03-21 16:18:40
【问题描述】:

我正在尝试编写一个 PHP 脚本,该脚本将使用“field_definitions”表作为输入字段的源创建一个 HTML 表单,并根据“user_data”表中先前存储的结果设置每个字段的默认值。 (基于当前登录的用户......我有一个身份验证系统设置并使用会话变量运行。)

我的桌子是这样的......

users TABLE
user_id user_email       user_firstname user_lastname user_password
1       johndoe@mail.com John           Doe           password

field_definitions TABLE
field_id field_type field_length field_name field_desc                   field_section
1        text       40           color      What is your favorite color? 1

user_data TABLE
response_id user_id field_id user_response
1           1       1        Blue   

我创建了一个代码块,它从我的“field_definitions”表中返回行并将它们存储在一个数组中。我可以使用 foreach 循环根据数组中的每一行生成表单,但我不知道如何从另一个表中提取第二组信息以获得默认值。

$dbc = mysqli_connect(sqlhost, sqluser, sqlsecret, sqldb);

$field_definitions_query = "SELECT * FROM field_definitions WHERE field_section = '1'";

$field_definitions_data = mysqli_query($dbc, $field_definitions_query);

$field_definitions = array();

while ($row = mysqli_fetch_array($field_definitions_data)) {
  array_push($field_definitions, $row);
}
echo '<form enctype="multipart/form-data" method="post" action="' . $_SERVER['PHP_SELF'] . '">';

foreach ($field_definitions as $row) {
 echo '<label for="' . $row[field_name] . '">' . $row[field_desc] . ':</label>';
 echo '<input type="' . $row[field_type] . '" id="' . $row[field_name] . '" name="' . $row[field_name]. '" value="temp" /><br />';
}

echo '<input type="submit" value="Save" name="submit" /></form>';

我是否需要创建另一个表数据的第二个数组,然后以某种方式合并两者?

我的一般方法是否可行,还是有更好的方法?

我是 PHP 和一般编程的初学者,我宁愿不尝试征服任何框架;为了学习,我正在尝试用我自己的代码来实现这一点。

【问题讨论】:

  • 你真的应该删除这些公开暴露你的主机名的图像!您可以将您的 sql 作为文本放入您的帖子中
  • 你能发布你目前的代码吗?
  • 您想了解 JOIN。连接命令是 SQL 所做工作的基本部分(以及它与将所有数据存储在电子表格中的区别)。了解 JOIN,您将升级两次,并解锁大部分 SQL 真正的力量! Here 是可以帮助您入门的众多快速教程之一。提示:有些人喜欢通过谈论内连接和外连接以及左、右和直来介绍 JOIN,但作为初学者,你几乎总是会使用内连接,所以不要让其他东西混淆你。

标签: php mysql web-applications


【解决方案1】:

考虑使用 SQL JOIN 构造。在 MySQL 的情况下,它会是这样的: select t1.*, t2.user_response from field_definitions t1 left join user_data t2 using (field_id) where t2.user_id = %USER_ID% or t2.user_id is null。然后,您可以逐行将数据提取到单个数组/散列/任何内容。有关 JOIN 的更多详细信息,请参阅 SQL 手册。

简而言之。我们通过字段x 加入表t1t2。 N 是 NULL(不存在)记录。 Ljn 是 LEFT JOIN,Rjn 是 RIGHT JOIN,Ijn 是 INNER JOIN(INNER 关键字经常被省略),Fjn 是 FULL JOIN

t1.x: 1 2 3 4 5 N N

t2.x: N N N 4 5 6 7

Ljn : ^_______^----

Rjn : -----^______^

Ijn : -----^__^----

Fjn : ^___________^

您可以通过 where 子句中的t1.x IS NULLt1.x IS NOT NULL 来检查记录是否不存在。

希望它会有所帮助。

【讨论】:

  • 什么是 t1 & t2?我也是 SQL 新手。我正在使用 MySQL。
  • 只是表field_definitions和user_data表的别名;
  • 那么它是 field_definitions AS t1,还是隐含的?
  • 是的,是一样的。你实际上可以跳过关键字 AS。
  • 还有一个问题...如果他们之前从未填写过表单,因此在 user_data 表中没有任何行,我仍然可以获得构建表单的结果吗?
猜你喜欢
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多