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
ciao, una domanda:
In quale file devo implementare i parametri di connessione a mysql e gli URL delle pagine di registrazione, login e logout?
grazie.
La mia email per le risposte :
rino2002_2014@libero.it
Grazie mille, è un progetto. Mi serve.
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 ciao francesco...a me funziona QUASI tutto alla perfezione...l'unica cosa che non va è il codice per proteggere la pagina da chi non ha effettuato il login...infatti la pagina risulta accessibile sempre .... e mi restituisce in alto proprio la funzione scritta : access_denied(); ... sembra che ci sia un problema proprio in questa funzione..sapresti aiutarmi a risolvere?
edit: se l utente non è loggato invece di restituire un messaggio di errore nel visualizzare la pagina è possibile invece che sia rimandato alla pagina di login? grazie
@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
salve io ho un problema ho fatto tutto corretto mi esce solo questa scritta quando provo a registrarmi Unable to connectio penso di aver commesso un errore nella pagina users.class.php dati di registrazione per il db nella sezione url che gestinranno le operazioni di login i link devo modificarli indicando il nome del mio database, e della cartella in cui è contenuta la pagina, una cosa simile:
'login_page' => 'http://localhost/my_frenkywebtutorial/simple_login/login.php',
'register_page' => 'http://localhost/my_frenkywebtutorial/simple_login/registrazione.php',
'logout_page' => 'http://localhost/my_frenkywebtutorial/simple_login/logout.php' ma ricevo questo errore.
sono alle prime armi e ancora faccio fatica ad orientarmi qualcuno cortesemente puo aiutarmi grazie della disponibilità
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
so che e datato come script ma volevo chiederti una cosa io ho creato un sito con login registrazione e tutto
vorrei solo sapere come faccio a fare che il form login (dopo avvenuto login dell'utent) e non e più visibile e al suo posto magari compare il nick dell'utente grazie mille e attendo risposta
Ottimo sistema di login, semplice e ben commentato, qualcuno è riuscito ad implementare la classe con l'invio della mail anche solo con il riepilogo dei dati?
@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.
Ciao, ho qualche problema con la creazione della tabella users nel database. Il database è quello standard su server gratuito di altervista. Ho copiato e incollato il codice che hai inserito nel file, ma mi da errore.
Quando vado a cliccare sul pulsante "esegui" mi appare questa scritta: "Valore mancante nel form".
Ho provato anche ad eseguirlo lo stesso e mi da errore su: CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
Poi sotto appare la scritta "No database selected"
Premetto che non so dove mettere le mani.
C'è qualcosa da modificare nel codice oppure il problema è il server di altervista?
Grazie
ciao ringrazierò chiunque possa aiutarmi, voi tutti siete piu esperti di me. ragazzi io ho il mio sito altervista, e ho gia creato il tabella user [url href=http://i62.tinypic.com/148qazn.png]Foto[/url] io mi chiedo adesso le altre pagine: Pagina di login, pagina di logout, Pagina di registrazione ecc. devo andare in gestioni file e crearle [url href=http://i58.tinypic.com/2ihpgef.png]qui[/url] ? Vi prego aiutatemi per favore :( sono indietro da 3 settimane ma nessuno mi aiuta. vi prego voglio un login nel sito, anke uno semplicissimo, non sono uno molto bravo. aiutatemi vi prego. Grazie infinite
@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.
Ottima guida e dettagliata!
Ho la necessità di registrare i accessi (login e logout) in una tabella e ulteriormente visualizzarli (ultimi x accessi) in una pagina .
In più, come fare che dopo il login al utente li compare un messaggio tipo "Il tuo ultimo accesso risale a xx/xx/xxxx"
Complimenti
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 complimenti per il lavoro...mi sto avvicinando a php...ho creato la tabella users e modificato i parametri di connessione al db, non capisco però..quando clicco sul pulsante registra, nella pagina di registrazione, non invia i dati ma mi salva il file registrazione.php e così pure per il login..ma cosa c'è che non va?? grazie
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
grazie mille per la condivisione, ho adattato il tutto al mio sito e devo dire che funziona bene... avrei bisogno di un secondo login denominato staff, ho crato un nuovo database chiamato staff... come posso dire al php di connetersi al database staff e non più users? ho riletto mille volte il php ma non riesco a capire dove porre tale modifica
Grazie molte per la condivisione di questo lavoro, ho imparato molto.
Se ha tempo di rispondere gradirei sapere qual'è il metodo di recupero password.
grazie
Ciao volevo ringraziarti per aver messo a disposizione questo codice assolutamente il migliore che c'è...
Vorrei chiederti se sarebbe possibile avere una versione con la mail di conferma perchè ho provato da solo ma niente.
Grazie
@Olimpio Romanella:
Ottimo Script, il migliore sicuramente che ho trovato!
volevo sapere se è possibile avere anche un'implementazione per l'email conferma??? con la password, email ed username.
poi volevo sapere se e possibile mettere il controllo captcha
@tiger23: lo script che ho presentato qui non dispone le funzionalità che chiedi ma con qualche piccola modifica puoi benissimamente implementarlo. lo script è a prova di sql injection ma per interagire con il database oggi ci sono funzioni più evolute (PDO).
@Federico: anzitutto grazie tante per i complimenti. Un aggiornatina a questo script vorrei dargliela e prendendo spunto dai commenti potrei integrare alcune delle cose che mi chiedono, ma purtroppo non ho molto tempo libero.
Riguardo al tuo problema in base alle poche cose che riferisci non saprei risponderti.
@Francesco: quel codice lo puoi inserire tramite PhpMyAdmin e ti creerà una tabella mysql all'interno del tuo database.
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
ciao,
come si vede dalla quantità di commenti questa guida è una delle prime che salta all'occhio cercando su google a riguardo (in italiano almeno), nonostante sia un po' vecchiotta.
sto cercando di implementarla su di un sito fatto da me, ma ho dei problemi di implementazione su cui lavoro da un po'. in particolare avevo già creato il form di registrazione e di login e sostituiti ai tuoi funzionano, ma mi danno dei problemi (non inviano i dati, disabilitando i controlli di campo ho scoperto che mi inviano campi vuoti, nonostante a colpi di echo abbia visto che il $_POST tra le pagine c'è, ovviamente. non riesce a valorizzare le variabili per qualche motivo. almeno credo). comunque volevo farti i complimenti, perchè nonostante le mie difficoltà da newbie la logica con cui hai creato il tutto rende molto intuitivo smanettare col codice. a tale proposito potresti dare un'aggiornatina alla guida prima o poi, visto che continua a saltare su nei risultati di google ;-). complimenti anche per tutto il resto del sito, molto interessante
@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!
@roberta: mi puoi dire esattamente cosa è che non funziona?
Salve a tutti, li script nn funziona cn Explorer 10 e successivi. Sapreste dirmi xkè ?
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.
@Sam: la risposta che ti ha fornito lo script è più che eloquente. La tabella 'users' npn esiste all'interno del tuo database chiamato 'test'
Ciao ho scaricato il file e l'ho estratto nella cartella C:\wamp\www
Quando vado sul file di registrazione (registrazione.php) e clicco su registra non appare nessuna schermata e mi lascia i dati dentro il form come li ho scritti. Quindi ho provato ad andare nel form di login.php e ho provato a fare il login con l'username e password che avevo scritto su registrazione.php , però quando clicco su login mi appare una pagina bianca con scritto
Io ho creato una tabella su phpmyadmin e l'ho chiamata users e poi dentro ho inserito il file dump.sql e quindi mi ha creato la tabella. Le due cose che non riesco a capire sono la registrazione quando uno clicca su registra rimane sulla stessa pagina con tutte le mia informazioni inserite e poi il login che mi viene la scritta
Table 'test.users' doesn't exist
Mi sembra ovvio che se non mi funziona la registrazione non posso neanche fare il login. come posso fare?
Ciao e grazie
il mio form non risponde, ho acceso php e mysql ma non riesco a fare la registrazione, ho verificato che il database test funzioni ma continua a non rispondere. Come posso fare?
<?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';
private $host_db = 'localhost';
private $user_db = 'adriano_admin';
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'
// );
public $Urls = array(
'login_page' => 'http://localhost/~adriano/simple_login/login.php',
'register_page' => 'http://localhost/~adriano/simple_login/registrazione.php',
'logout_page' => 'http://localhost/~adriano/simple_login/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;
}
}
?>
Ottimo Script, il migliore sicuramente che ho trovato! ehm ehm.. è possibile avere anche un'implementazione per l'email confirm prima della registrazione?
Ciao, ho trovato molto interessante l'argomento ed ultimamente mi è stato parecchio d'aiuto il tuo supporto. :)
Sto cercando di implementare l'invio di una email di conferma, ma non so come, non parte.
Se hai tempo e voglia potresti darci un'occhiata?
Posto il codice qui. Come vedi l'ho inserito alla fine dell'esecuzione della registrazione. Non capisco davvero dove sbaglio. Non è importante per me la conferma tramite link dell'utente, quanto che gli arrivi un'email con i propri dati e l'avvenuta registrazione.
/*****************************
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['nome']) AND
isset($_POST['cognome']) AND
isset($_POST['azienda']) AND
isset($_POST['email']) AND
isset($_POST['citta']) AND
isset($_POST['telefono']) AND
isset($_POST['pass1']) AND
isset($_POST['pass2'])){
//valorizziamo alcune variabili
$this->reg_username = trim($_POST['username']);
$this->reg_nome = trim($_POST['nome']);
$this->reg_cognome = trim($_POST['cognome']);
$this->reg_azienda = trim($_POST['azienda']);
$this->reg_email = trim($_POST['email']);
$this->reg_citta = trim($_POST['citta']);
$this->reg_telefono = trim($_POST['telefono']);
$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;
}
}
$to = $_POST["email"];
$toname = $_POST["username"];
$subject = "Completa la tua registrazione";
$boundary = "==MP_Bound_xyccr948x==";
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: multipart/alternative; boundary=\"$boundary\"\r\n";
$headers .= "From: noreply@tuoserver.it";
$html_msg = "<center>";
$html_msg .= "<table width=\"500\" border=0 cellpadding=\"4\">";
$html_msg .= "<tr><td align=\"center\"> ";
$html_msg .= "</td></tr>";
$html_msg .= "<tr><td>Questi sono i dati della tua registrazione:";
$html_msg .= "</td></tr><tr><td>Username: <font color=\"red\">" . $this->reg_username . "</font>";
$html_msg .= "</td></tr><tr><td>Password: <font color=\"red\">" . $this->reg_pass . "</font>";
$html_msg .= "</td></tr><tr><td align=\"center\"> ";
$html_msg .= "</td></tr></table></center>";
$confirmmessage = "Salve " . $toname . ",\n\n";
$confirmmessage .= "per completare la tua registrazione devi cliccare sul link sottostante:\n\n";
$confirmmessage .= $html_msg . "\n\n";
$confirmmessage .= "<a href=\"http://localhost/confirm_reg.php" .
"?id=$msgid\">Clicca qui per confermare la tua registrazione</a>";
$message = "This is a Multipart Message in MIME format\n";
$message .= "--$boundary\n";
$message .= "Content-type: text/html; charset=iso-8859-1\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= $confirmmessage . "\n";
$message .= "--$boundary--";
$mailsent = mail($to, $subject, $message, $headers);
if ($mailsent)
{
echo "Salve" . $toname . ",<br>";
echo "Un messaggio è stato inviato all'indirizzo <b>" . $to . "</b> da te fornito.<br><br>";
echo "IMPORTANTE:<br>";
echo "Per completare la registrazione al sito devi aprire la tua casella e-mail, leggere il messaggio di conferma e cliccare sul link che troverai all'interno.<br><br>";
} else {
echo "Errore durante l'invio dell'e-mail.";
}
return FALSE;
}
complimenti sei in gamba, ti seguo con molta attenzione, BRAVO
Ciao e grazie per i complimenti che mi rivolgi.
Non è immediato aggiungere le funzionalità che desideri, sopratutto se non hai praticità con php.
Devi eseguire le seguenti modifiche:
1) aggiungere i campi alla tabella del database (eventualmente aiutandoti con phpmyadmin);
2) modificare il metodo get_register_form() e aggiungere gli ulteriori input che desideri;
3) modificare il metodo check_input_registrazione() per validare i nuovi campi aggiunti;
4) modificare il metodo esegui_registrazione(), con particolare riferimento alla query INSERT in esso presente.
Buon giorno,
prima di porle il mio problema vorrei ringraziarla per questo script, mi ha dato l'opportunità di capire meglio il funzionamento del linguaggio di programmazione PHP. In questi giorni sto creando un sito internet e mi è stato richiesto di inserire uno script che facesse il login del mio sito internet ed ho trovato il suo script, quello che vorrei chiederLe è questo: nel DB oltre all'username, la password, l'e-mail e la data di registrazione vorrei inserire anche altri dati, per esempio il nome, il cognome, l'indirizzo, la città, la provincia ed altri due o tre dettagli, come devo fare per modificare lo script che riguarda il database?
Intanto le auguro una buona serata e Le porgo i miei ringraziamenti per l'aiuto che mi darà.
Buongiorno, innanzi tutto complimenti per questa pagina di login e registrazione dell'utente, ne ho provati tantissimi ma questo è l'unico che funziona veramente.
Ribadisco che funziona tutto a meraviglia, però ho solo un piccolo problema, quando faccio la registrazione oppure il login, mi compare questo tipo di errore: Table 'test.users' doesn't exist, e non riesco a vedere chi si è registrato nel mio phpmyadmin. Potresti darmi una dritta per risolvere il problema?
Grazie infinite ed ancora complimenti vivissimi!
Forse non del tutto..
Quando registro un nuovo utente (con la tabella del database vuota) mi dice che l'utente è già registrato e lo inserisce nella tabella!Non ho modificato il codice e non capisco dove sta il problema perché nel codice stesso tutto segue un filo logico giusto..Cosa ne pensi?
Ok,ho risolto...lol
Ho semplicemente cambiato l'estensione della mia home page,da .html a .php. :)
Ciao,
Ho cercato per molto tempo su internet una persona come te che mi poteva spiegare un pò di php e in particolare il codice per fare la registrazione,il log in e il log out.Il tuo codice soddisfa pienamente le mie richieste,anzi,offre anche qualcosa in più come il contenuto e la pagina protetta.Grazie mille veramente!!! :D
Il mio problema è il seguente: dopo aver letto e capito il codice php(lo sto studiando da poco :) ) ho deciso di scaricarlo.Il codice funziona però quando copio il codice per il log in per esempio sulla home page del mio sito,mi fa vedere solo il codice come testo!Uso Dreamweaver CS5.5 e ho cambiato tutte le variabili che dovevo cambiare però niente.Ora,la mia domanda è:pensi che sia una cosa che riguarda Dreamweaver,visto che i tag del codice php non li segna con un colore diverso,oppure devo cambiare qualcosa?Io ho cambiato solo l'URL della pagina di log in inserendo l'indirizzo della mia home page visto che il form per l'accesso dovrebbe comparire su una finestra dopo viene premuto il tasto "Log in"(ho usato l'animazione avgrund di jquery).
Grazie in anticipo e complimenti per il sito,l'ho trovato molto utile per uno come me che sta all'inizio per quanto riguarda l'web design! :D
@Piero: quello che richiederebbe aggiungere dei campi alla tabella, inserire ulteriori metodi, eseguire lievi modifiche ai metodi esistenti; non è difficile ma è un pò complesso da spiegare in un commento.
Salve, ho appena provato il tuo script e va tutto a meraviglia !
Vorrei però chiederti una cosa:
è possibile validare in qualche modo la registrazione ?
Intendo che quando un utente si registra, obbligatoriamente deve confermare la sua registrazione, validandola via email.
@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)
Ho lanciato il suo form in locale (login.php o registrazione.php), dopo la convalida a video mi dà questa scritta senza nessuna registrazione nella tabella:
Ê)?¨.ƒ„èþò~ÿn?JV•ðì{î]IrbÆpÓHÖŠóÏëß`Ž’êCŤÅ2{ð¡^·ü=J³È™öoTµbë ‘Ž'¬-z#x‰&ߥ’[`ÒgÜŸä2
Perchè?
Ciao, ottimo sistema di registrazione e perfettamente funzionante. Non ho avuto molti problemi, ora però vorrei capire come precedere con un sito che sto provando.
Ho realizzato le varie pagine di registrazione e login, gli utenti si loggano perfettamente e le pagine hanno un contenuto protetto. Volendo inserire un ulteriore form (visibile per utenti loggati) con inserimento di dati in un'altra tabella del database, devo modificare il file users.class.php?? Cosa dovrei modificare e/o eliminare esattamente??
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
Ciao mi rendo conto che è passato tempo da questa discussione. Se possibile volevo chiederti un chiarimento io ho scaricato ho estratto in un cartellina, ho modificato solo il file class.users in questo modo:
<?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 = 'jollylight';
private $pass_db = '';
private $name_db = 'my_jollylight';
// gli url che gestinranno le operazioni di login
public $Urls = array(
'login_page' => 'http://www.jollylight.altervista.org/login.php',
'register_page' => 'http://www.jollylight.altervista.org/registrazione.php',
'logout_page' => 'http://www.jollylight.altervista.org/logout.php'
);
dopo di che ho salvato tutto nella root dello dominio.QUando provo a fare una registrazione compilo i dati confermo ma rimane nella stessa pagina di registrazione senza dare segno di nulla.
Mi puoi dire cosa sbaglio?
Grazie per l'aiuto
Ciao mi rendo conto che è passato tempo da questa discussione. Se possibile volevo chiederti un chiarimento io ho scaricato ho estratto in un cartellina, ho modificato solo il file class.users in questo modo:
<?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 = 'jollylight';
private $pass_db = '';
private $name_db = 'my_jollylight';
// gli url che gestinranno le operazioni di login
public $Urls = array(
'login_page' => 'http://www.jollylight.altervista.org/login.php',
'register_page' => 'http://www.jollylight.altervista.org/registrazione.php',
'logout_page' => 'http://www.jollylight.altervista.org/logout.php'
);
dopo di che ho salvato tutto nella root dello dominio.QUando provo a fare una registrazione compilo i dati confermo ma rimane nella stessa pagina di registrazione senza dare segno di nulla.
Mi puoi dire cosa sbaglio?
Grazie per l'aiuto
hai indicato un percorso errato al file da includere.
require_once('cartella/tuo_spazio_web/Users.class.php');
ciao mi da un errore alla riga tre dove c' è require_once('lib/Users.class.php');
l' errore è questo
Fatal error: require_once() [function.require]: Failed opening required 'lib/Users.class.php' (include_path='.:') in /membri/oneviewonwcoin/contenutoprotetto.php on line 3
come posso risolvere??
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
Cia Ginanluca,
Le info e gli esempi presenti sono molto semplici da comprendere, ma occorre un minimo di manualità almeno con il linguaggio di markup (x/html) e l'abc di php per poterlo integrare correttamente.
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???
Ciao, volevo chiederti, se era possibile aggiungere alla tua classe l'invio di una mail per confermare la registrazione. Ho provato a modificarla usando questa funzione
public function VerifyUser()
{
$sql = "SELECT id FROM users WHERE key_control='$_GET[key]'";
$this->connessione();
$res = mysql_query($sql,$this->conn);
if($row = mysql_fetch_array($res))
{
$query = "UPDATE users SET ver=1,key_control='0' WHERE id='$row[id]'";
mysql_query($query,$this->conn);
mysql_close($this->conn);
echo "Il tuo account è ora attivato!";
}
else
{
echo "Impossibile verificare l'account!";
}
}
}
Ho modificato la tabella users inserendo altri due campi key_control e ver, a key_control passo un chiave random con un'altra funzione GetKey() e setto ver=0 in fase di registrazione, quindi invio una mail con la funzione:
protected function SendUserMail($key)
{
$content = "Benvenuto $_POST[username],\r\n";
$content .= "per confermare la tua iscrizione devi cliccare sul seguente link:\r\n\r\n";
$content .= "http://www.XXXXXXXXXXXXXXXXXXX/verify_user.php?key=" . $key;
mail($_POST['email'], "Iscrizione al sito...", $content, "From: io<miomail@me.com>");
return;
}
il primo problema è $content .= "http://www.XXXXXXXXXXXXXXXXXXX dal momento che sono in locale cosa devo mettere per inviare da locale una mail, probailmente dovrei anche modificare il file php.ini con i miei parametri di posta (e non so come fare), secondo quando effettuo il login chiamando la funzione VerifyUser(), mi dice che la costante key non è dichiarata.
Scusa se mi sono dilungato e solo per farti vedere che ci ho provato.
Spero in un tuo cortese aiuto, in ogni caso grazie.
Perchè hai rimosso gli apici.
private $host_db = '62.149.150.XX';
Ciao,
mi restituisce un errore del tipo
Parse error: syntax error, unexpected T_DNUMBER, expecting ',' or ';' in Users.class.php on line 9
e noto che è la riga dell'indirizzo del db
private $host_db = 62.149.150.XX;
Un aiutino?
Grazie
Mauro
il problema kekko è che non ho capito come proteggere la pagina incriminata... devo inserire il form nella stessa o aggiungere qualche link nel form per impostarlo nel modo giusto... magari sono io che non capisco niente quindi ti prego abbi pazienza!
@rob:
Grazie per i complimenti.
In questo script non ho molto badato agli aspetti grafici e mi sono concentrato sugli aspetti lato server dello script (php).
In ogni modo tieni presente che lo script che esegue la validazione è http://plugins.jquery.com/project/validate
il quale concatena all'input incriminato un label class="error" ora sta a te gestire a tuo piacimento tale errore all'interno del tuo layout.
@cruz:
Grazie per i complimenti. Nello script proposto sopra vi sono due esempi "PAGINA PROTETTA" e "PAGINA CON CONTENUTI PROTETTI". Cosa c'è che non và?
scusa ma non sono molto esperto mi puoi dare una mano???
complimenti davvero per l'ottimo form e la bellissima guida ma non riesco a capire una cosa... come posso proteggere una delle pagine del mio sito con il login?
ho provato a leggere anche gli altri commenti ma non ho trovato quello che cercavo... magari è una stupidata o è semplice ma proprio non ho capito il procedimento per proteggere una pagina! help please!!!
Ciao, complimenti bella classe, soprattutto ben commentata, e per me che sono alle prime armi e sicuramente d'aiuto. Ho notato che nel ricevere i messaggi di errore, i campi sia del form login che in quello registrazione vengono spostati verso il basso, probabilmente una caratteristica di jquery, so che dispone di diversi effetti, fade, ect., scusa la domanda sicuramente banale, mi puoi dire come ovviare a questa cosa, cioè ricevere il messaggio sotto il relativo campo senza che si sposti quello succesivo ? Grazie.
Adesso invece se si accede direttamente alla pagina protetta senza essere loggati mi da una pagina bianca, ho forse sbagliato qualcosa ?
Bene, grazie, funzionano perfettamente le modifiche che hai fatto per me.
Adesso chi entra deve loggarsi e una volta entrato viene direttamente portato alla pagina del contenuto protetto.
Se però entra ed è già loggato rimane sulla pagina dello status (in questo caso online), e deve semmai cliccare sul link per entrare nei contenuti, non sarebbe meglio invece se entrasse direttamente nei contenuti, e fosse lì la finestrina che gli dice lo satus ?
Quindi chi entra non loggato dovrebbe vederla, chi entra loggato invece no.
Come si può fare ? Forse mettendo come index direttamente il contenutoprotetto ed inserendo lì la finestrina dello status ?
Grazie
@fobos: onestamente non sò aiutarti.
@Marco Mariella
Un login con diversi livelli di utenza può essere più o meno complesso.
Il minimo prevederebbe di aggiungere un ulteriore colonna alla tabella mysql (level_user di tipo varchair) in cui indicare il livello di utenza (administrato, staffer, norma, etc etc): tale livello, in sede di login, verrà messo in una variabile di sessione, ad esempio $_SESSION['user_level'], con un relativo metodo get_user_level() per ottenerne il valore; a questo punto pondendo delle condizioni if si potrà gestire il redirect dopo il login e riservare le pagini a specifici livelli di utenza.
Il massimo (ma molto più complesso) sarebbe un ACL acronimo di Access Control List.
In maniera mooooolto semplificata senza scombinare lo script si potrebbe fare così.
Modifica la pagina di login in questo modo:
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
$login->esegui_login();
/*FAI ATTENZIONE A QUESTO IF E ALLLO SWITCH IN ESSO CONTENUTO*/
if($login->is_logged()){ // se è loggato
$username_loggato = $login->get_username(); // otteniamo l'username
switch($username_loggato){ // a seconda dei casi una pagina di redirec diversa
case 'pincopallo': // in caso di pincopallo
$pagina_redirect_dopo_il_login = 'http://dominio.it/pincopallo.php';
break;
case 'tiziocazio': // in caso di tiziocazio
$pagina_redirect_dopo_il_login = 'http://dominio.it/tiziocaio.php';
break;
default: // per tutti gli altri
$pagina_redirect_dopo_il_login = 'http://dominio.it/default.php';
break;
}
header('location: ' . $pagina_redirect_dopo_il_login);
exit;
}
?>
<html>
<head>
<title>Login page</title>
</head>
<body>
<?php if($login->get_message()) : ?>
<div class="message"><p><?php echo $login->get_message(); ?></p></div>
<?php endif; ?>
<?php echo $login->get_login_form(); ?>
</body>
</html>
le pagine pincopallo.php e tiziocaio.php saranno:
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
$login->access_denied();
$username = $login->get_username();
// modifica la seguente condizione per tiziocaio
if($username !== 'pincopallo'){ // se non è pincopallo...
exit('accesso negato');
}
?>
<html>
tuo html...
</html>
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'
);
In pratica intendo che la registrazione la fa un utente administrator e se si logga l'utente pincopallino vedrà la pagina pincopallini.xxx mentre se si logga l'utente tiziocazio vedrà la pagina tiziocaio.xxx ovviamente che creo io prima in locale e butto su in ftp.
Inoltre se pincopallino si logga può vedere solo pincopalino.xxx e non tiziocaio.xxx perchè è loggato.
Si può fare? come?
Cosa intendi con "pagina diversa da visualizzare"?
In generale sì.
Infatti nel caso l'utente risulti essere loggato avrà in sessione la variabile
$_SESSION['auth'] che contiene il proprio ID univoco.
Si potrebbe anche integrare all'interno della classe un ulteriore metodo per ottenerlo (che è meglio):
public function get_id(){
return isset($_SESSION['auth']) ? $_SESSION['auth'] : 0;
}
In questo caso avrai:
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
$login->access_denied();
$id_utente = $login->get_id();
echo 'Id utente loggato' . $id_utente;
?>
A seconda dell'ID dell'utente loggato puoi mostrare qualcosa di diverso o puoi rivolgere query al db per ottenere ciò che desideri.
Si riesce a fare che ogni utente ha una pagina diversa da visualizzare?
Ciao Kekko e grazie mille per i complimenti.
Ti rispondo punto per punto:
1) Chi entra cosa vede come prima pagina?
Devi collocare nella cartella principale del tuo sito n file chiamato index.php (oppure index.php).
Se tutto l'intero sito è accessibile solo agli utenti loggati (sconsigliato) devi mettere:
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
$login->access_denied();
?>
Ti consiglierei, invece, di mostrare all'utente il suo status (cioè se è loggato oppure no) in questo modo
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
?>
<html>
<head>
<title>Home page sito</title>
</head>
<body>
bla bla bla
<!-- box in cui compare lo status dennlutente -->
<?php if(!$login->is_logged()) : ?>
<p>Esegui il <a href="<?php echo $login->Urls['login_page']; ?>" class="login">Login</a></p>
<?php else: ?>
<p>Benvenuto <strong><?php echo $login->get_username(); ?></strong></p>
<?php echo $login->get_link_logout(); ?>
<?php endif; ?>
<!-- fine del box -->
bla bla bla
</body>
</html>
2) Come gestire il redirect dopo il login?
Modifica la pagina che nell'esempio si chiama login.php nel modo in cui segue
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
$login->esegui_login();
if($login->is_logged()){
// imposta la pagina di redirect dopo il login...
$pagina_redirect_dopo_il_login = 'http://tuosito.it/etc etc';
header('location: ' . $pagina_redirect_dopo_il_login);
exit;
}
?>
<html>
<head>
<title>Login page</title>
</head>
<body>
<?php if($login->get_message()) : ?>
<div class="message"><p><?php echo $login->get_message(); ?></p></div>
<?php endif; ?>
<?php echo $login->get_login_form(); ?>
</body>
</html>
Sper di esserti stato di aiuto. Altrimenti lasciami anche un commenti che ti risponderò appena posso.
Salve, io mi sto avvicinando da poco al php, ho installato lo script e mi funziona tutto, anche dopo aver modificato il css e la pagina contenutoprotetto.php per inserire una slideshow.
Quello che non capisco è come gestire le pagine, cioè chi entra nel sito cosa vede per prima pagina ? Forse dovrei cambiare nome alla login e chiamarla index affinchè sia la pagina iniziale.
Poi cosa succede quando uno ha fatto il login ? Bisognerebbe che venisse automaticamente portato alla pagina del contenuto protetto, come si può fare ?
Grazie, e complimenti per l'ottima guida !
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 Luca,
anzitutto grazie per i complimenti.
Venendo al "problema" in realtà questo non lo è: semplicemente il mio script non prevede tale funzionalità.
Essendo che volevo renderlo semplice da comprendere non mi andava di complicarlo.
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
segui il consiglio che ti ho dato e vedi se all'interno della query i dati che ti compaiono corrispondono effettivamente a quelli presenti nel db...
tieni presente che la password sarà criptata e quindi non è uguale a quella che immetti nel form.
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
ciao Elisa,
non sò da cosa possa dipendere la cosa nel tuo specifico caso.
Per eseguire un primo test potresti all'interno della funzione query_select_login() stampare la query facendo
exit($query);
In questo modo ti comparirà la query eseguita per la verifica del login e verificare che le credenziali - username e password (criptata) - corrispondono a quelle presente nel tuo db.
Fammi sapere.
oly1982
Ciao,
ho scaricato lo zip che contiene tutti i file del tuo tutorial per studiarlo. Prima ho pensato di provarlo cambiando i dati del db etc..
Però dopo che mi sono registrata non riesco a fare il login. Inserisce correttamente i dati nel db che ho creato ma restituisce sempre l'errore "Login errato".
Sai dove potrebbe essere l'errore?
Grazie mille!
Ti ho risposto privatamente via email
Mi scuso per le informazioni limitate che ho fornito ma data la mia limitatissima conoscenza del linguaggio probabilmente ignoro i dati necessari.
In pratica ho una sezione riservata ma non svilppata da me (è una versione standardizzata che ho trovato navigando un pò).
In questa sezione ho inserito un paio di banner e speravo che con il trafiletto che ti ho postato ottenessi il risultato sperato.
Ovvero che quando un utente clicca su quel banner, successivamente andando a vedere le statistiche del sito di affiliazione (con cui sto facendo la prova e di cui ho postato il trafiletto) ottenessi la statistica con visibile l'username dell'utente. Se questo è possibile in linea teorica credo che mi sfugga qualcosa o forse è errato il concetto stesso.
Tra l'altro mi e venuto un dubbio ovvero io ho introdotto il trafiletto nella pagina html, se introduco script in php senza cambiare l'estenzione della pagina che succede? può essere che non abbia funzionato per questo e se si a cosa devo stare attendo se cambio l'estensione ad esempio i collegamenti funzionerebbero ugualmente o devono come credo essere cambiati.
Se ho capito bene lo script per tracciare l'ID dell'utente loggato che mi hai gentilmente postato sarebbe da integrare con l'articolo "semplice registrazione e login degli utenti".
Ho scaricato easyphp e ho capito il funzionamento.
Però dopo aver riportato lo script generale dell'articolo in questione, quando provo non avendo la pagina index, scrivo http://localhost/ e mi compare INDEX OF e poi sotto tutta le cartelle e pagine ma quando clicco su queste mi appare l'errore:
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\programmi\easyphp1-8\www\lib\Users.class.php on line 9
Ne deduco o che sbaglio grossolonamente qualcosa o che prima di poter utilizzare lo script da te postato devo personalizzare qualcosa che da profano non conosco.
Per cui se credi che nonostante la mia ignoranza in materia sia facile da risolvere (sperando che sia davvero solo da personalizzare) la cosa bene se invece pensi che sia una cosa lunga ti ringrazio ugualmente ma non vorrei abusare del tuo aiuto e del tuo tempo.
Non conosco la fonte dello script ma in base a quanto da te postato non ti si può rispondere: in pratica mi hai postato un trafiletto di codice che deve far parte di un sistema più articolato.
Utilizzando la classe presente in questo articolo questa salva l'id dell'utente loggato nella variabile di sessione $_SESSION['auth'].
Pertanto la pagina web per tracciare conoscere l'ID dell'utente loggato sarà questa:
<?php
session_start();
require_once('lib/Users.class.php');
$login = New Users;
?>
<html>
<head>
<title>Id utente loggato</title>
</head>
<body>
<div id="content">
<?php if($login->is_logged()) : ?>
<h1>l'ID dell'utente loggato è: <?php echo $_SESSION['auth']; ?> </h1>
<?php else: ?>
<h1>Utente non loggato</h1>
<?php endif; ?>
</div>
</body>
</html>
Se hai problemi ad integrarla lasciami pure un commento che ti risponderò il prima possibile.
Ciao, sto guardando il tuo sito e per me che non conosco bene il linguaggio php credo che sia utilissimo.
Sto provando a fare un sito e al momento sto simulando un area riservata con accesso con password diversa per ogni utente del mio ipotetico database.
Al momento necessito di qualcosa che mi permetta di tracciare in maniera univoca i clienti del database tramite il loro id quando fanno determinate azioni.
Ho trovato su un sito di affiliazioni il seguente trafiletto:
Un affiliato desidera tracciare l’utente del suo db che genera la vendita dei prodotti e l’IP con il quale
è arrivato nella pagina. Il codice da inserire nella pagina web per tracciare quanto detto sopra dovrebbe
essere simile al seguente:
<head>
<?
$uid=$_COOKIE["un"];
$ip=$_SERVER['REMOTE_ADDR'];
?>
</head>
<body>
<a href="http://partners.sprintrade.com/xxxx/xxxx/u=<?echo ($uid); ?>|ip=<? echo ($ip);
?>">Test</a>
</body>
L’URL dovrebbe essere uguale al seguente:
http://partners.sprintrade.com/z/xxxx/xxxx/u=$uid|ip=$ip
Cambiando nei punti dove ti ho inserito le x con i miei dati ho provato con un mio amico a vedere se funzionava ma quando ho controllato sul loro sito mi era stato tracciato l'uid come "uid" senza il nome uid che invece avevo nel mio database quindi suppongo che o ho sbagliato qualcosa o che questo script sia errato.
Se sei in grado e hai voglia di darmi uno script che faccia al caso mio o dire dove sbaglio in questo te ne sarei grato.
Cmq in ogni caso rinnovo i miei complimenti per il sito.
Rino
01 July 2019 ore 13:59
Ciao, Ho usato il tuo script che si è rivelato molto utile.
Ora però devo implementare nel mio sito un e-commerce.
L'e-commerce in questione ha una variabile chiamata idmembro ed io dovrei assegnare a questa variabile l'id dell'utente loggato. Quindi la mia domanda è: Come posso prelevare l'id dell'utente loggato per poi assegnarlo a questa variabile? Grazie mille.