无法使用 mysql 生成纯 css 分层下拉菜单的子菜单


Not able to generate sub menus of pure css tiered drop down with mysql

我正在尝试创建一个适用于纯 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>而不是其余记录来找到答案。

基本上这是通过以下方法完成的

  1. 变量为真
  2. 如果变量为
  3. 真,则"做某事"变量为假
  4. 否则"做点别的">

我还在 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