【发布时间】:2011-07-21 20:57:24
【问题描述】:
我有一个带有两个表的 mysql 数据库:
table1 (id, name, emailid)
table2 (id, email)
-
emailid是与table2.id的关系
我正在尝试制作一个 html 表单,其中列出了 table1 的内容,并带有一个下拉框,供用户选择电子邮件字段。电子邮件字段由来自table2 的<options> 填充。
我的问题是:如何检查已为 emailid 选择的值,并在表单加载 selected="selected" 时使其成为下拉框中已选择的项目?
我已经找到了一种可行的解决方案,但我认为这不是正确的方法,并且正在寻找最佳实践方法。
我目前的做法仅适用于从table1 提取的一项,但如果超过 1 项则不行。
到目前为止,这是我的代码:
这是我获取数据以制作表单的地方:
<?php
$sql = "SELECT table1.id as table1id, table1.name, table2.id as table2id
FROM table1
INNER JOIN table2 ON table1.emailid = table2.id
WHERE table1.id = {$id}";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);
$items1 = array('table1id' => $row['table1id']
'name' => $row['table1.name']
'table2id' => $row['table2id']);
$sql = "SELECT id, email FROM table2";
$result = mysqli_query($link, $sql);
$row = mysqli_fetch_array($result);
while ($row = mysqli_fetch_array($result)) {
$items2[] = array('id' => $row['id'],
'email' => $row['email'],
'selected' => ($row['id'] == $items1['table2id']) ? ' selected="selected" ' : '');
}
?>
这是我的 HTML:
<tr>
<td><?php echo $items1['name']; ?></td>
<td><input type="hidden" name="table1id" value="<?php echo $items1['table1id']; ?>" />
<?php echo $items1['table1id']; ?></td>
<td>
<select name="email">
<?php foreach ($items2 as $item2): ?>
<option value="<?php echo $item2['id']; ?>"<?php echo $item2['selected']; ?>>
<?php echo $item2['email']; ?></option>
<?php endforeach; ?>
</select>
</td>
</tr>
这是表单的更新方式:
<?php
$id = mysql_real_escape_string($_POST['table1id']);
$email = mysql_real_escape_string($_POST['email']);
$sql = "UPDATE table1 SET emailid = {$email} WHERE id = {$id}";
?>
【问题讨论】:
-
是table1和table2s的
id主键吗? -
是的,table1 PK 是 id,table2 PK 是 id。 table1.table2id 填充了 table2.id 以便我可以检测到它是什么电子邮件
-
你想要一个查询吗?
-
我已经编辑了 OP 并放入了我当前的代码。如您所见,它将起作用。但是,它只适用于 table1 中的一条记录,我不确定这是否是正确的方法。
-
更新了我的答案以反映您的代码。