php - 动态多级下拉菜单php sql
问题描述
我在 html 中有导航菜单,我想创建一个循环,一切都很好,但是有孩子的项目回显了两次!我知道问题出在哪里,但我不知道如何解决它:( 我的 sql 表名为 menu
这是我的 php:
$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”类,否则它不会显示子菜单。
解决方案
在这里可以看到数据库中的Our Products打印了两次。这是因为您正在获取和回$row2['name']
显两次,但是您可以通过更改 SQL 查询来处理第一个到来的数组。
将您的第一个 SQL 查询更改为
$get = mysqli_query($db , "SELECT * from menu where parent_id is NULL AND name != 'OUR PRODUCTS'");
将其查询到数据库,您将获得数组中的所有 NULL 值,不包括在内OUR PRODUCTS
,因此第二个查询只会回显一次。
推荐阅读
- c++ - 选择排序有什么问题?
- anaconda - Pycharm 终端中没有名为“conda”的模块
- spring-integration - 如何使用spring集成将邮件存储到数组列表对象或数据库中
- python - Python Kivy 2 Buttons 2 不同的动作在相同的布局
- python - 使用谷歌翻译使用 selenium 进行网页抓取
- asp.net-mvc - 在 Entity Framework Core 中使用 FromSqlRaw 时如何编写连接语句?
- amazon-web-services - 将 ETL 作业用于 aws 胶水时,如何控制 RDS 的摄取率?
- google-apps-script - 实施附加组件 doPost 和 doGet 触发器
- python - 你如何使用 Python xpath 从网页获取信息?
- google-bigquery - 主键同时具有整数和字符串的左连接