Ruoli utenti - problema

ancora un problema ....

perché ricevo un pagina bianca invece di stampare i vari messaggi ai vari ruoli?

La pagina che sta in index.php con array 1,2 funziona normale e solo questa pagina nuova che dovrebbe essere vista dalla parte degli utenti registrati etc..

questo è il var_dump: string(1) "3"
ti incollo il codice:
PHP:
<?php
session_start();
// qui usavi isset() che sarà sempre TRUE, dunque permetteva l'accesso a tutti
// inoltre usiamo in_array() con controllo di uguaglianza di tipo strict (===)

if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2, 3), true)) {  
  
	$level = isset($_SESSION['user_level']) ? (int)$_SESSION['user_level'] : false;  
	
	
	switch ($level) {  
    case 1:
        // messaggio per ruolo 1
		$login_msg = "Salve, Admin andare nella pagina dove inserire qualcosa <a href=\"admin\">entra</a>";

        break;
    case 2:
        // messaggio per ruolo 2
		$login_msg = "Salve, Moderatore poi andare nella pagina dove inserire qualcosa <a href=\"admin\">entra</a>";
		break; 
    case 3:
        $login_msg = "Salve, utente poi andare nella pagina guestbook";
		break;


   case false:
         $login_msg = "Non hai acceso ad accedere in questa area.. fai i login <a href=\"login.php\">Login</a>";
        break;
	}  
}

if(isset($login_error)){ echo $login_error;}
if(isset($login_msg)){ echo $login_msg;} else {

}
?>

come mai??

la login_msg .. fa sparire tutto e scrive i messaggi dei ruoli..

ma mi da pagina bianca.. e non so come mai..

idee?

grazie mille.
 
Ma scusa, io non capisco dove valorizzi la variabile $login_error?
E perché non usi un die() come ho fatto io, che è molto più semplice?

ciao la login_error serve per quando voglio stampare l'errore sopra ad ogni cosa..
invece la login_msg .. stampa al posto dove c'è le cose.. (funziona all'incotraio della login_error),

comunque è vero che basta che levo il !in_array e metto in_array? levo il questo simbolo: !

e giusto?

grazie mille.
 
scusa... ma perché die mi sembra che taglia la parte in basso del mio cms..ecco perché stampo le variabile ..

grazie mille.

aspetto risposta.
 
Se togli il punto esclamativo davanti a in_array l'errore verrà (teoricamente) mostrato agli utenti autorizzati, e non credo sia quello che stai cercando.
Inoltre non ho ben capito qual è il tuo problema attuale. Puoi rispiegare cercando di essere più chiaro?
 
ciao, il probelama e quello che non facceva apparire i messaggi ai diversi ruoli degli utenti..

ma apre una pagina bianca..senza dare dei messagi..ai ruoli diversi.

come mai?

grazie mille.
aspetto risposta.
 
Vuol dire che il ruolo non è né 1, né 2, né 3, né false... Strano. Prova ad aggiungere:
PHP:
$level = isset($_SESSION['user_level']) ? (int)$_SESSION['user_level'] : false;
var_dump($level);

ho fatto ... ma pagina bianca..e non mi da nemmeno il vardump. e nenanche nel sorgente html..

però ho notato se toglio il simbolo ! .. allora fa i messaggi a modo..

come mai?

ma questo ! che significato ha?

perché se lo levo funziona e se lo metto da pagina bianca.

come mai?
 
