2016-05-12 7 views
0

Ich habe 3 verschiedene Navigationsleisten, eine andere 1 muss je nach der Autorität des Benutzers geladen werden. Ich habe eine Funktion in einer anderen PHP-Datei gemacht, also verwende ich den Code auf jeder Seite. Mein Problem ist, dass nach dem Einloggen keine Navigationsleiste geladen wird. Irgendwelche Vorschläge zu was könnte das Problem sein?Keine Navigationsleiste nach der Anmeldung angezeigt

-Code in function.php Datei

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'); 
    } 




} 

Code in dem Betteln jeder Seite

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

Verwenden Sie zuerst 'isset()' anstelle von 'empty()', um die Existenz von $ _SESSION ['role'] zu überprüfen. Zweitens hast du uns menu.php nicht gezeigt, was hoffentlich $ _SESSION ['role'] setzt. Drittens, wenn dieser Code das erste Mal ausgeführt wird, wird menu.php ausgeführt, aber er wird nicht erneut ausgeführt, um eine Navigationsleiste zu setzen. –

+0

@SgtAJ Ich habe nur die Öffnung des HTML und Kodierung der Navigationsleiste in der menu.php, da ich die Sitzung in der Funktion rufe, denkst du, dass das das Problem sein könnte? – Chanter

+0

Nun, die erste Seite, die Ihre require_once ("function.php") und checkAuth() darauf hat, wird Ihre Sitzung starten. An diesem Punkt wird natürlich $ _SESSION ['role'] nicht gesetzt, da wir gerade die Sitzung gestartet haben, also wird Ihre require_once ("menu.php") ausgeführt, aber checkAuth sieht nicht so aus, als ob sie noch einmal ausgeführt würde eine andere Seite drücken, so dass keine Navigationsleisten angezeigt werden, bis checkAuth() erneut ausgeführt wird. –

Antwort

0

Versuchen Sie, die Sitzung Ergebnis in die Funktion übergeben:

Ort Sitzung Anruf an der Spitze der Wiedergabeseite

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

require_once("function.php"); 

Ort, wo Sie Menü

checkAuth($this_session); 

die Funktion

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

Ich habe das versucht, aber immer noch nichts erscheint:/ – Chanter

+0

@Chanter testen Sie Ihre Sitzung, um sicherzustellen, dass es gesetzt ist: 'if (isset ($ _ SESSION ['role'])) {echo 'ja isset' ;} else {echo 'nicht gesetzt';} ' – petebolduc

+0

Die Sitzung funktioniert, da ich einen einfachen Ausdruck erstellt habe, um den Wert in $ _SESSION ['role'] zu drucken und die Rolle wird gedruckt, aber es wird kein Menü angezeigt – Chanter

0

Ich persönlich würde Ihre Seiten nur ein wenig restrukturieren, wie dies machen möchten:

Am Anfang jeder Seite Put :

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

Ändern Sie die Funktion:

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

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

Dies setzt voraus, Sie sind nicht Funktionen in Ihrer navbar-Dateien verwenden, da Sie die navbar keine Funktionen aufrufen zu schreiben. Sie könnten natürlich beide Navbars in Funktionen einfügen und beide Funktionen in eine einzige navbar.php Datei einfügen, die Sie am Anfang jeder Seite einfügen würden (oder die Funktionen in function.php setzen), dann die entsprechende Navbar-Funktion aus der checkAuth() Funktion aufrufen, wie folgt:

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