首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >selected=“selected”mysql中的多个下拉列表中的值

selected=“selected”mysql中的多个下拉列表中的值
EN

Stack Overflow用户
提问于 2018-10-26 02:54:12
回答 2查看 44关注 0票数 0

我正在尝试使用PHP从Mysql中选择多个下拉列表中的值。我似乎无法在下拉列表中得到正确的选择。有人能帮帮我吗。

这是SELECT语句。

代码语言:javascript
代码运行次数:0
运行
复制
$id = '';
if( isset($_GET['id']) && !empty($_GET['id'])) {
    $id = $_GET['id'];

    $sqlParent = "SELECT * FROM multipleselect";
    $resultParent = mysqli_query($con, $sqlParent);
    // Output: One Two Three

    $sqlChildren = "SELECT * FROM multipleselect WHERE multipleselecttrackerid = $id";
    $resultChildren = mysqli_query($con, $sqlChildren);
    // Output: Two Three
}

使用两个while loop的Php下拉列表

代码语言:javascript
代码运行次数:0
运行
复制
<select name ="fm_multiple" multiple>
    <?php
    while($row = mysqli_fetch_assoc($resultParent)){
        $selectedParent = $row['multipleselect_name'];

        while($row = mysqli_fetch_assoc($resultChildren)){
            $selectedChild = $row['multipleselect_name'];
        }

        $selected = ($selectedParent == $selectedChild) ? "selected='selected'": '';
        echo "<option value='{$selectedParent}' {$selected}>{$selectedParent}</option>";
    }
    ?>
</select>

这是我得到的输出。

代码语言:javascript
代码运行次数:0
运行
复制
<select name="fm_multiple" multiple="">
    <option value="One">One</option>
    <option value="Two">Two</option>
    <option value="Three" selected="selected">Three</option>
    <option value=""></option>
</select>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-26 03:42:06

在没有看到数据的情况下,我所能做的只是猜测,但这肯定是错误的:

代码语言:javascript
代码运行次数:0
运行
复制
while($row = mysqli_fetch_assoc($resultParent)){
    $selectedParent = $row['multipleselect_name'];

    while($row = mysqli_fetch_assoc($resultChildren)){ //$row is overwritten
        $selectedChild = $row['multipleselect_name'];
    }

    $selected = ($selectedParent == $selectedChild) ? "selected='selected'": '';
    echo "<option value='{$selectedParent}' {$selected}>{$selectedParent}</option>";
}

您不能多次迭代查询(从技术上讲,这不是真的),但是在外部while循环的第一次迭代之后,内部while循环将遍历$resultChildren集的全部结果集。因此,在外部循环的第二次迭代中,您的结果将从那时起返回false。

如果您想再次迭代结果(在本例中是没有意义的),则必须执行mysqli_data_seek($resultChildren,0)。这是没有意义的,因为您可以在循环之前获取数据。使用in_array比循环更有效率(即使在找到匹配之后调用match也能稍微改进循环)。

代码语言:javascript
代码运行次数:0
运行
复制
//only column you need is multipleselect_name, the smaller the result set the easier it is on the network trafic (so the faster it responds)
$sqlChildren = "SELECT multipleselect_name FROM multipleselect WHERE multipleselecttrackerid = $id";
$resultChildren = mysqli_query($con, $sqlChildren);

$selected = array_column(mysqli_fetch_all($resultChildren,MYSQLI_ASSOC), 'multipleselect_name');
/*
     we need ['item1','item2', .... ] instead of [['multipleselect_name'=>'item1'],['multipleselect_name'=>'item2']]

     I don't think you can fetch all from one column in mysqli
     ..PDO..
      $selected = $stmt->fetchAll(PDO::FETCH_COLUMN, 0);
*/

while($row = mysqli_fetch_assoc($resultParent)){
    $selectedParent = $row['multipleselect_name'];
    $selected = in_array($selectedParent,$selected) ? "selected='selected'": '';
    echo "<option value='{$selectedParent}' {$selected}>{$selectedParent}</option>";
}

在我前面提到的基础上,使用第二个循环覆盖$row。在这种情况下,这可能并不重要(您不再从家长那里使用$row ),但是它的错误实践可能会导致各种难以跟踪的问题。

我简化了逻辑,因为如果:

代码语言:javascript
代码运行次数:0
运行
复制
 $selectedParent = $parent['multipleselect_name']; //changed from row for clarity
 $selectedChild = $child['multipleselect_name'];   //changed from row for clarity
 //and
 $selectedParent == $selectedChild 
 //then
 $parent['multipleselect_name'] = $child['multipleselect_name'];
 //so if we have a list of all
 $child['multipleselect_name']
 //the we can find 
 $parent['multipleselect_name']
  //in that list

希望这是有意义的,就像说a=bb=c所以a=c

票数 1
EN

Stack Overflow用户

发布于 2018-10-26 03:40:46

据我所知,它应该选在你的参赛作品中。

代码语言:javascript
代码运行次数:0
运行
复制
<select name="fm_multiple" multiple="">
    <option value="One">One</option>
    <option value="Two">Two</option>
    <option value="Three" SELECTED>Three</option>
    <option value=""></option>
</select>

selected.asp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53000777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档