29 Apr 2011 106 commenti
Una della richieste più frequesti degli utenti che si avvicinano al php è sicuramente lo sviluppo di un sistema di login.
Le funzionalità che dovrà svolgere tale applicativo saranno almeno tre:
- registrazione degli utenti;
- il login degli utenti;
- impedire l'accesso a pagine o contentuti agli utenti non loggati.
Il semplice script che oggi vi propongo vi consentirà di implementare nei vostri siti tali funzionalità.
Il database
CREATE TABLE IF NOT EXISTS `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) NOT NULL, `pass` varchar(50) NOT NULL, `email` varchar(255) NOT NULL, `data_reg` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
La classe
<?php // error_reporting(E_ALL | E_DEPRECATED | E_STRICT); Class Users{ /******************************** SETTING *********************************/ // le credenziali di accesso al database private $host_db = 'localhost'; private $user_db = 'root'; private $pass_db = ''; private $name_db = 'test'; // gli url che gestinranno le operazioni di login public $Urls = array( 'login_page' => 'http://localhost/test/guida_semple/login.php', 'register_page' => 'http://localhost/test/guida_semple/registrazione.php', 'logout_page' => 'http://localhost/test/guida_semple/logout.php' ); /******************************************* se non sai ciò che fai non toccare più nulla *******************************************/ /*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 email è 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 email con sitassi corretta.', 7 => 'La password scelta è eccessivamente 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 email.', 10 => 'Registrazione effettuata con successo.', 11 => 'Login errato', 12 => 'Login eseguito con successo.', 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" id="form_login"> <fieldset> <legend>Login<legend> <label for="login_user">Username</label> <input type="text" name="username" id="login_user" /> <label for="login_pass">Password</label> <input type="password" name="pass" id="login_pass" /> <input type="submit" name="login" value="login" id="login_submit"/> </fieldset> </form>'; return $html; } public function get_register_form(){ $html = ' <form action="' .$this->Urls['register_page']. '" method="post" id="form_register"> <fieldset> <legend>Registrazione<legend> <label for="reg_user">Username*</label> <input type="text" name="username" id="reg_user" /> <label for="reg_email">Email*</label> <input type="text" name="email" id="reg_email" /> <label for="reg_pass1">Password*</label> <input type="password" name="pass1" id="reg_pass1" /> <label for="reg_pass2">Confirm Password*</label> <input type="password" name="pass2" id="reg_pass2" /> <input type="submit" name="register" value="registra" id="reg_submit" /> <input type="reset" name="reset" value="cancella" id="reg_reset" /> </fieldset> </form>'; return $html; } /***************************** LINK LOGOUT *****************************/ public function get_link_logout(){ if($this->is_logged()){ return '<a href="'.$this->Urls['logout_page'].'" class="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']; 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; } } ?>
La pagina di registrazione
<?php session_start(); require_once('lib/Users.class.php'); $login = New Users; if($login->esegui_registrazione()==TRUE){ header("location: ".$login->Urls['login_page']."?message=".$login->message_script); exit; } ?> <html> <head> <title>Register page</title> <link rel="stylesheet" href="css/style.css" type="text/css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script> <script type="text/javascript" src="js/validation_reg.js"></script> </head> <body> <div id="content"> <?php if($login->get_message()) : ?> <div class="message"><p><?php echo $login->get_message(); ?></p></div> <?php endif; ?> <?php echo $login->get_register_form(); ?> </div> </body> </html>
La pagina di login
<?php session_start(); require_once('lib/Users.class.php'); $login = New Users; $login->esegui_login(); ?> <html> <head> <title>Login page</title> <link rel="stylesheet" href="css/style.css" type="text/css" /> <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery.validate/1.7/jquery.validate.js"></script> <script type="text/javascript" src="js/validation_login.js"></script> </head> <body> <div id="content"> <?php if($login->get_message()) : ?> <div class="message"><p><?php echo $login->get_message(); ?></p></div> <?php endif; ?> <?php if(!$login->is_logged()) : ?> <?php echo $login->get_login_form(); ?> <?php else: ?> <p>Benvenuto <strong><?php echo $login->get_username(); ?></strong></p> <?php echo $login->get_link_logout(); ?> <?php endif; ?> </div> </body> </html>
Pagina di logout
<?php session_start(); require_once('lib/Users.class.php'); $login = New Users; $login->logout(); ?>
Pagina protetta
<?php session_start(); require_once('lib/Users.class.php'); $login = New Users; $login->access_denied(); ?> <html> <head> <title>Pagina protetta</title> <link rel="stylesheet" href="css/style.css" type="text/css" /> </head> <body> <body> <h1>Questa è una pagina protetta</h1> <p>Potrai accedere a questa pagina solo hai eseguito il login.</p> </body> </html>
Pagina con contenuti protetti
<?php session_start(); require_once('lib/Users.class.php'); $login = New Users; ?> <html> <head> <title>Pagina con contenuti protetti</title> <link rel="stylesheet" href="css/style.css" type="text/css" /> </head> <body> <body> <h1>Questa è una pagina contiene contenuti protetti.</h1> <p>Questi sono contenuti leggibili a tutti.</p> <?php if($login->is_logged()) : ?> <div id="contenuti_protetti"> <p>Il testo contenuto in questo div sarà visualizzabile solo agli utenti loggati.</p> </div> <?php endif; ?> </body> </html>
Il setting e il costruttore della classe
Gli unici settaggi che la nostra classe richiede saranno i parametri di connessione a mysql e gli URL delle nostre pagine di registrazione, login e logout.
Il costruttore si occuperà di eseguire il metodo connessione() che (come è facile intuire) attiva la connessione al nostro database.
La registrazione
La registrazione degli utenti altro non è che l'inserimento all'interno del tabella users dei dati immessi dall'utente all'interno di un form. Quindi, abbiamo anzitutto bisogno di modulo di registrazione.
Per ottenere tale il form registrazione utilizzeremo il metodo get_register_form() mentre l'operazione di registrazione vera e propria verrà gestita attraverso il metodo esegui_registrazione().
L'inserimento all'interno della tabella users avverrà con il metodo query_insert_registrazione() la quale prima di essere eseguita richiede, oltre che il criptaggio della password con il metodo crypt_pass(), il controllo degli input immessi dall'utente.
Infatti, l'operazione più delicata da eseguire è la verifica che i dei dati immessi siano "corretti" ed in particolare:
- username:
- obbligatorio;
- con una lunghezza minima di 3 caratteri;
- verifica della sintassi;
- verifica che non si tratti di un utente già registrato.
- email:
- obbligatoria;
- verifica della sintassi;
- verifica che non si tratti di un'email già registrata.
- Password
- obbligatoria;
- con una lunghezza minima di 8 caratteri.
- Conferma password
- Corrispondenza tra le due password
La validazione degli input
Per eseguire le operazioni di validazione all'interno della nostra classe ci serviremo di alcuni metodi ed in particolare:
- empty_string() riceve come parametro una stringa e se vuota restituisce TRUE;
- is_username() verifica se la stringa ricevuta come parametro ha una sintassi corretta per l'username; in particolare verificherà che questo abbia una lunghezza compresa fra 3 e 30 caratteri; saranno consentite a-z, A-Z, 0-9 e i simboli . _ - e ritorna un valore bolenano, TRUE se ha una sintassi corretta.
- is_email() verifica se la stringa ricevuta come parametro ha una sintassi corretta per un indirizzo email; ritorna un valore bolenano, TRUE se ha una sintassi corretta.
- is_secure_password() verifica se una determinata stringa può essere una password; al fine di semplificare il codice verrà semplicemente verificato che abbia una lunghezza di almeno 8 caratteri.
- isset_username() verifica se un determinato username risulta essere già registrato; ritorna un valore bolenano, TRUE se già registrato;
- isset_email() verifica se un determinato indirizzo email risulta essere già registrato; ritorna un valore bolenano, TRUE se già registrato;
Il controllo in sede di registrazione verranno cumulativamete eseguito per tutti i campi con il metodo check_input_registrazione() che ritornerà un valore boleano TRUE se gli input sono tutti correti. Analogamente avverrà in fase di login con il metodo check_input_login().
Queste operazioni di validazione potranno essere effettuate anche lato client con javascript e ajax. Nel file da scaricare le validazioni sono state eseguire con jquery validation che è stato oggetto del precedente articolo in cui si spiegava come implementarlo in un form di registrazione del tutto identico a quello qui presentato.
Il login
In termini banali, l'utente inserendo le corrette credenziali diventerà loggato. Ci occorrerà anzitutto un fom per il login che sarà prodotto dal metodo get_login_form().
L'esecuzione del login avverrà tramite il metodo esegui_login().
Quest'ultimo quando il form verrà inviato cripta la password con il medoto crypt_pass() e verifica che i campi non siano vuoti con il metodo check_input_login().
Se la validazione è andata a buon fine eseguiamo la query su database.
A questo punto, se la query individua l'utente occorrerà loggarlo. Ma cosa significa tecnicamente loggare un utente?
Dal punto di vista tecnico lo status di "utente loggato" è determinato dalla esistenza della variabile di sessione che attesta l'avvenuta autenticazione; nel nostro script tale variabile sarà $_SESSION['auth'].
Detto ciò ne deriva che:
- verificare che un utente è loggato significherà verificare l'esistenza della variabile $_SESSION['auth']; si veda a tale scopo il metodo is_logged();
- loggare l'utente equivale a creargli la variabile di sessione $_SESSION['auth']; si veda a tale il metodo scopo set_logged();
- proteggere una pagina web consiste nel vietare l'accesso a chi non "possiede" la variabile di sessione $_SESSION['auth']; si veda a tale scopo il metodo access_denied();
- eseguire il logout significa cancellare le variabili di sessioni tra di esse $_SESSION['auth'] e il relativo cookie di sessione; si veda a tale scopo il metodo logout();
Conclusioni
Aldilà del presente script, l'obiettivo che mi sono posto è anzitutto di chiarire alcuni degli aspetti basilari legati a tale genere di applicazione e illustrare i meccanismi esseziali che lo regolano. In questo mio tantativo ho volutamente trascurato alcuni aspetti preferendo focalizzarmi su quelli che, secondo il mio parere, sono il core di un sistema di login.
Ad esempio, un aspetto di cruciale importanza legata ai sistemi di login è la sicurezza: argomento complesso e difficile da trattare e semplificare. Questo script costituisce un buon compromesso tra sicurezza e semplicità ma molto altro si sarebbe potuto fare.
L'obiettivo, prima ancora che fornire uno script, è stato quello quello di fornire un semplice tutorial per comprendere da dove partire per realizzare un sistema di login.
La classe Users, infatti, può essere ulteriormente sviluppata e migliorata con nuove funzionalità nonchè garantire maggiori livelli di sicurezza, ma se state agli inizi questo script è un ottimo punto di partenza.
Se avete qualche esigenza specifica e non sapete come fare o per qualsiasi problema o dubbio lasciatemi un commento e sarò lieto di aiutarvi.
Olimpio Romanella
Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.
Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.
106 Commenti presenti
After playing only 26 games last season as a rookie, Eddie looks poised to move into the Wizard’s rotation and provide a scoring punch off the bench.
mi sto avvicinando al php, trovo questo articolo molto utile
@Punix: alla fine son riuscito a mettere in funzione tutto , peccato soltanto che non sia presente l'e-mail di conferma di registrazione
Ottimi consigli! Complimenti per il sito e per il contenuto fantastico!
@Francesco: dovevi semplicemente scrivere i dati del tuo dominio :)
Avrei bisogno di uno script login con limitazione delle registrazioni giornaliere. Esempio 50 al giorno, completo di countdown giornaliero sui posti disponibili per la registrazione.
ciao, cosa mi consigli implementare in termini di sicurezza?
ok provato di tutto, le credenziali del db sono corrette, controllate piu volte, gli url che gestinranno le operazioni di login non riesco a gestire ci rinuncio credo che i miei 40 anni mi rendano vecio-.-" grazie comunque:)
@Olimpio Romanella: Ti ringrazio, provo a controllarle piu dettagliatamente. Devo dirti una cosa, visto che anche io faccio template in Html Ti rispetto molto e mi fa piacere averti scoperto come blog sei il primo che risponde, in tutti i tutorial che ho trovato mai nessuno rispondeva, per me sei degno di fiducia buon lavoro con amicizia Francesco
@Olimpio Romanella: Ti ringrazio, provo a controllarle piu dettagliatamente. Devo dirti una cosa, visto che anche io faccio template in Html Ti rispetto molto e mi fa piacere averti scoperto come blog sei il primo che risponde, in tutti i tutorial che ho trovato mai nessuno rispondeva, per me sei degno di fiducia buon lavoro con amicizia Francesco
@Francesco: le credenziali di accesso al database sono errate
ciao bellissimo script ottima guida.. la mia domanda al riguardo dopo effettuata la registrazione come faccio a stampare a video l'username email? mi puoi contatare su facebook? https://www.facebook.com/alessiobossgallo
Ciao e complimenti,
non sono molto esperto...
ma volevo chiederti come rendere il mio databate remoto e non locale?
grazie anticipatamente
@Luca G.: considero questo script datato. Quello che chiedi e' possibile ma non chiedermi di implementarlo perche' non ho tempo ultimanente.
Grazie infinitamente per lo script funziona a perfezione l'ho provato solo in locale e pur essendo un neofita di php sono riuscito a farlo funzionare, mi piacerebbe sapere se potresti implementare il tutto con una mail di conferma registrazione.
E' il miglior script che ho trovato online.
@Mario: tutto si puo' implementare e richiede modifiche piu' o meno importanti a seconda delle funzionalita' che si intende integrare.
nel caso in particolare che esponi dovrai aggiungere alla tabella users un campo DATETIME e al momento del login lo valorizzi con il NOW() di MySql.
Mi reindirizza sempre nella pagina di logout
Come risolvo?
(Appena effettuo il login o la registrazione)
Mi da errore:
Access denied for user '2646238'@'localhost' to database 'test'
Ciao, complimenti per lo script. Sto creando un sito dove con delle monete virtuali puoi sbloccare varie cose, solo che non so come far visualizzare il numero delle monete ad un determinato utente nella pagina privata. Grazie
@Andrea: nessuna email di conferma e le pagine che non fanno "nulla" devono essere personalizzate a tuo piacimento a seconda delle tue specifiche esigenze.
Ciao intanto Grazie per la tua guida , ma ci sono alcune cose che ho non ho eseguito bene o non ci sono,
Dopo la registrazione , non viene spedita una mail al registrante?
e poi, l'accesso alla pagina protetta come avviene , dopo il login viene stampato a video "Autenticazione avvenuta con successo" ma di li non accade nulla, sono un po acerbo in materia , mi puoi illuminare?Grazie (se mi risponderai) altrimenti grazie lo stesso per il tuo lavoro...
Ciao, ho risolto tutto, il problema stava nell'url delle pagine nella liberia php non le avevo scritte bene ;-).
Ciao, ho scaricato tutto cio e dopo le varie modifiche, database, url, ho inserito il tutto nel server, ma purtroppo non funziona nulla.
posso avere un'aiuto?
grazie
ciao, per cominciare ti ringrazio anticipatamente per il tempo che dedichi a tutti, volevo semplicemente chiederti come faccio a inserire il codice che si trova all'inizio di questa pagina, sicuramente questo database va inserito su mysql, il mio l'ho acquistato con Aruba,ma sinceramente non so da dove iniziare.
ho scaricato il tuo pacchetto e l'ho lanciato, e naturalmente senza avere esito positivo, sicuramente non avendo inserito il codice nel database mi da errore che riguarda appunto mysql.
mi puoi aiutare??...
grazia ancora e buon lavoro
Francesco
@tiger23:
rettifico:
non sono riuscito a fare solo:
-link di verifica registrazione
-codice captha in registrazione
-codice captha al secondo tentativo di login
ps
volevo sapere se il tuo scrypt era a prova di sql injection oppure devo provvedere! Grazie
@tiger23:
rettifico:
non sono riuscito a fare solo:
-link di verifica registrazione
-codice captha in registrazione
-codice captha al secondo tentativo di login
ps
volevo sapere se il tuo scrypt era a prova di sql injection oppure devo provvedere! Grazie
ciao,ottimo scrypt e molto curato. complimenti davvero!
io avrei bisogno di implementare:
-una verifica email, tramite link.
-un altro campo email per verificare la corretta digitazione(come avviene con la password)
-un nuovo campo obbligatorio (mi serve il campo"nazionalita") messo in un select HTML.
-un codice captha per la registrazione, e un codice captha che esce al secondo tentativo di login!
Help please. Grazie
Ciao! e complimenti per il codice davvero ben fatto.
Come posso implementarlo in modo da gestire i privilegi dell'utente? (admin, editor, publisher ecc..)
Grazie mille!
Innanzitutto grazie per questa guida anche se e passatto parecchio tempo da questo post...ho incominciato da poco con lo studio del php e sto riscontrando problemi nello script che non riesco a risolvere.
per quanto riguarda la pagina di registrazione, dopo acer inserito tutti i campi e cliccando sull'invio della registrazione, la pagina resta muta, nel senso che non ha nessun processo, nessun messaggio nessun caricamento di pagina e quindi i dati non vengono inseriti neanche nel db.
E poi per quanto riguarda il login inserendo dati che sono gia presenti nel database mi da un errore nella php user.class al n. 325 che nel mio foglio sarebbe : //eseguiamo la query e verifichiamo se individua le credenziali
if($this->query_select_login()==TRUE)
{
...sono giorni che rileggo e rileggo tutto il codice ma non riesc a trovare il probelma.LA RINGRAZIO
@oly1982: Ciao oly1982 hai una mail a cui scriverti direttamente ??
Ciao Claudio
Ciao, non ho capito, una volta creato tutto, come far diventare una pagina protetta.
Grazie, comunque molto bravo!
@Dylan: non credo che lo script possa avere problemi tra browser. Gli aspetti del css li ho solo abbozzati... non erano sicuramente l'oggetto principale dello script proposto.
Complimenti per lo script, mi e' stato utilissimo. Noto che su ie8 pero' non visualizzo correttamente il box, dipende forse da un problema di css, mi sapresti dare qualche dritta? Ho fatto alcune modifiche e non vorrei aver fatto qualche casino.
grazie.
complimenti sei in gamba, ti seguo con molta attenzione, BRAVO
Ok,ho risolto...lol
Ho semplicemente cambiato l'estensione della mia home page,da .html a .php. :)
@Gino: non saprei dirti. ma non credo derivi dal mio script.
@Laura: basta gestire correttamente i metodi messi a disposizione della classe. In particolare vediti la parte chiamata "PAGINA CON CONTENUTI PROTETTI" (nel tuo caso i contenuti protetti sono costituiti dall'ulteriore form)
Complimenti, io sto provando con qualche modifica ma solo di adattamente al mio dbase personale. Per il mio sito invece l'utente puo' registrarsi ma dovrei inplementare una sorta di livello per cui un amministratore convalida l'utente all'accesso. Poi non ho afferato il funzionamento dei link esterni di convalida funzionano anche se non collegato all'adsl.
Cmq ottima classe pulita e chiara.
Saluti Mimmo
hai indicato un percorso errato al file da includere.
require_once('cartella/tuo_spazio_web/Users.class.php');
ciao io volevo spaere, ho creato il database tutto, ma non so come inserire queste opzioni
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
non ho ben capito neanche a cosa servano, ma premettendo che sto cercando di metterlo su altervista, non so come inserire quelle opzioni, mi potresti aiutare???
ciao mi sapresti dire come portare tutto su un host del tipo altervista?? scarico i file, poi faccio il download e dopo??
si io so l' html e le basi del php come la funzione echo input e quelle cose la, ma non ho capito, come fare ad importare i dati di download nel mio host ed a farli funzionare
ciao ti volevo chiedere, non sono molto esperto di queste cose, come posso implementarlo sul mio sito?? del tipo lo scarico e poi?? grazie mille
Ciao, ho bisogno di un aiuto. Come posso fare una pagina per Admin per poter cancellare gli utenti???
Adesso invece se si accede direttamente alla pagina protetta senza essere loggati mi da una pagina bianca, ho forse sbagliato qualcosa ?
Nessuno sa come posso risolvere? l'action avente come link index_page, avente a sua volta un indirizzo ip con porta diversa da quella 80 mi da pagina bianca.
Potete aiutarmi in qualche modo?
public $Urls = array(
'index_page' => 'http://192.168.1.1:90/home.php',
'login_page' => 'http://192.168.1.1:90/index.php',
'logout_page' => 'http://localhost/index.php?p=logout'
);
Si riesce a fare che ogni utente ha una pagina diversa da visualizzare?
Salve,
Complimenti per il codice davvero bello e funzionante
Chiedo inoltre come ovviare il problema dei link con porta che sia diversa da quella 80
public $Urls = array(
'index_page' => 'http://192.168.1.1:90/home.php',
'login_page' => 'http://192.168.1.1:90/index.php',
'logout_page' => 'http://localhost/index.php?p=logout'
);
Qualsiasi azione di redirect o di submit mi da pagina vuota.
ciao, complimenti per la lezione.
tuttavia ho riscontrato un problema: quando si chiude il browser, i cookies vengono cancellati e l'utente deve loggarsi nuovamente.
mi potresti suggerire una soluzione per creare un cookie in modo tale da far rimanere l'utente loggato per un tempo da me stabilito?
grazie
ri-Ciao oly1982 ,
per adesso io mi sono limitata a far funzionare il tuo pacchetto di file (che ho scaricato) sul mio server locale cambiando solo i dati di connessione al db e i link alle pagine.
Comunque i dati che inserisco nella pagina login.php corrispondono a quelli che sono nel db quindi non so proprio che pesci prendere! :-(
Grazie
Ti ho risposto privatamente via email
Rino
01 July 2019 ore 13:59