动态多级下拉菜单 php sql

问题描述 投票:0回答:1

我有一个html中的导航菜单,我想创建一个循环,一切都很好,但有子项的项目回声两次!我知道问题出在哪里,但我不知道如何解决它 :(我的 sql 表名为 menu

      $db = mysqli_connect('localhost', 'root', 'password', 'aftab');
<?php
$get = mysqli_query($db , "SELECT * from menu where parent_id is NULL");
while ($rowmenu = mysqli_fetch_assoc($get)) {
    echo '<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-656"><a href="'. $rowmenu['link'] . '" >' . $rowmenu['name'] .'</a>' ;
    $id = $rowmenu['id'] ;
    $check = mysqli_query($db , "SELECT * from menu where parent_id = '$id'");
    if ( mysqli_num_rows($check) ) { 
         echo '<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-656"><a href="'. $rowmenu['link'] . '" >' . $rowmenu['name'] .'</a>' ; 
         echo '<ul class="sub-menu">' ;
        while ( $row2 = mysqli_fetch_assoc($check) ) {
            echo '<li class="menu-item-302"><a href="' . $row2['link'] . '">' . $row2['name'] . '</a></li>' ;
        }
        echo '</ul>' ;
    } else {
        echo '</li>' ;
    }
}

?>

结果是这样的在这里输入图片描述

我知道它发生,因为父亲项目,持有子菜单的调用$get一次,另一个时间,当它需要其他CSS类.我试过if,foreach,while和许多事情.我需要的项目,持有子菜单应该有 "menu-item-has-children "类,否则它不显示子菜单。

php sql loops dynamic submenu
1个回答
0
投票

当一个菜单项,有孩子,然后呼应菜单与 menu-item-has-children 类,否则就呼应一个简单的菜单,继续前进。

<?php

$get = mysqli_query($db , "SELECT * from menu where parent_id is NULL");
while ($rowmenu = mysqli_fetch_assoc($get)) {
    $id = $rowmenu['id'] ;
    $check = mysqli_query($db , "SELECT * from menu where parent_id = '$id'");
    $haveSubMenu = mysqli_num_rows($check);

    if($haveSubMenu)
        echo '<li class="menu-item menu-item-type-post_type menu-item-object-page  menu-item-656 menu-item-has-children"><a href="'. $rowmenu['link'] . '" >' . $rowmenu['name'] .'</a>' ;
    else
        echo '<li class="menu-item menu-item-type-post_type menu-item-object-page  menu-item-656"><a href="'. $rowmenu['link'] . '" >' . $rowmenu['name'] .'</a>' ;

    if ($haveSubMenu) 
    { 
        echo '<ul class="sub-menu">' ;
        while ( $row2 = mysqli_fetch_assoc($check) ) {
           echo '<li class="menu-item-302"><a href="' . $row2['link'] . '">' . $row2['name'] . '</a></li>' ;
        }
        echo '</ul>' ;
    } else {
        echo '</li>' ;
    }
}

?>

0
投票

下面是看到 我们的产品 打印了两次,这是因为你从数据库中获取和呼应的是 $row2['name'] 两次,但你可以通过改变你的SQL查询来处理第一个数组。

将第一个SQL查询改为

$get = mysqli_query($db , "SELECT * from menu where parent_id is NULL AND name != 'OUR PRODUCTS'");

在数据库中查询,你会得到数组中所有的NULL值,不包括 OUR PRODUCTS 因此,它将只被第二次查询呼应一次。

© www.soinside.com 2019 - 2024. All rights reserved.