简体   繁体   中英

How to populate dropdown field pre-selected with the existing data from another MySQL table?

In my database I have 2 tables:

tabels To insert data, I have a form that populates dropdown options from the table formulation . This is what the insert form for formulation dropdown looks like:

<?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>

Now I am working on the 'Update' form. But my question is how can I populate the 'Formulation' field dropdown with the data from the formulation table (like as the insert form) but pre-selected with the existing formulation value for the name from the items table? Like this image below: UpdateForm

I am having problem with how I should build the form. How should I proceed with this form?

<?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>

Thanks in advance for your suggestion.

Note: I'm not a user of mysqli so maybe there will be some error, but you will get the idea. This will not tackle the update part, just the populate part

Since you are editing a certain item, I will assume that you have something to get the item's 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>

I changed the code to better suit the problem, there may be typos, just comment for clarification

If I have understand Your question... You have to put Your result into a string. For example:

<?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>

I hope to be of help

This should do the trick:

<?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>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM