我正在尝试创建一个适用于纯 css 的下拉菜单。这在 HTML 中完美运行,没有任何问题,但是当我尝试从 SQL 表中取出信息时,我似乎遇到了障碍。我将尽量简明扼要地解释这个问题。
没有 PHP/Mysqli 的 HTML
<div id='menu'>
<ul>
<li><a href='#'><span>Home</span></a></li>
<li cl ass='active has-sub'>
<a href='#'><span>Products</span></a>
<ul>
<li class='has-sub'>
<a href='#'><span>Product 1</span></a>
<ul>
<li><a href='#'><span>Sub Product</span></a></li>
</ul>
</li>
</ul>
</li>
<li><a href='#'><span>About</span></a></li>
<li class='last'><a href='#'><span>Contact</span></a></li>
</ul>
</div>
HTML with PHP/Mysqli
<div id="menu">
<ul>
<li class="current"><a href="index.php">Main</a></li>
<li><a href="about.php">About Us</a></li>
<li><a href="projects.php">Projects</a></li>
<li class="has-sub"><a href="">Properties</a>
<ul>
<?php
require_once 'connect.php';
$qry = db_select("select city as city,name from property a left join area b on a.area_id=b.id left join city c on b.city_id=c.id group by city");
foreach ($qry as $row) {
echo "<li class='has-sub'><a href='#'><span>".$row['city']."</span></a></li>";
}
echo "<ul>";
$qry = db_select("select city as city,name from property a left join area b on a.area_id=b.id left join city c on b.city_id=c.id ");
foreach ($qry as $row) {
echo "<li><a href='#'><span>".$row['name']."</span></a></li>";
}
?>
</ul>
<li><a href="contacts.html">Contacts</a></li>
</ul>
</div>
</div>
这将正确显示所有城市,但所有属性(名称(不会显示为子菜单,而是在所有城市之后显示。
我知道问题是什么,但不知道如何解决。
基本上是因为我有一个foreach,当我每组只需要一个标签时,它会制作多个(或没有(<UL>
标签。我不知道该怎么做。希望有人能帮忙。
我没有放CSS,因为我认为它在这里不相关,但如果需要,我也可以放它。
还不清楚您实际想要的菜单结构,但可以肯定的是,您缺少几个结束标签。
<li class="has-sub"><a href="">Properties</a>
<ul>
<?php
require_once 'connect.php';
$qry = db_select("select city as city,name from property a left join area b on a.area_id=b.id left join city c on b.city_id=c.id group by city");
foreach ($qry as $row)
{
echo "<li class='has-sub'><a href='#'><span>".$row['city']."</span></a></li>";
}
echo "<ul>"; //this seems the issue, should be </ul></li>
?>
不过,我有点不清楚您要实现的实际菜单结构。但是尝试正确指出结束标签,这应该可以解决您的问题。
试试这个,希望有帮助。
<ul>
<?php
require_once 'connect.php';
$qry = db_select("select city as city,name from property a left join area b on a.area_id=b.id left join city c on b.city_id=c.id group by city");
foreach ($qry as $row) : ?>
<li class='has-sub'><a href='#'><span><?php echo $row['city']; ?></span></a>
<ul>
<li><a href='#'><span><?php echo $row['name']; ?></span></a></li>
</ul>
</li>
<?php endforeach; ?>
</ul>
不确定这是否是正确的方法,但我通过确保每组的第一条记录显示<UL>
而不是其余记录来找到答案。
基本上这是通过以下方法完成的
- 变量为真
如果变量为- 真,则"做某事"变量为假
- 否则"做点别的">
我还在 UL 和 Li 中添加了类,但这无关紧要。
这有效,但我不确定这是否是最好的方法。我还没有尝试过其他方法,但我想谈谈这是否是一种有效的好方法。
<li class="has-sub"><a href=""><span>Properties</span></a>
<?php
$qry=db_select("select distinct city from city a join area b on a.id=b.city_id join property c on b.id=c.area_id");
$first=true;
foreach ($qry as $row)
{
$city=$row['city'];
if ($first)
{
?>
<ul>
<li class='has-sub'><a href='#'><span><?php echo $row['city']; ?></span></a>
<?php
$first=false;
}else{
?>
<li class='has-sub'><a href='#'><span><?php echo $row['city']; ?></span></a>
<?php
}
$city=$row['city'];
$qry=db_select("select city,a.id as id,name from property a left join area b on a.area_id=b.id left join city c on b.city_id=c.id where city='$city' ");
$first=true;
foreach ($qry as $row)
{
if ($first)
{
?>
<ul class="drop_ul"><li class="drop_col"><a href="showprop.php?id=<?php echo $row['id']; ?>"><span><?php echo $row['name']; ?></span></a></li>
<?php
$first=false;
}
else{
?>
<li class="drop_col"><a href="showprop.php?id=<?php echo $row['id']; ?>"><span><?php echo $row['name']; ?></span></a></li>
<?php
}}?>
</ul>
</li>
<?php
}
?>
</ul>
错误: - 2对1 - 没有 项目属性 -
- <数>数>
现在让我谈谈你的菜单结构,是这样的吗?主要关于我们项目属性>> 县>> 名称 1 名称 2 ... 名称 I