CSS не работает в меню с подменю в PHP MYSQL

Я пытаюсь сделать вертикальное раскрывающееся меню с подменю, например:

1-
1-
2-
1-
3-

Я придумал функцию ниже, но 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

Решение

CSS не применяется, потому что ваш вывод HTML неверен. В следующем коде:

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

призыв к display_menus() производит свой собственный <ul>...</ul> теги, так что вы в конечном итоге с:

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

Это, конечно, не верный HTML. Одним из решений этой проблемы является пропустить <ul>...</ul> теги в HTML:

<?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>";
}
}

Обратите внимание, что вы также получите неправильный HTML, если $row['id'] или же $row['menuNome'] бывает содержать < или же & персонажи. Вы, вероятно, должны избежать последнего с htmlspecialchars($row['menuNome']). Вероятно, не первый, в зависимости от того, какие значения у вас есть для id«S.

Обратите внимание также что расширение MySQL устарело и больше не поддерживается. Вы должны использовать MySQLi или же PDO Эти дни.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]