如何使用另一个 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:从另一个表中的值“修补”表上的现有数据

更改现有列,使其从 MYSQL 数据库中的另一个表中提取数据

在包含记录的现有表中,如何创建一个新的 datetime2(2) 列并使用基于另一列的值填充它?

mysql文件导入现有数据库表中

如何根据laravel控制器中另一个表中保存的数据创建触发器以填充数据库中的表

如何使用填充旧表中的行的动态数据动态更新新MySQL表中的行?