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>
答案 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>