【发布时间】:2014-06-16 19:12:16
【问题描述】:
我的代码和表格如下
表格
menu
====
m_id menu_name parent_menu_id menu_order menu_url status
1 M1 0 1 # 1
2 M2 0 2 # 1
3 S1 1 1 # 1
4 S2 1 2 # 1
user_rights
===========
user_id rights
1 1,2,3,4
2 1,2,3
代码
<?php
$get_user_id = "1"; // user id will be 1 or 2 or any id from user table
mysql_connect("localhost", "root", "password") or die(mysql_error());
mysql_select_db("booksdb") or die(mysql_error());
function getMenuRights($get_user_id) {
$get_user_id = intval($get_user_id);
$get_access_query = mysql_query("SELECT access FROM user_rights where user_id='".$get_user_id."'");
$fetch_access_list = mysql_fetch_row($get_access_query);
$get_access_list = $fetch_access_list[0];
return $get_access_list;
}
function getUserMainMenus($get_user_id) {
$get_user_id = intval($get_user_id);
$rights = getMenuRights($get_user_id);
$get_main_menu_query = mysql_query("SELECT * FROM menu where m_id IN ($rights) and parent_menu_id='0' order by menu_order");
while ($row = mysql_fetch_assoc($get_main_menu_query)) {
$results[] = $row;
}
return $results;
}
function getUserChildMenu($parent_menu_id, $get_user_id) {
$parent_menu_id = intval($parent_menu_id);
$get_user_id = intval($get_user_id);
$rights = getMenuRights($get_user_id);
$get_sub_menu = mysql_query("SELECT * FROM menu where parent_menu_id='".$parent_menu_id."' AND m_id IN ($rights)");
while($row = mysql_fetch_assoc( $get_sub_menu )) {
$results[] = $row;
}
return $results;
}
?>
<div id='cssmenu'>
<ul>
<?php foreach (getUserMainMenus($get_user_id) as $get_main_menu): ?>
<li class='has-sub'><a href='#'><span><?=$get_main_menu['menu_name']; ?></span></a>
<ul>
<?php foreach (getUserChildMenu($get_main_menu['m_id'], $get_user_id) as $sub_menu): ?>
<li class='has-sub'><a href='<?=$sub_menu['menu_url']; ?>'><span><?=$sub_menu['menu_name']; ?></span></a>
</li>
<?php endforeach; ?>
</ul>
</li>
<?php endforeach; ?>
</ul>
</div>
上面的代码运行正常,但显示了一些错误。
Undefined variable: results in phpfilename.php on line 21(and 32)
另外,我必须在每个菜单和子菜单启动之前检查是否有值,然后显示子菜单。
我该怎么做?
换句话说,在我的菜单和子菜单开始之前,我需要检查值然后显示。如果值,显示子菜单。如果不单独显示主菜单。
任何帮助。
谢谢, 金兹
【问题讨论】:
-
在使用之前,您应该在 while 循环上方将
$results变量声明为$results = array();。 -
如何在 foreach 语句之前检查 if 条件?如果值存在,则显示子菜单,否则离开它
标签: php mysql for-loop drop-down-menu while-loop