Select box showing db value not allowing update

时间:2019-01-18 18:42:51

标签: php html5

This code finally worked to display a previous selection $MedIDinDB in a lookup table based select box as desired, but it will not allow a new selection to change the control's selected value for posting an update as needed. How do I do both?

<select name="MedSelect" value="<?php 

$sql = "SELECT MedID, MedName FROM Meds ORDER BY Rank ASC";
$query = $pdo->prepare($sql);
$query->execute();
if($query) {
    $row = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach($row as $value){ ?>
        <option value="<?php echo $value['MedID']; ?>"<?php if ($value['MedID'] == $MedIDinDB) echo ' selected="selected"'; ?>><?php echo $value['MedName']; ?> 
        </option>
<?php }} ?>

</select>

2 个答案:

答案 0 :(得分:1)

Select in HTML doesn't have value= attribute.
You can keep your code cleaner by concatenating instead of escaping PHP code:

<select name="MedSelect">
<?php
$sql = "SELECT MedID, MedName FROM Meds ORDER BY Rank ASC";
$query = $pdo->prepare($sql);
$query->execute();
if ($query) {
    $row = $query->fetchAll(PDO::FETCH_ASSOC);
    foreach ($row as $value) {
        $selected = $value['MedID'] == $MedIDinDB ? ' selected="selected"' : '';
        echo '<option value="'. $value['MedID'] .'" '. $selected .'>'. $value['MedName'] .'</option>';
    }
} 
?>
</select>

答案 1 :(得分:0)

As @imvain2 is saying that looks improperly formatted. I see an answer has been supplied so I won't explain again but thought I'd share an example of how you can format HTML/PHP spaghetti better.

<?php
$sql = "SELECT MedID, MedName FROM Meds ORDER BY Rank ASC";
$query = $pdo->prepare($sql);
$query->execute();
$rows = $query->fetchAll(PDO::FETCH_ASSOC);
?>
<select name="MedSelect">
    <?php if(!empty($rows)): ?>
        <?php foreach($row as $value): ?>        
            <option value="<?= $value['MedID'] ?>" <?= ($value['MedID'] == $MedIDinDB) ? 'selected="selected"' : ''?>><?= $value['MedName'] ?></option>
        <?php endforeach; ?>
    <?php endif; ?>
</select>