Frage

Das sollte funktionieren, also bin ich wirklich verwirrt darüber, warum es nicht funktioniert.

Ich überprüfe, ob ein Benutzer bei der Verwendung einer $ session Klassenmethode am Anfang jeder Admin-Seite angemeldet ist. Allerdings mag ich dynamisch die Header-Datei anpassen, je nachdem, ob ein Benutzer angemeldet ist und auf welcher Ebene Rolle, dass der Benutzer hat.

So prüfe ich $session->is_logged_in() und dann ging ich weiter und definiert eine Variable namens $logged = true; später zu verwenden. Ich habe dann eine $user->find_by_id($session->id) Methode verwenden, um ein neues Benutzerobjekt und speichern $user->role_level in einem neuen var genannt $role_level für einfachen Gebrauch zu erstellen.

Dies alles geschieht in der Nähe der oben auf der Seite. Weiter unten auf der Seite Vergangenheit Formularverarbeitung, etc., ist der include("../_layouts/header.php") Befehl. Dann wird in der header.php Datei, verwende ich wenig Kontrollen wie if(!$logged) { ... } else { ... }. Allerdings ...

Ich erhalte die folgenden Fehler:

Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 119
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 131
Notice: Undefined variable: logged in /home/hips/html/_layouts/header.php on line 138

Wie kann das sein? Ich bin die Definition des Vars in der Datei, bevor ich header.php enthalten! Sollte das nicht funktionieren?

FYI, alles funktioniert gut, bis ich versuchte $logged in der header.php Datei zu verwenden.

War es hilfreich?

Lösung

Variablen auf die darin enthaltenen Dateien propagieren, soll es so sein muss, dass die Variable nicht gesetzt ist, wenn Sie den Anruf gehören. Versuchen, wenn die Überprüfung so, dann herauszufinden, warum wird die Variable nicht an diesem Punkt gesetzt

Zum Beispiel, wenn Sie $ innerhalb des „if“ Blockes angemeldet definiert oder innerhalb einer Funktion, dann wird es nicht außerhalb davon propagieren: Sie kann es in dem äußersten Umfang (auf der gleichen Ebene definieren müssen, an den Sie den Anruf Include-Anweisung). Und Sie müssen es für den Fall festlegen, dass der Benutzer nicht angemeldet ist, nicht nur für den Fall, wenn der Benutzer angemeldet ist. Wenn die Variablen nicht auf false initialisiert wird, Check if (! $ Angemeldet) wird Warnung aus. Sagen Sie angemeldet $ = false; zu Beginn Ihrer Arbeit.

Andere Tipps

Versuchen Sie, etwas sehr einfach, wie

// file1.php
$var = "foobar";

// file2.php
include("file1.php"); // or require("file1.php");
die($var);

Funktioniert es? Vielleicht ist es ein Problem außerhalb Ihres Codes.

Nur eine Meinung ... statt Code auch im globalen Raum und in Abhängigkeit von anderen globalen Variablen auszuführen definiert wird, enthalten die Dateien wann und wo haben Sie den Code innerhalb header.php in entsprechende Funktionen organisiert werden. Dann, wenn Sie die Ausgabe von header.php möchten, rufen Sie die entsprechende Funktion mit dem als Argument angemeldet $. Dies wird helfen, Ihren Code mehr Zusammenhalt und leichter zu testen (wie in Unit-Tests) zu machen.

Statt if (!logged), versuchen if (empty($logged)). Das wird keine Mitteilung in Fällen erzeugen, wo die Variable nicht festgelegt wurde.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top