使用数据库值嵌套在php while循环中
我在数据库(phpmyadmin)中有一个菜单,我用while循环将它输入到我的头中。但是其中一个菜单项有一个下拉列表。如何更改下面的while循环,使其集成子菜单?换句话说,使用数据库值嵌套在php while循环中,php,mysql,Php,Mysql,我在数据库(phpmyadmin)中有一个菜单,我用while循环将它输入到我的头中。但是其中一个菜单项有一个下拉列表。如何更改下面的while循环,使其集成子菜单?换句话说,主页、工作原理、博客、关于和联系人仍然作为链接,而服务仍然是一个下拉列表,其中显示了一个单独的while循环,其中包含页面Service1、Service2、Service3…Service nth 这是我到目前为止所做的工作 我的电话接通了 <?php require_once('db/db_database.ph
主页、工作原理、博客、关于和联系人
仍然作为链接,而服务
仍然是一个下拉列表,其中显示了一个单独的while循环,其中包含页面Service1、Service2、Service3…Service nth
这是我到目前为止所做的工作
我的电话接通了
<?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);
?>
您可以在主菜单循环中使用子菜单循环,并附带条件
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";
}
if($result->num\u rows>0){
//每行的输出数据
而($row=$result->fetch_assoc()){
如果($row['id']==2){//仅适用于服务
echo';
回声';
//创建一个新列表
echo';
//循环第二个/子菜单查询结果
而($sub_row=$result2->fetch_assoc()){
回音“- ”;
回声';
回音“
”;
}
回声“
”;
回音“ ”;
}else{//用于所有其他菜单链接
echo';
回声';
回音“ ”;
}
}
}否则{
回显“0结果”;
}
如果要减少数据库查询,可以使用UNION
将它们连接在一起,然后添加一个虚拟列,以便识别属于哪个查询的行
大概是这样的:
SELECT *, 'first' AS query FROM menu WHERE id IN (1, 2, 3, 4, 5, 6)
UNION
SELECT *, 'second' AS query FROM menu WHERE id IN (10, 20, 30)
这将在一个查询中返回所有结果,并在foreach逻辑中使用一个名为query
的额外列
我可能会命令查询首先返回子菜单结果,而不是使用嵌套的foreach循环。将它的HTML构造成一个变量,然后构造主菜单HTML,只需将子菜单的变量放在当前嵌套循环的位置。这没有填充我的子菜单,它将服务菜单创建为另一个链接菜单。请注意与
li
关联的类组和属性,这使其成为下拉切换。以及ICO此代码将在服务列表下创建一个新列表。请查看页面源代码,不要忘记包含CSSYE,但它不会打开,因为切换到打开的li中缺少属性。看到我的编辑,我做了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";
}
SELECT *, 'first' AS query FROM menu WHERE id IN (1, 2, 3, 4, 5, 6)
UNION
SELECT *, 'second' AS query FROM menu WHERE id IN (10, 20, 30)