2014-04-30 115 views
0

我的代碼和表格多級菜單的工作給出如下與PHP MYSQL和foreach語句

TABLES

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 

CODE

<?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) 

此外,我必須檢查每個菜單和子菜單之前是否有值,然後顯示子菜單。

我怎麼能這樣做?

換句話說,在我的菜單和子菜單開始之前,我需要檢查值然後顯示。如果有值,則顯示子菜單。如果沒有單獨顯示主菜單。

任何幫助。

感謝, Kimz

+0

你應該申報'$ results'變量'$結果= array();'在使用它之前的while循環之上。 – Rikesh

+0

如何在foreach語句之前檢查if條件?我mena如果值是有顯示子菜單其他離開它 – user3350885

回答

1

您試圖追加到變量$results排列爲尚未開始。

添加以下內容:

$results = array(); 

上面的每個:

while() { ... } 

例如:

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"); 
    $results = array(); // add this here 
    while ($row = mysql_fetch_assoc($get_main_menu_query)) { 
    $results[] = $row; 
    } 
    return $results; 
    } 
+0

如何檢查foreach語句之前,如果條件?我mena如果值是有顯示子菜單其他離開它.. – user3350885

+0

@ user3350885每個問題的一個問題。將其作爲單獨的SO問題發佈。 – Latheesan

+0

兄弟,我也這樣做了;;) http://stackoverflow.com/questions/23422565/checking-foreach-statement-values-using-function-php-mysql 請在這裏檢查。 – user3350885