Salve a tutti.
Spiego velocemente la mia situazione: ho creato un sito con alcune pagine protette in PHP, servendomi di un database per immagazzinare i dati di autenticazione degli utenti. Premetto che sono piuttosto a digiuno di PHP: infatti ho dovuto seguire delle indicazioni ben precise per creare i file in PHP, ma alla fine sono riuscito nell'"impresa", con risultati abbastanza soddisfacenti. Qui arriva il mio problema: data l'esigenza di dover differenziare tra utente "standard", amministratore e utente con permessi speciali, ho cercato nel forum una soluzione, e in effetti ne ho trovata una (http://forum.mrwebmaster.it/php/28827-login-mysql-sessioni-livelli-logout.html), ma non so come adattare la soluzione di criric al mio sito.
Mi riferisco a questa particolare sezione di codice:
Il motivo per cui non riesco a integrare questa parte di codice è molto semplice: a differenza di Davide Rossitto, io ho creato una classe, che viene richiamata da una funzione all'inizio della pagina di login, e non ho la più pallida idea di dove mettere questa riga. Se avessi creato come lui un file login.php molto più semplice, adesso probabilmente avrei una mezza idea di cosa fare, ma ho scelto un'altra strada (anche perché mi sembra migliore, a parer mio).
Per completezza posto il codice della mia classe (ovviamente ho tolto tutti i dati riservati):
Ringrazio in anticipo chi mi saprà aiutare!
Spiego velocemente la mia situazione: ho creato un sito con alcune pagine protette in PHP, servendomi di un database per immagazzinare i dati di autenticazione degli utenti. Premetto che sono piuttosto a digiuno di PHP: infatti ho dovuto seguire delle indicazioni ben precise per creare i file in PHP, ma alla fine sono riuscito nell'"impresa", con risultati abbastanza soddisfacenti. Qui arriva il mio problema: data l'esigenza di dover differenziare tra utente "standard", amministratore e utente con permessi speciali, ho cercato nel forum una soluzione, e in effetti ne ho trovata una (http://forum.mrwebmaster.it/php/28827-login-mysql-sessioni-livelli-logout.html), ma non so come adattare la soluzione di criric al mio sito.
Mi riferisco a questa particolare sezione di codice:
PHP:
<?php
$_SESSION['livello'] = $row['livello'];
?>
Il motivo per cui non riesco a integrare questa parte di codice è molto semplice: a differenza di Davide Rossitto, io ho creato una classe, che viene richiamata da una funzione all'inizio della pagina di login, e non ho la più pallida idea di dove mettere questa riga. Se avessi creato come lui un file login.php molto più semplice, adesso probabilmente avrei una mezza idea di cosa fare, ma ho scelto un'altra strada (anche perché mi sembra migliore, a parer mio).
Per completezza posto il codice della mia classe (ovviamente ho tolto tutti i dati riservati):
PHP:
<?php
// error_reporting(E_ALL | E_DEPRECATED | E_STRICT);
Class Users{
/********************************
SETTING
*********************************/
// le credenziali di accesso al database
private $host_db = '';
private $user_db = '';
private $pass_db = '';
private $name_db = '';
// gli url che gestiranno le operazioni di login
public $Urls = array(
'login_page' => '',
'register_page' => ',
'logout_page' => ''
);
/*risorse di connessione*/
protected $conn;
protected $selezione_db;
/*variabili di registrazione*/
protected $reg_username;
protected $reg_email;
protected $reg_pass;
protected $reg_confirm_pass;
protected $reg_crypt_pass;
/*variabili di login*/
protected $login_username;
protected $login_password;
protected $login_cryptpass;
protected $login_iduser;
/*variabili per gestire gli errori*/
public $messages = array(
1 => 'Il campo username è obbligatorio.',
2 => 'Il campo e-mail è obbligatorio.',
3 => 'Il campo password è obbligatorio.',
4 => 'Le due password non coincidono.',
5 => 'Il campo username contiene caratteri non validi. Sono consentiti solo lettere, numeri il i seguenti simboli . _ -.',
6 => 'Inserisci una e-mail con sitassi corretta.',
7 => 'La password scelta è troppo breve. Scegli una password di almeno 8 caratteri.',
8 => 'Esiste già un utente registrato con questo username.',
9 => 'Esiste già un utente registrato con questa e-mail.',
10 => 'Registrazione avvenuta con successo.',
11 => 'Username e/o password sono errati',
12 => '',
13 => 'Logout eseguito con successo.',
14 => 'Per accedere a questa pagina occorre essere loggati.'
);
public $message_script;
// il costruttore attiva la connessione a mysql
public function __construct(){
$this->connessione();
}
/******************
CONNESSIONE A MYSQL
******************/
protected function connessione(){
$this->conn = mysql_connect($this->host_db, $this->user_db, $this->pass_db) or die(mysql_error());
$this->selezione_db = mysql_select_db($this->name_db, $this->conn) or die(mysql_error());
return TRUE;
}
/*************************************
ALCUNI METODI PER ESEGUIRE VALIDAZIONI
*************************************/
// verifica campo generico non vuoto (TRUE se non vuoto)
public function empty_string($string){
$string = trim($string);
if($string==''){
return TRUE;
}
else{
return FALSE;
}
}
// verifica sintassi username
public function is_username($username){
$regex = '/^[a-z0-9\.\-_]{3,30}$/i';
return preg_match($regex, $username);
}
// verifica sintassi email (TRUE se ok)
public function is_email($email){
$regex = '/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+(\.[a-zA-Z0-9-]+)+$/';
return preg_match($regex, $email);
}
// verifica sintassi password (per semplicità solo lunghezza) (TRUE se ok)
public function is_secure_password($password){
if(strlen($password)>=8){
return TRUE;
}
else{
return FALSE;
}
}
/*****************************************************
METODI PER VERIFICARE ESISTENZA DI USERNAME E PASSWORD
******************************************************/
// verifica esistenza username (TRUE se esiste)
public function isset_username($username){
$query = "SELECT COUNT(username) AS count
FROM users
WHERE username='".mysql_real_escape_string($username)."'
LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if($row['count']==1){
return TRUE;
}
else{
return FALSE;
}
}
// verifica esistenza email (TRUE se esiste)
public function isset_email($email){
$query = "SELECT COUNT(email) AS count
FROM users
WHERE email='".mysql_real_escape_string($email)."'
LIMIT 1";
$result = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_array($result);
if($row['count']==1){
return TRUE;
}
else{
return FALSE;
}
}
/******************************
I FORM DI LOGIN E REGISTRAZIONE
******************************/
public function get_login_form(){
$html = '
<form action="' .$this->Urls['login_page']. '" method="post">
<center>
<input type="text" name="username" id="field" placeholder="Username" /><br><br>
<input type="password" name="pass" id="field" placeholder="Password" /><br><br>
<input type="submit" name="login" value="Accedi" id="accedi"/>
<input type="reset" name="reset" value="Reimposta campi" id="accedi"/><br>
<a href="index.php"><button type="button" name="home" id="home"/>Torna alla home</button></a>
</center>
</form>';
return $html;
}
public function get_register_form(){
$html = '
<form action="' .$this->Urls['register_page']. '" method="post">
<center>
<input type="text" name="username" id="field" placeholder="Username" /><br><br>
<input type="text" name="email" id="field" placeholder="E-mail" /><br><br>
<input type="password" name="pass1" id="field" placeholder="Password" /><br><br>
<input type="password" name="pass2" id="field" placeholder="Ripeti password" /><br><br>
<input type="submit" name="register" value="Registrati" id="accedi" />
<input type="reset" name="reset" value="Reimposta campi" id="accedi" />
</center>
</form>';
return $html;
}
/*****************************
LINK LOGOUT
*****************************/
public function get_link_logout(){
if($this->is_logged()){
return '<a href="'.$this->Urls['logout_page'].'" id="logout">Logout</a>';
}
return '';
}
/*******************************
METODO PER CRIPTARE LE PASSWORD
*******************************/
public function crypt_pass($pass){
return sha1($pass);
}
/*****************************
ESECUZIONE DELLA REGISTRAZIONE
******************************/
public function esegui_registrazione(){
// se il form e i suoi input sono stati inviati
if(isset($_POST['register']) AND
isset($_POST['username']) AND
isset($_POST['email']) AND
isset($_POST['pass1']) AND
isset($_POST['pass2'])){
//valorizziamo alcune variabili
$this->reg_username = trim($_POST['username']);
$this->reg_email = trim($_POST['email']);
$this->reg_pass = trim($_POST['pass1']);
$this->reg_confirm_pass = trim($_POST['pass2']);
// criptiamo la password
$this->reg_crypt_pass = $this->crypt_pass($this->reg_pass);
// eseguiamo la validazione degli input
$valid_input = $this->check_input_registrazione();
// se sono validi
if($valid_input===TRUE){
// inseriemo all'interno del database i dati
$this->query_insert_registrazione();
// settiamo il messaggio di successo della registrazione
$this->message_script = 10;
return TRUE;
}
}
return FALSE;
}
// verifica che gli input siano corretti
protected function check_input_registrazione(){
if($this->empty_string($this->reg_username)){
$this->message_script = 1;
return FALSE;
}
else if($this->empty_string($this->reg_email)){
$this->message_script = 2;
return FALSE;
}
else if($this->empty_string($this->reg_pass)){
$this->message_script = 3;
return FALSE;
}
else if($this->reg_pass != $this->reg_confirm_pass){
$this->message_script = 4;
return FALSE;
}
else if(!$this->is_username($this->reg_username)){
$this->message_script = 5;
return FALSE;
}
else if(!$this->is_email($this->reg_email)){
$this->message_script = 6;
return FALSE;
}
else if(!$this->is_secure_password($this->reg_pass)){
$this->message_script = 7;
return FALSE;
}
else if($this->isset_username($this->reg_username)==TRUE){
$this->message_script = 8;
return FALSE;
}
else if($this->isset_email($this->reg_email)==TRUE){
$this->message_script = 9;
return FALSE;
}
return TRUE;
}
// esecuzione della query insert di registrazione
protected function query_insert_registrazione(){
$query = "
INSERT INTO users
SET
username='".mysql_real_escape_string($this->reg_username)."',
pass='".mysql_real_escape_string($this->reg_crypt_pass)."',
email='".mysql_real_escape_string($this->reg_email)."',
data_reg= NOW()";
$result = mysql_query($query) or die(mysql_error());
return mysql_insert_id();
}
/*******************
ESECUZIONE DEL LOGIN
********************/
public function esegui_login(){
// se il form di login e i sui tutti input sono stati inviati
if(isset($_POST['login']) AND isset($_POST['username']) AND isset($_POST['pass'])){
// valorizziamo delle variabili
$this->login_username = trim($_POST['username']);
$this->login_password = trim($_POST['pass']);
// criptiamo la password
$this->login_cryptpass = $this->crypt_pass($this->login_password);
// validiamo i dati (non devono essere vuoti)
$not_empty_input = $this->check_input_login();
// se la validazione è andata a buon fine
if($not_empty_input===TRUE){
// eseguiamo la query e verifichiamo se individua le credenziali
if($this->query_select_login()==TRUE){
// settiamo lo status di utente loggato
$this->set_logged($this->login_iduser);
// settiamo l'username
$this->set_username($this->login_username);
// settiamo il messaggio di successo del login
$this->message_script = 12;
return TRUE;
}
// se la query non ha trovat utenti con quelle credenziali
else{
// settiamo un messaggio di insuccesso dell'operazone
$this->message_script = 11;
}
}
}
return FALSE;
}
// verifica che gli input del login non siano vuoti
protected function check_input_login(){
if($this->empty_string($this->login_username)){
$this->message_script = 1;
return FALSE;
}
else if($this->empty_string($this->login_password)){
$this->message_script = 3;
return FALSE;
}
return TRUE;
}
// esecuzione della qeury per verificare il login
protected function query_select_login(){
$query = "
SELECT id FROM users
WHERE
username='".mysql_real_escape_string($this->login_username)."' AND
pass='".mysql_real_escape_string($this->login_cryptpass)."'";
$result = mysql_query($query) or die(mysql_error());
// se individua l'utente
if(mysql_num_rows($result)==1){
$row = mysql_fetch_array($result);
$this->login_iduser = $row['id'];
/* livelli */
return TRUE;
}
return FALSE;
}
/***********************************
VERIFICA DELLO STATO DI LOGIN UTENTE
***********************************/
// verifica login
public function is_logged(){
return isset($_SESSION['auth']);
}
// set login
protected function set_logged($id_user){
$_SESSION['auth'] = $id_user;
return;
}
// access denied
public function access_denied(){
if(!$this->is_logged()){
header("location: ".$this->Urls['login_page']."?message=14");
exit;
}
return;
}
protected function set_username($username){
$_SESSION['username_logged'] = $username;
return;
}
public function get_username(){
return isset($_SESSION['username_logged']) ? $_SESSION['username_logged'] : '';
}
// logout
public function logout(){
session_unset();
session_destroy();
setcookie(session_name(), '', time()-42000, '/');
header("location: ".$this->Urls['login_page']."?message=13");
return;
}
/*****************************
METODO PER OTTENERE I MESSAGGI
******************************/
public function get_message(){
if(isset($_GET['message'])){
$this->message_script = $_GET['message'];
}
$key = intval($this->message_script);
if(array_key_exists($key, $this->messages)){
return $this->messages[$key];
}
return FALSE;
}
}
?>
Ringrazio in anticipo chi mi saprà aiutare!