PHP динамическое меню нижнего колонтитула с MySQL

#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;
}