如何使用另一个 MySQL 表中的现有数据填充预先选择的下拉字段?
Posted
技术标签:
【中文标题】如何使用另一个 MySQL 表中的现有数据填充预先选择的下拉字段?【英文标题】:How to populate dropdown field pre-selected with the existing data from another MySQL table? 【发布时间】:2018-03-24 02:13:12 【问题描述】:在我的数据库中,我有 2 个表:
为了插入数据,我有一个表单,它从表formulation
中填充下拉选项。这是配方下拉列表的插入表单的样子:
<?php
$formulation = '';
$query = "SELECT * FROM formulation";
$result = mysqli_query($connect, $query);
while ($row = mysqli_fetch_array($result))
$formulation .= '<option value="' . $row["formulationID"] . '">' . $row["formulation_name"] . '</option>';
?>
<select>
<option value="">Select formulation</option>
<?php echo $formulation; ?>
</select>
现在我正在处理“更新”表单。但我的问题是如何使用formulation
表中的数据(如插入表单)填充“公式”字段下拉列表,但使用来自@987654330 的name
的现有formulation
值预先选择@ 桌子?像下面这张图片:
我对如何构建表单有疑问。我应该如何处理这个表格?
<?php
$output = array('data' => array());
$sql = "SELECT * FROM items";
$query = $connect->query($sql);
while ($row = $query->fetch_assoc())
$output['data'][] = array(
$row['name'],
);
echo json_encode($output);
?>
<form action=" " method="POST">
<div>
<label>Name</label>
<input type="text"><br>
<label>Formulation</label>
<select >
<!--What should be the codes here? -->
</select>
</div>
<button type = "submit">Save changes</button>
</form>
提前感谢您的建议。
【问题讨论】:
总体思路是更新特定项目?那么更新操作实际上更新了 items 表? 是的,你是对的。 @Solmyr 【参考方案1】:注意:我不是mysqli
的用户,所以可能会有一些错误,但你会明白的。这不会解决更新部分,只是填充部分
由于您正在编辑某个项目,我假设您有一些东西可以获取该项目的itemID
。
<?php
$sql = "SELECT * FROM items WHERE itemID = ?";
$query = $connect->prepare($sql);
$query->bind_param("s", $yourItemID);
$query->execute();
$result = $query->fetch_assoc();
$itemName = $result['name'];
$itemFormulation = $result['formulation_fk'];
//now you have the name and the formulation of that certain item
?>
<form action=" " method="POST">
<div>
<label>Name</label>
<input type="text" value="<?php echo $itemName; ?>"><br>
<label>Formulation</label>
<select >
<?php
$query = "SELECT * FROM formulation";
$result = mysqli_query($connect, $query);
while ($row = mysqli_fetch_array($result))
?>
<option value="<?php echo $row['formulationID']; ?>" <?php echo ($row['formulationID'] == $itemFormulation) ? 'selected' : ''; ?>>
<?php echo $row['formulation_name']; ?>
</option>
<?php
?>
</select>
</div>
<button type = "submit">Save changes</button>
</form>
我修改了代码以更好地适应问题,可能有错别字,请评论澄清
【讨论】:
感谢您的建议。我正在研究它以适应我现有的系统。之后我一定会告诉你的。 :) 我不确定我使用的功能,所以在需要时替换它们。【参考方案2】:如果我理解您的问题...您必须将您的结果放入字符串中。例如:
<?php
$output = array('data' => array());
$sql = "SELECT * FROM items";
$query = $connect->query($sql);
$option = '';
while ($row = $query->fetch_assoc())
$name=$row['name'],
$option.='<option value="$name">$name</option>'
echo json_encode($output);
?>
<form action=" " method="POST">
<div>
<label>Name</label>
<input type="text"><br>
<label>Formulation</label>
<select >
<?=$option?>
</select>
</div>
<button type = "submit">Save changes</button>
</form>
希望能帮到你
【讨论】:
这怎么知道某个物品有什么样的配方?据我所知,您在select
中嵌入了项目名称而不是配方名称
我所有的网页都使用这种方法。元素名称可以替换为另一个元素。【参考方案3】:
这应该可以解决问题:
<?php
$itemsSql = "SELECT * FROM items WHERE itemId = 5";
$itemQuery = $connect->query($sql);
$item = $itemQuery->fetch_assoc();
$formulationsSql = "SELECT * FROM formulation";
$formulationsQuery = $connect->query($sql);
$formulations = $itemQuery->fetch_assoc();
?>
<form action="updateItem" method="POST">
<div>
<label>Item Name</label>
<input type="text" value="<?= $item[0]['name']; ?>"><br>
<label>Formulation</label>
<select>
<?php foreach($formulations as $formulation)
echo '<option value="'. $formulation['formulationId'].'">' .
$formulation['formulation_name'] . '</option>';
?>
</select>
</div>
<button type = "submit">Save changes</button>
</form>
【讨论】:
以上是关于如何使用另一个 MySQL 表中的现有数据填充预先选择的下拉字段?的主要内容,如果未能解决你的问题,请参考以下文章
更改现有列,使其从 MYSQL 数据库中的另一个表中提取数据
在包含记录的现有表中,如何创建一个新的 datetime2(2) 列并使用基于另一列的值填充它?