而循环整个选择标签


While Loop entire select Tag

是否可以循环整个选择标签以具有多个下拉菜单?我试图实现的是在一个表中有一个充满下拉菜单的列。

这是我到目前为止尝试过的

<?php
    $DNS_FROM = $DNS."_port-%";
    $select = "SELECT * FROM `uplink_port_mapping` WHERE DNS_From LIKE '$DNS_FROM'";
    $select1 = mysqli_query($conn, $select);
    $select2 = "SELECT DNS_From FROM `uplink_port_mapping` WHERE DNS_From NOT LIKE '$DNS_FROM' AND DNS_To = ''";
    $select3 = mysqli_query($conn, $select2);
    while($uplink_from = mysqli_fetch_assoc($select1)){
        echo "<tr>";
        echo "<td>".$uplink_from['DNS_From']."</td>";
        echo "<td>"."<select name = 'uplink_to' multiple='multiple'> 
        <option value = '".$uplink_from['DNS_To']."' selected='selected'>". $uplink_from['DNS_To']."</option>";
        while ($uplink_to = mysqli_fetch_assoc($select3)){
                echo "<option value='".$uplink_to['DNS_From']."'>".$uplink_to['DNS_From']."</option>";
        }
        echo"</select>";
        echo"</td>";
        echo"</tr>";
    }
?>

现在怎么样了。

第二个 while 循环只工作一次的原因是,mysqli_fetch_assoc($result)会将$result的指针留在它的末尾。因此,当您尝试第二次循环时,mysqli_fetch_assoc($result)不会返回任何内容(因为它位于$result的末尾。

两种可能性:

将指针重置为开头:

<?php 
....
while($uplink_from = mysqli_fetch_assoc($select1)){
    echo "<tr>";
    echo "<td>".$uplink_from['DNS_From']."</td>";
    echo "<td>"."<select name = 'uplink_to' multiple='multiple'> 
    <option value = '".$uplink_from['DNS_To']."' selected='selected'>". $uplink_from['DNS_To']."</option>";
    // here's the change:
    mysql_data_seek($select3, 0);
    while ($uplink_to = mysqli_fetch_assoc($select3)){
            echo "<option value='".$uplink_to['DNS_From']."'>".$uplink_to['DNS_From']."</option>";
    }
    echo"</select>";
    echo"</td>";
    echo"</tr>";
}
.... 
?>

或者 - 我认为这是更好的解决方案 - 首先将该数据存储到一个数组中,然后遍历该数组:

<?php
...
$select2 = "SELECT DNS_From FROM `uplink_port_mapping` WHERE DNS_From NOT LIKE '$DNS_FROM' AND DNS_To = ''";
$result2 = mysqli_query($conn, $select2);
$dns_from = Array();
while ($uplink_to = mysqli_fetch_assoc($select3)){
    $dns_from[] = $uplink_to;
}
....
// inside your first while loop:
foreach($dns_from as $dns) {
   echo "<option value='".$dns['DNS_From']."'>".$dns['DNS_From']."</option>";
}
....
// note that I left out a bunch of your code, that doesn't change.
?>

多选下拉列表基本示例

$array = [
'Apple' => 1,
'Orange' => 0,
'Banana' => 1,
];
echo '<select multiple>';
foreach ($array as $fruit => $sel) {
    $selected = 0;
    if ($sel == 1) {
        $selected = 'selected';
    }
    echo '<option value="' . $fruit . ' " ' . $selected . '>' . $fruit . '</option>';
}
echo '</select>';