#php #mysql #menu
#php #mysql #меню
Вопрос:
Я хочу создать динамическое меню нижнего колонтитула (не многоуровневое) с помощью mysql.
Моя таблица MySQL выглядит так, как показано ниже…
---------------------------------------------------
| menu_id | menu_name | menu_url | short_id |
----------------------------------------------------
| 1 | Home | index.php | 1 |
----------------------------------------------------
| 2 | Contact Us | contact.php| 3 |
----------------------------------------------------
| 3 | About Us | abt.php | 2 |
----------------------------------------------------
Структура HTML похожа…
<div class="footer-menu">
<ul>
<li><a href="index.php">Home</a></li>
<li><a href="abt.php">About Us</a></li>
<li><a href="contact.php">Contact Us</a></li>
</ul>
</div>
Я закодировал как…
mysql_select_db($db,$con);
$f_menu_qry = "SELECT * FROM footermenu ORDER BY short_id ASC";
$fm = mysql_query($f_menu_qry,$con);
$f_menu = mysql_fetch_assoc($fm);
$totrows = mysql_num_rows($fm);
$menu_name = $f_menu['menu_name'];
$menu_url = $f_menu['menu_url'];
public function getFooterMenu(){
global $fm, $f_menu, $menu_name, $menu_url, $totrows;
$footer_menu = '';
$cnt = 0;
while ($clt_f_menu = mysql_fetch_assoc($fm)){
$cnt ;
$footer_menu = '<li><a href="'.$menu_url.'">'.$menu_name.'</a></li>';
if($cnt == $totrows){
return;
}
}
echo $footer_menu;
}
Вывод должен быть следующим Home / About Us / Contact Us
Но вывод отображается только Home
.
Я пробовал разные процессы, но они показывали ошибки (возможно, из-за моего ошибочного кода), но на этот раз он показывает хотя бы ссылку.
Я не могу этого сделать.
Что мне делать?
Ответ №1:
Прежде всего, не рекомендуется использовать старое расширение mysql. Лучше использовать PDO или MySQLi.
В любом случае, я немного изменил ваш код. Вы можете попробовать это. Надеюсь, это сработает..
mysql_select_db($db,$con);
$f_menu_qry = "SELECT * FROM footermenu ORDER BY short_id ASC";
$fm = mysql_query($f_menu_qry,$con);
$clt_f_menu = array();
while($rows = mysql_fetch_array($fm))
{
$clt_f_menu[$rows['menu_id']] = array(
'menu_name' => $rows['menu_name'],
'menu_url' => $rows['menu_url']
);
}
echo '<div class="footer-menu">';
echo '<ul>';
foreach ($clt_f_menu as $key => $value) {
echo '<li><a href="'.$value['menu_url'].'">'.$value['menu_name'].'</a></li>';
}
echo '</ul>';
echo '</div>';
Комментарии:
1. Я попробовал ваш код. Оно отображается
About Us / Contact Us
, но не отображаетсяHome
2. Получил мой ответ. Спасибо @mi6crazyheart
Ответ №2:
Есть два основных аспекта
$footer_menu = '<li><a href="'.$menu_url.'">'.$menu_name.'</a></li>';
в $footer_menu будет только содержимое из последнего цикла, потому что «=» перезапишет его в каждом цикле, и здесь вы используете глобальные переменные, которые содержат содержимое только из первой строки.
Попробуйте это:
mysql_select_db($db,$con);
echo getFooterMenu($con);
public function getFooterMenu($con){
$sql = "SELECT * FROM footermenu ORDER BY short_id ASC";
$mid = mysql_query($sql,$con);
$footer_menu = '';
while($rs = mysql_fetch_assoc($mid)) {
$footer_menu.= '<li><a href="'.$rs["menu_url"].'">'.$rs["menu_name"].'</a></li>';
}
return $footer_menu;
}