2016-05-12 98 views
0

我有3個不同的導航欄,根據用戶的權限不同,必須加載不同的導航欄。我在一個不同的php文件中做了一個函數,所以我使用每個頁面中的代碼。我的問題是,登錄後,沒有導航欄正在加載。有什麼建議可能是什麼問題?登錄後不顯示導航欄

在function.php文件中的代碼

function checkAuth() 
{ 
    session_start(); 


    if(empty($_SESSION['role'])) 
    { 
     require_once('menu.php'); 
    } 

    else if ($_SESSION['role'] == "registered"){ 
     include('regnav.php'); 
    } 

    else if ($_SESSION['role'] =="admin"){ 
     include('adminnav.php'); 
    } 




} 

在每一頁

<?php 
require_once("function.php"); 
checkAuth(); 
?> 
+1

首先,使用'isset()'而不是'empty()'來檢查$ _SESSION ['role']是否存在。其次,你還沒有向我們展示menu.php,它有希望設置$ _SESSION ['角色']。第三,這段代碼第一次運行時,它會運行menu.php,但不會再運行來設置任何導航欄。 –

+0

@SgtAJ我只有menu.php中的導航欄的HTML和編碼的開放,因爲我在函數中調用會話,你認爲這可能是問題嗎? – Chanter

+0

那麼,它上面有你的require_once(「function.php」)和checkAuth()的第一頁將啓動你的會話。在那一點上,顯然$ _SESSION ['role']將會被取消,因爲我們剛剛開始會話,因此您的require_once(「menu.php」)將會運行,但checkAuth看起來並不像它會再次運行,直到我們擊中另一個頁面,因此在checkAuth()再次運行之前,不會顯示導航欄。 –

回答

0

嘗試通過會議結果到函數的代碼乞討:

地方會議呼叫頂部的渲染頁面

session_start(); 
$this_session = $_SESSION['role']; 

require_once("function.php"); 

地方,你想渲染菜單

checkAuth($this_session); 

功能

function checkAuth($this_session) 
{  
    if($this_session == ''){include('menu.php');} 
    elseif($this_session == 'registered'){include('regnav.php');} 
    elseif($this_session == 'admin'){include('adminnav.php');} 

} 
+0

我已經試過這個,但仍然沒有出現:/ – Chanter

+0

@Chanter測試你的會話,以確保它設置:'if(isset($ _ SESSION ['role'])){echo'yesset' ;} else {echo'not set';}' – petebolduc

+0

會話正在工作,因爲我已經做了一個簡單的打印r來打印$ _SESSION ['role']中的值並且正在打印角色,但沒有顯示菜單 – Chanter

0

我會親自調整你的網頁只是一點點,像這樣:

在每個頁面放頂:

session_start(); 
include('function.php'); 
checkAuth(); 

更改功能:

function checkAuth() 
{ 
    if (!isset($_SESSION['role'])) { require_once('menu.php'); } 

    if ($_SESSION['role'] == 'registered') { include('regnav.php'); } 
    if ($_SESSION['role'] == 'admin') { include('adminnav.php'); } 
} 

這裏假設你沒有使用你的導航欄文件的功能,因爲你不調用任何函數寫的導航欄。當然,您可以將兩個導航欄都放入函數中,並將這兩個函數放入單個navbar.php文件中,該文件將包含在每個頁面的頂部(或將函數放入function.php),然後從checkAuth()函數中調用相應的導航欄功能,像這樣:

if ($_SESSION['role'] == 'registered') { navbar_registered(); } 
if ($_SESSION['role'] == 'admin') { navbar_admin(); }