Login con livelli

valient13

Utente Attivo
6 Apr 2012
96
0
0
Sicilia
Salve, ho creato un sito in php, con login,registrazione e un pannello di amministrazione, ora dovrei gestire i livelli cioè che nel pannello di amministrazione possono accedere solamente gli amministratore. ho provato seguendo questa guida, ma non funziona:
http://forum.mrwebmaster.it/php/28827-login-mysql-sessioni-livelli-logout.html

Ho aggiunto un campo di nome livello di tipo enum("A","U") A= Amministratore e U= Utente, poi ho modificato gli utenti già creati e in alcuni gli ho aggiunto la spunta su A.

quando vado sul pannello di amministrazione con un utente non effettua nessun reidirect verso la pagina di errore, vi mostro il codice:

functions.php
PHP:
<?php
# inclusione del file di configurazione
@include_once 'config.php';
# definizione della classe che conterrà i metodi per la gestione degli iscritti
class Iscrizioni {
  
  # definizione del costruttore
  public function __construct() 
  {
    # istanza della classe per la connessione al database
    $data = new DATA_Class();
  }

  # metodo per la registrazione 
  public function registra($nome_reale, $nome_utente, $password, $email) 
  {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE livello = '$livello' nome_utente = '$nome_utente' OR email = '$email'") or die('Errore: ' . mysql_error());
    # controllo sulla presenza di corrispondenze prodotte dal confronto
    $conta = @mysql_num_rows($query);
    # se il confronto non genera corrispondenze..
    if ($conta == 0) 
    {
      # ..si procede con la registrazione..
      $risultato = @mysql_query("INSERT INTO iscritti(nome_utente, password, nome_reale, email) VALUES ('$nome_utente', '$password','$nome_reale','$email')") or die('Errore: ' .mysql_error());
      return $risultato;
    }else{
      # ..altrimenti l'esito della registrazione sarà negativo
      return FALSE;
    }
  }

  # metodo per l'autenticazione
  public function verifica_login($email_o_nome_utente, $password) 
  {
    # cifratura della password
    $password = @sha1($password);
    # confronto degli input con i dati contenuti in tabella
    $query = @mysql_query("SELECT id_utente FROM iscritti WHERE email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente' and password = '$password'") or die('Errore: ' . mysql_error());
    $conta = @mysql_num_rows($query);
    $row = @mysql_fetch_assoc($query);
    # se il confronto genera una corrispondenza..
    if ($conta == 1) 
    {
      # ..viene generata la sessione di login..
           
      $risultato = @mysql_fetch_object($query);
      $_SESSION['login'] = true;
      $_SESSION['id_utente'] = $risultato->id_utente;	
      $_SESSION['livello'] = $row['livello']; 
      return TRUE;
    }else{
      # ..altrimenti l'esito dell'autenticazione sarà negativo
      return FALSE;
    }
  }

  # metodo per la visualizzazione del nome dell'utente loggato
  public function mostra_utente($id_utente) 
  {
    # estrazione del nome reale sulla base dell'identificatore memorizzato in sessione
    $query = @mysql_query("SELECT nome_reale FROM iscritti WHERE id_utente = $id_utente") or die('Errore: ' . mysql_error());
    $risultato = @mysql_fetch_object($query);
    # stampa a video del nome reale dell'utente
    echo $risultato->nome_reale;
  }

  # metodo per il controllo sulla sessione
  public function verifica_sessione() 
  {
    # il metodo restituisce l'informazione relativa alla sessione a patto che questa sia stata inizializzata
    if(isset($_SESSION['login']))
    {
      return $_SESSION['login'];
    }else{
      return FALSE;
    }
  }
  
  
  # metodo per il logout
  # la sessione viene distrutta a seguito di uno specifico input dell'utente
  public function esci() {
    $_SESSION['login'] = FALSE;
    @session_destroy();
    }
  }
?>

fuctionslogin.php
PHP:
<?php
# inizializzazione della sessione
@session_start();
# inclusione del file di funzione
@include_once 'functions.php';
# istanza della classe
$obj = new Iscrizioni();
# chiamata al metodo per la verifica della sessione
# chiamata al metodo per l'autenticazione
if ($_SERVER["REQUEST_METHOD"] == "POST") { 
  $login = $obj->verifica_login(htmlentities($_POST['email_o_nome_utente'], ENT_QUOTES), htmlentities($_POST['password'], ENT_QUOTES));
  # controllo sull'esito del metodo
  if ($login) {
    # redirect in caso di esito positivo
    @header("location:index.php");
    }else{
    # notifica in caso di esito negativo
    @header("location:errore.php");
  }
}

# controllo sul valore di input per il logout
if (isset($_GET['val']) && ($_GET['val'] == 'fine_sessione')) 
{
  # chiamata al metodo per il logout
  $obj->esci();
  # redirezione alla pagina di login
  @header("location:index.php");
 }

?>

e poi nell'header della pagina di amministrazione ho aggiunto questo:
PHP:
if (isset($_SESSION['livello']) && $_SESSION['livello'] == "U") {
    header("location:errore.php");
}

Vi ringrazio anticipamente
 
Modifica questa riga:
PHP:
$query = @mysql_query("SELECT id_utente FROM iscritti WHERE email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente' and password = '$password'") or die('Errore: ' . mysql_error());
Così:
PHP:
$query = @mysql_query("SELECT id_utente, livello FROM iscritti WHERE email = '$email_o_nome_utente' OR nome_utente='$email_o_nome_utente' and password = '$password'") or die('Errore: ' . mysql_error());
Inoltre ti consiglio, per sicurezza, di modificare questa riga:
PHP:
if (isset($_SESSION['livello']) && $_SESSION['livello'] == "U") {
Così:
PHP:
if (isset($_SESSION['livello']) && $_SESSION['livello'] != 'A') {
 

Discussioni simili