Domanda

Dovrebbe funzionare, quindi sono davvero perplesso sul perché non funziona.

Sto verificando se un utente ha effettuato l'accesso utilizzando un metodo di classe $ session nella parte superiore di ciascuna pagina di amministrazione. Tuttavia, desidero regolare dinamicamente il file di intestazione in base al fatto che un utente abbia effettuato l'accesso e al livello di ruolo che l'utente ha.

Quindi controllo $ session- > is_logged_in () e poi sono andato avanti e ho definito una variabile chiamata $ logg = true ; da usare in seguito. Quindi uso un metodo $ user- > find_by_id ($ session- > id) per creare un nuovo oggetto utente e memorizzare $ user- > role_level in un nuovo var ha chiamato $ role_level per un facile utilizzo.

Tutto ciò accade nella parte superiore della pagina. Più in basso nella pagina passata all'elaborazione del modulo, ecc., È il comando include (" ../_ layouts / header.php ") . Quindi, nel file header.php, uso piccoli controlli come if (! $ Loggato) {...} else {...} . Tuttavia ...

Ricevo i seguenti errori:

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

Come può essere? Sto definendo le variabili nel file prima di includere header.php! Non dovrebbe funzionare?

Cordiali saluti, tutto funzionava bene fino a quando non ho provato a usare $ loggato nel file header.php.

È stato utile?

Soluzione

Le variabili si propagano ai file inclusi, quindi deve essere che la variabile NON sia impostata quando si chiama include: provare a verificare in tal caso, quindi capire perché la variabile non è impostata in quel punto.

Ad esempio, se hai definito $ registrato all'interno di " if " bloccare o all'interno di una funzione, quindi non si propagherà al di fuori di essa: è necessario definirla nell'ambito più esterno (allo stesso livello in cui si chiama l'istruzione include). E devi definirlo nel caso in cui l'utente non abbia effettuato l'accesso, non solo nel caso in cui l'utente abbia effettuato l'accesso. Se la variabile non è inizializzata su false, il controllo se (! $ Loggato) emetterà un avviso. Pronuncia $ logg = false; all'inizio del tuo lavoro.

Altri suggerimenti

Prova qualcosa di molto semplice, come

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

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

Funziona? Forse è un problema al di fuori del tuo codice.

Solo un'opinione ... invece di includere il codice da eseguire nello spazio globale e in base alla definizione di un'altra variabile globale, includere il file ovunque e fare in modo che il codice all'interno di header.php sia organizzato in funzioni appropriate. Quindi dove vuoi l'output di header.php, chiama la funzione appropriata con $ loggato come argomento. Ciò contribuirà a rendere il tuo codice più coerente e più facile da testare (come nei test unitari).

Invece di if (! loggato) if (vuoto ($ registrato)) . Ciò non genererà un avviso nei casi in cui la variabile non è stata impostata.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top