CSS没有在PHP MYSQL中使用子菜单的菜单上工作

时间:2015-07-18 22:31:10

标签: php css menu submenu

我正在尝试使用子菜单创建一个垂直下拉菜单,例如:

1-
 1-
 2-
  1-
3- 

我已经提供了下面的功能,但即使使用以下内容在页面上定义了CSS,也没有应用CSS:

<link href="estilo.css" rel="stylesheet" type="text/css" media="screen" />

我做错了什么?

function display_menus($menuIdPai = 0) {
    $query = mysql_query("SELECT * FROM menu WHERE menuIdPai = ".$menuIdPai) or die(mysql_error());
    if (mysql_num_rows($query) > 0) {
        echo "<ul>";
        while ($row = mysql_fetch_array($query)) {
            echo "<li> <a href='percentagem.php'>".$row['id'].$row['menuNome']."</a>";
            display_menus($row['menuId']);
            echo "</li>";
        }
        echo "</ul>";
    }
}
<ul id="nav"> 
    <?php display_menus(); ?>
</ul>
ul {
    margin: 0;
    padding: 0;
    list-style: none;
    width: 150px;
}
ul li {
    position: relative;
}
li ul {
    position: absolute;
    left: 149px;
    top: 0;
    display: none;
}
ul li a {
    display: block;
    text-decoration: none;
    color: #E2144A;
    background: #fff;
    padding: 5px;
    border: 1px solid #ccc;
}
li:hover ul {
    display: block;
}

1 个答案:

答案 0 :(得分:1)

由于您的HTML输出不正确,因此未应用CSS。在以下代码中:

<ul id="nav"> 
    <?php display_menus(); ?>
</ul>

display_menus()的调用会生成自己的<ul>...</ul>标记,因此您最终得到:

<ul id="nav"><ul> ...
</ul></ul>

这当然不是有效的HTML。对此的一个解决方案是跳过HTML中的<ul>...</ul>标记:

<?php display_menus(); ?>

并调整display_menus()仅将id="nav"属性输出到根菜单($menuIdPai == 0时):

function display_menus($menuIdPai = 0) {

/* Added $id variable: */

    $id = ($menuIdPai == 0 ? ' id="nav"' : ''); /* Note space before id */

    $query = mysql_query("SELECT * FROM menu WHERE menuIdPai = ".$menuIdPai) or die(mysql_error());
    if (mysql_num_rows($query) > 0) {

/* Added $id here: */

        echo "<ul$id>";

        while ($row = mysql_fetch_array($query)) {
            echo "<li> <a href='percentagem.php'>".$row['id'].$row['menuNome']."</a>";
            display_menus($row['menuId']);
            echo "</li>";
        }
        echo "</ul>";
    }
}

请注意,如果$row['id']$row['menuNome']恰好包含<&个字符,您也会生成错误的HTML。你应该用htmlspecialchars($row['menuNome'])来逃避后者。可能不是第一个,取决于您对id的价值观。

另请注意不推荐使用MySQL扩展程序。这些天你应该使用MySQLiPDO