【问题标题】:While Loop entire select TagWhile循环整个选择标签
【发布时间】:2016-03-11 10:49:26
【问题描述】:

是否可以 while 循环整个选择标记以具有多个下拉菜单? 我想要实现的是在表格中有一列充满下拉菜单。

这是我目前尝试过的

<?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>";
    }
?>

How it is right now.

【问题讨论】:

  • 你尝试了什么?
  • 如果您尝试将 中,它将不起作用。现在让我们了解更多细节。
  • @Gopal 是的,我试过了。它确实创建了多个下拉菜单。但是,它只填充第一个下拉列表。
  • @Deepak 显示您的代码,我们很乐意帮助您解决问题!但这不是一条单行道! ;-) &lt;select&gt; 只能包含 &lt;option&gt;&lt;optgroup&gt; 标记,您不能在选择标记中进行选择。
  • @Qirel 我已经发布了代码。我也知道另一个选择标签内的选择标签不起作用。

标签: php html mysqli drop-down-menu


【解决方案1】:

第二个 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.
?>

【讨论】:

  • 我会坚持第一个解决方案。不过谢谢:)
  • 第一个解决方案是一种快速修复,但会给您留下结构不佳的代码。您将数据与显示的数据分开的越多越好。还要习惯更有意义的变量名。
【解决方案2】:

多选下拉基本示例

$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>';

【讨论】:

    猜你喜欢
    • 2018-10-04
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2018-01-11
    • 2021-03-31
    • 2019-04-18
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多