È strano, questa condizione:
PHP:
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2, 3), true)) {
Va letta come segue:
Se la variabile di sessione user_level non è settata, o il suo valore convertito ad intero non fa parte dell'array (1, 2, 3), allora esegui le seguenti istruzioni.
Non è questo quello che devi ottenere?
 
ciao, ho notato anche cosi.. la condizione funziona:
PHP:
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'],array(0), true)) {

quindi ??

Scusa, ma non ci capisco più nulla.

in poche parole devo fare entrare tutti gli utenti registrati e verificare chi è l'amministratore e moderatore e l'utente semplice..
tutto qui..

ma non ci sto capendo più nulla...

mi dici come fare?

grazie mille.
buona serata.
 
Stai confondendo anche me... Comunque, prova in quest'altro modo: crea un file in cui inserirai questa funzione:
PHP:
function getRoleMessage()
{
    if (!isset($_SESSION)) {
        session_start();
    }
    
    if (!isset($_SESSION['user_level'])) {
        $message = 'Devi effettuare il login.';
    }

    switch ((int)$_SESSION['user_level']) {
        case 1:
            // il ruolo è 1
            break;

        case 2:
            // il ruolo è 2
            break;

        case 3:
            // il ruolo è 3
            break;

        default:
            // il ruolo non è né 1, né 2, né 3
    }

    return isset($message) ? $message : true;
}
Quindi includi il file dove ti serve e usa così la funzione:
PHP:
$login_msg = getRoleMessage();

if ($login_msg !== true) {
    echo $login_msg;
} else {
    // ...
}
 
ok, ora cosi funziona solo che quando non c'è la sessione da un messaggio che non è definita la variabile che sta qui:
PHP:
  switch ((int)$_SESSION['user_level']) {

mi dici come rimediare questo notice.?


ti ringrazio ...molto
buona serata.
 
Stai confondendo anche me... Comunque, prova in quest'altro modo: crea un file in cui inserirai questa funzione:
PHP:
function getRoleMessage()
{
    if (!isset($_SESSION)) {
        session_start();
    }
    
    if (!isset($_SESSION['user_level'])) {
        $message = 'Devi effettuare il login.';
    }

    switch ((int)$_SESSION['user_level']) {
        case 1:
            // il ruolo è 1
            break;

        case 2:
            // il ruolo è 2
            break;

        case 3:
            // il ruolo è 3
            break;

        default:
            // il ruolo non è né 1, né 2, né 3
    }

    return isset($message) ? $message : true;
}
Quindi includi il file dove ti serve e usa così la funzione:
PHP:
$login_msg = getRoleMessage();

if ($login_msg !== true) {
    echo $login_msg;
} else {
    // ...
}

scusa, molto ma lo devo mettere sotto ad quello che abbiamo già scritto :
cosi:
PHP:
<?php

// qui usavi isset() che sarà sempre TRUE, dunque permetteva l'accesso a tutti
// inoltre usiamo in_array() con controllo di uguaglianza di tipo strict (===)

if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1,2,3), true)) {  
	
	
	 
}

$login_msg = getRoleMessage();

if ($login_msg !== true) {
    echo $login_msg;
} else {
    // ...
}  
?>

grazie mille. però cosi funziona e stampa i messaggi..

dimmi se va bene.
 
booooooo.. io non sto capendo più nulla....

riformuliamo la domanda..

devo fare un area riservata e qui ok... e la parte admin l'abbiamo risolta...ed entrano solo ruolo 1 e ruolo 2..

ma non bastava aggiungere all'array il numero 3 ,

invece di fare questo mega casino?

fermiamoci un'attimo e poi ragiono come fare.. e ne riparliamo quando ho le idee chiare..

ma io dico non bastava fare solo 1,2,3 ? come devono essere?

vedi pagina: del simbolo:
http://www.allwebfree.it/php_operatori.php#operatorilogici

quindi?

grazie mille.
buona serata.
 
Ultima modifica:
Dunque, una cosa per volta. L'errore nella funzione lo puoi correggere così:
PHP:
if (!isset($_SESSION['user_level'])) { 
    return 'Devi effettuare il login.'; 
}
L'if a questo punto lo puoi anche togliere.

Nell'array il numero 3 già c'è... non capisco.
 
ciao. mi è riuscito cosi:

code:
user.php
PHP:
<?php
session_start();
if (!isset($_SESSION['user_level']) || !in_array((int)$_SESSION['user_level'], array(1, 2,3), true)) {  
    
	echo "<h2>Non sei entrato fare i login</h2>";
	
} else
{
$login_msg = getRoleMessage();
    echo $login_msg;
	echo "<h2>Prova</h2>";
}
?>

tua funzione che ho dovuto tolgiere qualche pezzo di codice..

PHP:
function getRoleMessage()
{
   $level = isset($_SESSION['user_level']) ? (int)$_SESSION['user_level'] : false; 
	switch ($level) {
    //switch ((int)$_SESSION['user_level']) {
        case 1:
            // il ruolo è 1
			$message =  "Benvenuto amministrarore".$_SESSION["name"].", poi andare in <a href=\"admin\">Admin</a>";
            break;

        case 2:
            // il ruolo è 2
			$message =  "Benvenuto Moderatore".$_SESSION["name"].", poi andare in <a href=\"admin\">Admin</a>";
            break;

        case 3:
            // il ruolo è 3
			$message =  "Benvenuto utente: ".$_SESSION["name"]."";
            break;

        default:
            // il ruolo non è né 1, né 2, né 3
    }

    return isset($message) ? $message : true;
}

e cosi funziona.. e posso far apparire quello che è nascoto dagli utenti non registrati al sito..

e in più posso inseire altri ruoli nell'array e funziona.. al meno spero poi dimmi tu.

per ora cosi avendo solo 3 ruoli inseriti nell'archvio funziona tutto normalmente.. ho anche inserito un quarto ruolo nullo che non è chiamato da nessuna parte e
quello non entra da nessuna parte...perché il sistema ne vede solo 3..

e qui funziona al meno per me e per te non saprei se è cosi..

ti ringrazio mi poi controllare se ho scritto bene..?

grazie mille.
buona serata.
 

Discussioni simili