Guida alla gestione degli utenti, utilizzando il Php e database MySql
Molte persone, si chiedono come può essere inserita la registrazione degli utenti nel proprio sito; perchè sia possibile, dovete essere dotati di uno spazio web con un database MySql ed un pannello phpMyAdmin (il mio consiglio è di usare Netsons).
Per prima cosa, è necessario preparare il database per accogliere i dati che gli verranno inviati tramite i form: accediamo al database MySql (per Netsons mysql.netsons.org), apriamo la finestra delle query , presente nel menu laterale sinistro ed inserite questo comando:
CODICE
CREATE TABLE sessioni ( uid CHAR(32) NOT NULL, user_id INT UNSIGNED NOT NULL, creation_date INT UNSIGNED NOT NULL, INDEX(uid) );
Questo comando creerà una tabella, contenente i seguenti campi: uid serve per identificare la sessione, user_id servirà per ricondurre tale sessione all'utente mentre creation_date esprimerà la data di creazione (in secondi) della sessione, per verificare se sia scaduta o meno. Creiamo adesso la tabella più importante, quella che accoglierà i dati degli utenti; per crearla usate questo comando, riscrivendolo come prima, nella finestra delle query:
CODICE
CREATE TABLE utenti ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL, email VARCHAR(30) NOT NULL, username VARCHAR(30) NOT NULL, password CHAR(32) NOT NULL, PRIMARY KEY(id), INDEX(username, password) );
Il campo id conterrà un numero per identificare l'utente e, con l'attributo AUTO_INCREMENT farà in modo che, qualora un utente si registri, il numero presente aumenterà di 1 rispetto al precedente; i campi name, username ed email conterranno gli omonimi dati. Per quanto riguarda la password, non sarà visibile normalmente, ma verrà criptata tramite l'algoritmo MD5. Eseguiamo ora un terzo comando, che creerà dei campi essenziali per contenere i dati per la conferma della registrazione:
CODICE
ALTER TABLE utenti ADD indirizzo VARCHAR( 100 ) NOT NULL, ADD occupazione VARCHAR( 100 ) NOT NULL, ADD temp SET( '0', '1' ) NOT NULL, ADD regdate VARCHAR( 11 ) NOT NULL, ADD uid VARCHAR( 32 ) NOT NULL;
Esaminiamo di nuovo, uno ad uno, i seguenti campi, tralasciando indirizzo ed occupazione dei quali si capisce lo scopo: temp, il quale avrà valore 0 o 1, servirà per lo stato di convalida: 0 indicherà che l'account è sato convalidato e perciò può effettuare il login, 1 indicherà che l'account in questione necessita ancora di una convalida, che dovrà essere effettuata tramite il link inviato tramite mail; regdate conterrà la data iin cui è stata effettuata la registrazione, mentre uid conterrà il codice necessario per la conferma.
Siamo ora giunti alla parte principale della guida: la realizzazione dei file in Php e dei form a loro associati necessari per eseguire la registrazione, logout e login. Iniziamo creando un file config.php:
$value = trim($value); if($value == "") return "Il campo non può essere lasciato vuoto"; $query = mysql_query(" SELECT id FROM ".$_CONFIG['table_utenti']." WHERE username='".$value."'"); if(mysql_num_rows($query) != 0) return "Nome utente già utilizzato";
return true; }
function check_global($value){ global $_CONFIG;
$value = trim($value); if($value == "") return "Il campo non può essere lasciato vuoto";
Ricordatevi di modificare anche $_CONFIG['expire'] = 60; che indica la durata della sessione (è preimpostata a 1 minuto); inoltre, al posto di "http://tuo_sito/", dovete inserire l'url della directory nella quale sono contenuti i vari file che creeremo successivamente (esempio: http://mio_sito.ext/miadirectory/).
Dopo aver inserito le impostazioni del database, passiamo a compilare le librerie per l'autenticazione e la registrazione: File reg.lib.php:
Dovete modificare, in questo file, solamente il seguente campo: nome@mio_dominio.ext, inserendo la vostra mail, o quella che volete venga visualizzata dal ricevente.
$result = mysql_query("SELECT creation_date FROM ".$_CONFIG['table_sessioni']." WHERE uid='".auth_get_uid()."'"); if($result){ $data = mysql_fetch_array($result); if($data['creation_date']){ if($data['creation_date'] + $_CONFIG['expire'] <= time()){ switch(auth_get_option("TRANSICTION METHOD")){ case AUTH_USE_COOKIE: setcookie('uid'); break; case AUTH_USE_LINK: global $_GET; $_GET['uid'] = NULL; break; } } } }
mysql_query(" DELETE FROM ".$_CONFIG['table_sessioni']." WHERE creation_date + ".$_CONFIG['expire']." <= ".time() ); }
function auth_get_uid(){
$uid = NULL;
switch(auth_get_option("TRANSICTION METHOD")){ case AUTH_USE_COOKIE: global $_COOKIE; $uid = $_COOKIE['uid']; break; case AUTH_USE_LINK: global $_GET; $uid = $_GET['uid']; break; }
$result = mysql_query("SELECT U.name as name, U.username as username FROM ".$_CONFIG['table_sessioni']." S,".$_CONFIG['table_utenti']." U WHERE S.user_id = U.id and S.uid = '".$uid."'");
if(is_null($uid)){ return false; }else{ mysql_query(" DELETE FROM ".$_CONFIG['table_sessioni']." WHERE uid = '".$uid."'" ); return true; } } ?>
In questa libreria, non dovete modificare niente, lasciatela invariata. Adesso, mettiamo tutti i file creati in una cartella che chiameremo include. Finite le librerie, pensiamo ora a creare i moduli per il login, logut, registrazione e conferma: login.php:
switch($status){ case AUTH_LOGGED: header("Refresh: 5;URL=index.php"); echo '<div align="center">Sei gia connesso ... attendi il reindirizzamento</div>'; break; case AUTH_INVALID_PARAMS: header("Refresh: 5;URL=index.php"); echo '<div align="center">Hai inserito dati non corretti ... attendi il reindirizzamento</div>'; break; case AUTH_LOGEDD_IN: switch(auth_get_option("TRANSICTION METHOD")){ case AUTH_USE_LINK: header("Refresh: 5;URL=index.php?uid=".$uid); break; case AUTH_USE_COOKIE: header("Refresh: 5;URL=index.php"); setcookie('uid', $uid, time()+3600*365); break; case AUTH_USE_SESSION: header("Refresh: 5;URL=index.php"); $_SESSION['uid'] = $uid; break; } echo '<div align="center">Ciao '.$user['name'].' ... attendi il reindirizzamento</div>'; break; case AUTH_FAILED: header("Refresh: 5;URL=index.php"); echo '<div align="center">Fallimento durante il tentativo di connessione ... attendi il reindirizzamento</div>'; break; } ?>
Potrete far comparire questo form quando un utente non è loggato con il seguente script in php:
CODICE
<?php switch($status){ case AUTH_LOGGED: ?> Benvenuto <?=$user["username"];?>! <?php break; case AUTH_NOT_LOGGED: ?> Non sei loggato, esegui il login ...form per il login... <?php break;} ?>
Ricordatevi di inserire in cima alla pagina, quest'altro script, necessario al funzionamento di tutti gli script; va inserito in tutte le pagine nel quale volete far comparire il nome dell'utente o dati legati a lui:
if(isset($_GET['id']) and strlen($_GET['id']) == 32){ reg_clean_expired(); $status = reg_confirm($_GET['id']);
switch($status){ case REG_SUCCESS: echo "La tua registrazione è stata confermata; ora puoi effettuare il login."; break; case REG_FAILED: echo "La registrazione non può essere confermata, probabilemente poichè è scaduta."; break; } } ?>
File registrati.php, che conterrà i tag di input nel quale immettere i propri dati, che verranno inviati al database:
switch($status){ case REG_ERRORS: ?> <span class="style1">Sono stati rilevati i seguenti errori:</span><br> <?php foreach($ret as $error) printf("<b>%s</b>: %s<br>", $error[0], $error[1]); ?> <br>Premere "indietro" per modificare i dati <?php break; case REG_FAILED: echo "Registrazione Fallita a causa di un errore interno."; break; case REG_SUCCESS: echo "Registrazione avvenuta con successo.<br> Vi è stata inviata una email contente le istruzioni per confermare la registrazione."; break; } } ?> </body> </html>
Finalmente, la parte riguardante i form e le librerie è terminata. Dovremmo avere, a questo punto, una struttura simile a questa nella root del sito:
Non riesco a creare questi file php: cosa devo fare? Scarica da qui il file zip completo di tutti i file Php. Per modificarli, usa un normale editor di testi, come Blocco Note o WordPad (racomando WordPad per l'allineamento dei codici).
Non riesco ad alterare la tabella utenti, cosa faccio? Cancella la tabella utenti esistente e inserisci questo comando nella finestra delle query:
CODICE
CREATE TABLE utenti ( id INT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(30) NOT NULL, email VARCHAR(30) NOT NULL, username VARCHAR(30) NOT NULL, password CHAR(32) NOT NULL, indirizzo VARCHAR( 100 ) NOT NULL, occupazione VARCHAR( 100 ) NOT NULL, temp SET( '0', '1' ) NOT NULL, regdate VARCHAR( 11 ) NOT NULL, uid VARCHAR( 32 ) NOT NULL, PRIMARY KEY(id), INDEX(username, password) );
Un utente non riesce a registrarsi, come faccio ad inserirlo tra gli utenti registrati? Puoi farlo tramite una query:
CODICE
INSERT INTO utenti (name, email, username, password) VALUES ('Andrea', 'mia_mail','Jolteon',MD5('mia_password'));
Ad un utente non è stata recapitata la mail di conferma, come faccio a confermarlo? Modifica il valore temp, riferito all'utente, da 1 a 0.
Voglio creare un messaggio di benvenuto personalizzato: come faccio a far comparire il nome dell'utente? Per prima cosa, assicurati di aver inserito questo script in cima alla pagina; il codice per farlo apparire è <?=$user["username"];?>
usando il codice precedente, compare l'username: come faccio a far comparire il nome? Sostituisci <?=$user["username"];?> con <?=$user["name"];?>.
Voglio fare un riepilogo dei dati: come faccio? Utilizzando lo stesso script di prima, ma adattandolo alle esigenze:
Voglio abilitare un solo utente a visualizzare una pagina: che codice devo usare? Ricordati di aver inserito questo script in cima alla pagina; il codice è questo:
CODICE
<?php if ($user["username"] == 'Jolteon') {echo "pagina da visualizzare";} else {echo "mi dispiace, ma non sei abilitato a visualizzare questa pagina";} ?>
Voglio recuperare una password, come faccio? Le password, essendo criptate in MD5, non possono ricondurre alla parola di partenza; è solamente possibile sostituirla.
Un utente ha perso la password: come faccio a generarne un'altra? Nel campo password, della tabella utenti nel database, sostituisci il valore esistente di 32 cifre, in formato MD5, con un medesimo dello stesso valore; Qui poterte trovare un generatore che trasfromerà una parola o una combinazione di numeri in formato MD5: sostituite il vecchio valore con quello appena generato e la password corrente sarà quella che avete precedentemente convertito in MD5.