Question

Cela devrait fonctionner, alors je suis vraiment perplexe sur la raison pour laquelle cela ne fonctionne pas.

Je vérifie si un utilisateur est connecté à l'aide d'une méthode de classe $ session en haut de chaque page d'administration. Cependant, je souhaite ajuster de manière dynamique le fichier d'en-tête en fonction de la connexion d'un utilisateur et de son niveau de rôle.

Donc, je vérifie $ session- > is_logged_in () , puis je suis allé de l'avant et j'ai défini une variable appelée $ notée = true ; à utiliser plus tard. J'utilise ensuite une méthode $ user- > find_by_id ($ session- > id) pour créer un nouvel objet utilisateur et stocker $ user- > role_level dans un nouveau var appelé $ role_level pour une utilisation facile.

Tout cela se passe près du haut de la page. Plus bas dans la page après le traitement du formulaire, etc., vous trouverez la commande include (" ../_ layouts / header.php ") . Ensuite, dans le fichier header.php, j’utilise de petites vérifications comme si (! $ Notée) {...} sinon {...} . Cependant ...

Je reçois les erreurs suivantes:

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

Comment cela peut-il être? Je définis les vars dans le fichier avant d'inclure header.php! Ça ne devrait pas marcher?

Pour info, tout fonctionnait bien jusqu'à ce que j'essaye d'utiliser $ logs dans le fichier header.php.

Était-ce utile?

La solution

Les variables se propagent dans les fichiers inclus. La variable n'est donc PAS définie lorsque vous appelez l'include: essayez de vérifier si c'est le cas, puis découvrez pourquoi la variable n'est pas définie à ce stade.

Par exemple, si vous avez défini $ enregistré à l’intérieur du " if " bloquer ou dans une fonction, elle ne se propagera pas en dehors de celle-ci: vous devez la définir dans la portée la plus externe (au même niveau que celui auquel vous appelez l'instruction include). Et vous devez le définir pour le cas où l'utilisateur n'est pas connecté, pas seulement pour le cas où l'utilisateur est connecté. Si la variable n'est pas initialisée à false, le contrôle si (! $ Enregistré) émettra un avertissement. Dites $ connecté = faux; au début de votre travail.

Autres conseils

Essayez quelque chose de très simple, comme

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

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

Est-ce que ça marche? Peut-être que c'est un problème en dehors de votre code.

Juste un avis ... au lieu d’inclure du code à exécuter dans l’espace global et en fonction d’une autre variable globale en cours de définition, incluez votre fichier où que vous soyez et organisez le code dans header.php en fonctions appropriées. Ensuite, là où vous voulez la sortie de header.php, appelez la fonction appropriée avec le $ logaronné comme argument. Cela contribuera à rendre votre code plus cohérent et plus facile à tester (comme dans les tests unitaires).

Au lieu de si (! journalisé) si (vide ($ journalisé)) . Cela ne générera pas d'avis dans les cas où la variable n'a pas été définie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top