基于MySQL数据的HTML <Select> <Option>默认值

3

我有一个简单的库存数据库,在输入数据表单中,其中一个输入字段是field,如下所示:

<select>
    <option>In Inventory</option>
    <option>In Process</option>
    <option>Shipped/in-transit</option>
    <option>Received by recipient</option>
</select>

如果我输入一个"处理中"的数据,后来想要更新这个特定的数据。在我的update_page.php文件中,默认返回到"库存中"。我希望看到选择了"处理中"的值。
以下是我update_page.php代码的片段:
<select name="status" value="<?php echo $row['status']; ?>">
    <option>In Inventory</option>
    <option>In Process</option>
    <option>Shipped/in-transit</option>
    <option>Received by recipient</option>
</select>
4个回答

6

在HTML中,Select元素没有value属性 - 你可以选择多个选项,并且这是通过option元素上的selected属性确定的。

糟糕的方式:

<select name="status">
    <option<?php if ($row['status'] == "In Inventory"): ?> selected="selected"<?php endif; ?>>In Inventory</option>
    <option<?php if ($row['status'] == "In Process"): ?> selected="selected"<?php endif; ?>>In Process</option>
    <option<?php if ($row['status'] == "Shipped/in-transit"): ?> selected="selected"<?php endif; ?>>Shipped/in-transit</option>
    <option<?php if ($row['status'] == "Received by recipient"): ?> selected="selected"<?php endif; ?>>Received by recipient</option>
</select>

略微好一点的方式:
 <?php
      $options = array("In Inventory", "In Process", "Shipped/in-transit", "Received by recipient");
 ?>

 <select>
     <?php foreach ($options as $option): ?>
         <option value="<?php echo $option; ?>"<?php if ($row['status'] == $option): ?> selected="selected"<?php endif; ?>>
             <?php echo $option; ?>
         </option>
     <?php endforeach; ?>
 </select>

最佳方式 - 将这些选项存储在数据库表中 - 最好使用ID值而不是字符串(允许更轻松地更新选项标签),并循环遍历可能的选项,从类似我上面所示的数据库查询中获取。如果此选择列表被广泛使用,请缓存查询结果以获得选项(请记住,如果列表被更新,您需要清除缓存)。


0

你需要检查每一个是否为选中项,例如:

<option <?php if ($row['status'] == 'In Process') echo 'selected'; ?>>In Process</option>

如果您使用jQuery,您可以采用更简洁的解决方案,在您的情况下给您的选择标签一个ID,然后:
$(document).ready(function() {
    $('#select-id option:contains("<?php echo $row['status']; ?>")').prop('selected', true);
});

这并不是更加简洁 - 这会通过将逻辑放在两个不同的位置来使问题变得更加复杂。 - HorusKol
好的,挺公平的。我不同意,但我理解你的观点,并且认识到这可能不是个好建议。 - Joel Hinz

0
每个选项都有其对应的值,而不是选择标签。因此,您将需要将每个选项的值与状态进行比较。

0

我发现的最简单的代码,仅使用JavaScript(不需要jQuery)。将其放在列表框声明后面,并在那里设置所选索引:

<script>
document.getElementById('listBoxId').selectedIndex=<?php echo $INDEX ?>;
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接