PHP <select> <option> 显示<option>选中两次



我遇到了<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值时,它将输出带有selectedoption。然后无条件输出选项(不带selected(。如果已经使用selected输出,则将最后一个echo移动到该ifelse {部分以防止其输出

此外,您不需要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>

最新更新