我遇到了<option selected>
显示两次的问题
我正在用标题表中的数据填充<select><option>
我想根据陶斯表格中的数据显示所选选项。
数据输出显示为:https://i.stack.imgur.com/P7V4E.png和https://i.stack.imgur.com/nBFPh.png
<?php
$title_sql = "SELECT * FROM titles";
echo "<select class='form-control' name='title_id'>";
if ($result = mysqli_query($conn, $title_sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$dbselected = $tao['title_id'];
foreach ($row as $option) {
if ($dbselected == $option) {
?>
<option selected value='$row[id]'><?php echo $row['title']; ?></option>
<?php
} else {
}
}
echo "<option value='$row[id]'>$row[title]</option>";
}
mysqli_free_result($result);
}
echo "</select>"; ?>
<?php
$title_sql = "SELECT * FROM titles";
echo "<select class='form-control' name='title_id'>";
if ($result = mysqli_query($conn, $title_sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$dbselected = $tao['title_id'];
foreach ($row as $option) {
if ($dbselected == $option) {
?>
<option selected value='$row[id]'>
<?php echo $row['title']; ?>
</option>
<?php
} else {
}
}
echo "<option value='$row[id]'>$row[title]</option>";
}
mysqli_free_result($result);
}
echo "</select>"; ?>
如有任何协助,我们将不胜感激。
在foreach
部分中,您将else
部分留空,并显示条件之外的所有选择值
试试这个
<?php
$title_sql = "SELECT * FROM titles";
echo "<select class='form-control' name='title_id'>";
if ($result = mysqli_query($conn, $title_sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$dbselected = $tao['title_id'];
foreach ($row as $option) {
if ($dbselected == $option) {
?>
<option selected value='$row[id]'><?php echo $row['title']; ?></option>
<?php
} else {
echo "<option value='$row[id]'>$row[title]</option>";
}
}
}
mysqli_free_result($result);
}
echo "</select>"; ?>
当if
语句的值等于$dbselected
值时,它将输出带有selected
的option
。然后无条件输出选项(不带selected
(。如果已经使用selected
输出,则将最后一个echo
移动到该if
的else {
部分以防止其输出
此外,您不需要foreach ($row as $option) {
;因为这是穿过行的列,所以第二个echo
将针对每一列重复。
此外,保持一致。要么使用echo
,要么退出PHP;不要这样做然后那样做。
试试这个方法:
if ($result = mysqli_query($conn, $title_sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$dbselected = $tao['title_id'];
## foreach ($row as $option) { ## TAKE THIS OUT
if ($dbselected == $option) {
?>
echo "<option selected value='{$row['id']}'>{$row['title']}</option>";
<?php
} else {
echo "<option value='{$row['id']}'>{$row['title']}</option>"; ## MOVED FROM BELOW
}
## } ## (End of foreach) TAKE THIS OUT
## echo "<option value='$row[id]'>$row[title]</option>"; ## MOVED THIS UP
}
我实际上会使用printf()
而不是if-else
:
printf('<OPTION %s value="%s">%s</OPTION>',
($dbselected == $row['id'] ? "selected" : ""),
$row['id'],
htmlspecialchars($row['title']));
我编辑了你的问题,向你展示了更好的格式如何更容易找到你的问题。您的第三个echo语句首先被执行,它在您的else块之外,应该在内部
<?php
$title_sql = "SELECT * FROM titles";
echo "<select class='form-control' name='title_id'>";
if ($result = mysqli_query($conn, $title_sql)) {
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
$dbselected = $tao['title_id'];
foreach ($row as $option) {
if ($dbselected == $option) {
?>
<option selected value='$row[id]'>
<?php echo $row['title']; ?>
</option>
<?php
} else {
}
}
echo "<option value='$row[id]'>$row[title]</option>";
}
mysqli_free_result($result);
}
echo "</select>"; ?>
如果在另一个表中找到显示所选选项的数据库,则不再查找<select><option>
选择一个选项
<?php
$sql = "SELECT * FROM titles";
$result = mysqli_query($conn, $sql);
$selected = $resident['title_id'];
$rows = mysqli_fetch_all($result, MYSQLI_ASSOC);
mysqli_free_result($result);
?>
<?php foreach ($rows as $row) : ?>
<?php if ($selected == $row['id']) { ?>
<option selected value="<?php echo $row['id']; ?>">
<?php echo $row['status']; ?></option>
<?php } else { ?>
<option value="<?php echo $row['id']; ?>">
<?php } ?>
<?php echo $row['status']; ?></option>
<?php endforeach; ?>
</select>