php - 使用数据库值嵌套在 php while 循环中

标签 php mysql

我在数据库(phpmyadmin)中有一个菜单,我用 while 循环将其输入到我的标题中。但其中一个菜单项有一个下拉菜单。如何更改下面的 while 循环以使其集成子菜单?换句话说,Home、How It Works、Blog、About 和 Contact 仍为链接,而 Services 仍为下拉列表,显示页面 Service1 的单独 while 循环,服务2,服务3...第n个服务

这是我到目前为止所做的工作

我的连接位于顶部

<?php
require_once('db/db_database.php');

// These are menu items Home(id=1), Services(id=2), How It Works(id=3), Blog(id=4), About(id=5), & Contact(id=6)
$sql = " SELECT * FROM menu WHERE id IN (1, 2, 3, 4, 5, 6) ";
$result = $conn->query($sql);


// These are submenu items Svs1(id=10), Svs2(id=20), Svs3(id=30)
$sql2 = " SELECT * FROM menu WHERE id IN (10, 20, 30) ";
$result2 = $conn->query($sql2);
?>

我的主菜单循环在没有子菜单的情况下工作正常

<?php
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            echo '<li class="nav-item dropdown active">';
            echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
            echo '</li>';
        }
    } else {
        echo "0 results";
    }
?>

以及我希望嵌套在上面的循环中的子菜单结构

<li class="nav-item dropdown">
    <a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
        Services
        <i class="zmdi zmdi-chevron-down"></i>
    </a>
    <ul class="dropdown-menu">
        <li>
            <a class="dropdown-item" href="">
                Service 1
            </a>
        </li>
        <li>
            <a class="dropdown-item" href="">
                Service 2
            </a>
        </li>
        <li>
            <a class="dropdown-item" href="">
                Service 3
            </a>
        </li>                                   
    </ul>
</li>

**请注意 li 中的整个类(class)组与常规链接不同,因此我更加困惑。此外,“服务”下拉列表按照显示顺序排在第二位。所以我不能只是将它单独添加到末尾,这就是为什么我假设它应该被嵌套以打破循环并在其余菜单项的后面重新启动循环。

附:我可以运行 3 个查询(1 个仅用于主页链接,另一个用于服务下拉列表,第三个用于其余菜单项),但我知道必须有更好的方法。

这是所需外观的想法

enter image description here

提前谢谢大家! 并不是说它会有所帮助,因为您需要连接,但是如果您想使用它,这里有一个代码笔,其中包含我用于此菜单的代码

CODEPEN

编辑

为了让事情变得更容易,我现在拥有的东西工作得很好,但太臃肿了。 (3 个查询)

<?php
    if ($resulthome->num_rows > 0) {
        // output data of each row
        while($row = $resulthome->fetch_assoc()) {
            echo '<li class="nav-item dropdown active">';
            echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
            echo '</li>';
        }
    } else {
        echo "0 results";
    }
?>
<li class="nav-item dropdown active">
    <a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">
        Services
        <i class="zmdi zmdi-chevron-down"></i>
    </a>
    <ul class="dropdown-menu">
        <?php
            if ($result2->num_rows > 0) {
                // output data of each row
                while($row = $result2->fetch_assoc()) {
                    echo '<li>';
                    echo '<a href="' . $row["link"] . '" class="dropdown-item">' .  $row["pagename"] . '</a>';
                    echo '</li>';
                }
            } else {
                echo "0 results";
            }
        ?>
    </ul>
</li>
<?php
    if ($result1->num_rows > 0) {
        // output data of each row
        while($row = $result1->fetch_assoc()) {
            echo '<li class="nav-item dropdown active">';
            echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
            echo '</li>';
        }
    } else {
        echo "0 results";
    }
?>

最佳答案

您可以在主菜单循环内使用带条件的子菜单循环。

 if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        if($row['id'] == 2){ // applies only for services
            echo '<li class="nav-item dropdown active">';
            echo '<a href="#" class="nav-link dropdown-toggle animated fadeIn animation-delay-7" data-toggle="dropdown" data-hover="dropdown" role="button" aria-haspopup="true" aria-expanded="false" data-name="services">';
           echo $row["pagename"];
           echo '<i class="zmdi zmdi-chevron-down"></i>';
           echo '</a>';
           // create a new list
            echo '<ul class="dropdown-menu">';
             // loop second/submenu query results
             while($sub_row = $result2->fetch_assoc()) { 
                echo '<li>';
                echo '<a href="' . $sub_row["link"] . '" class="dropdown-item">' . $sub_row["pagename"] . '</a>';

                echo '</li>';  
             }
             echo "</ul>";
             echo '</li>';   
        }else{ // for all other menu links
            echo '<li class="nav-item dropdown active">';
            echo '<a href="' . $row["link"] . '" class="nav-link dropdown-toggle animated fadeIn animation-delay-7">' . $row["pagename"] . '</a>';
            echo '</li>';
        }

    }
} else {
    echo "0 results";
}

关于php - 使用数据库值嵌套在 php while 循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47600706/

相关文章:

mysql - 列出所有发送或接收消息的用户

MySQL Workbench 未连接到本地主机

java - 从数据库中搜索依赖条件

javascript - PHP json 编码中的 JSON 格式无效

PHP DOM XML - 创建多个命名空间属性?

php - 递增数字不会出错

php - WooCommerce 仅显示已购买的商品

php - 验证数组是否已存在于 mysql php laravel 中

mysql - MySQL 数据库中的用户定义公式

javascript - 将内联 PHP 中的值传递给 javascript 变量