100 commenti my script, tutorial, php

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:

  1. registrazione degli utenti;
  2. il login degli utenti;
  3. 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à.

DOWNLOAD

 

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:
    1. obbligatorio;
    2. con una lunghezza minima di 3 caratteri;
    3. verifica della sintassi;
    4. verifica che non si tratti di un utente già registrato.
  • email:
    1. obbligatoria;
    2. verifica della sintassi;
    3. verifica che non si tratti di un'email già registrata.
  • Password
    1. obbligatoria;
    2. con una lunghezza minima di 8 caratteri.
  • Conferma password
    1. 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.

DOWNLOAD

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.

100 Commenti presenti

avatar seo

seo

26 August 2016 ore 00:20

Hello Web Admin, I noticed that your On-Page SEO is is missing a few factors, for one you do not use all three H tags in your post, also I notice that you are not using bold or italics properly in your SEO optimization. On-Page SEO means more now than ever since the new Google update: Panda. No longer are backlinks and simply pinging or sending out a RSS feed the key to getting Google PageRank or Alexa Rankings, You now NEED On-Page SEO. So what is good On-Page SEO?First your keyword must appear in the title.Then it must appear in the URL.You have to optimize your keyword and make sure that it has a nice keyword density of 3-5% in your article with relevant LSI (Latent Semantic Indexing). Then you should spread all H1,H2,H3 tags in your article.Your Keyword should appear in your first paragraph and in the last sentence of the page. You should have relevant usage of Bold and italics of your keyword.There should be one internal link to a page on your blog and you should have one image with an alt tag that has your keyword....wait there's even more Now what if i told you there was a simple Wordpress plugin that does all the On-Page SEO, and automatically for you? That's right AUTOMATICALLY, just watch this 4minute video for more information at. <a href="http://www.SEORankingLinks.us">Seo Plugin</a>

avatar ACazzoDicCane

ACazzoDicCane

23 June 2016 ore 19:42

@Francesco: dovevi semplicemente scrivere i dati del tuo dominio :)

avatar salvatore

salvatore

01 February 2016 ore 12:14

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.

avatar carlo

carlo

30 January 2016 ore 11:48

ciao, cosa mi consigli implementare in termini di sicurezza?

avatar Francesco

Francesco

27 January 2016 ore 12:47

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:)

avatar Francesco

Francesco

27 January 2016 ore 12:15

@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

avatar Francesco

Francesco

27 January 2016 ore 11:45

@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

avatar Olimpio Romanella

Olimpio Romanella

27 January 2016 ore 11:26

@Francesco: le credenziali di accesso al database sono errate

avatar Francesco

Francesco

27 January 2016 ore 11:02

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à

avatar alessio

alessio

14 January 2016 ore 14:25

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

avatar Toni

Toni

16 December 2015 ore 09:20

Ciao e complimenti,
non sono molto esperto...
ma volevo chiederti come rendere il mio databate remoto e non locale?
grazie anticipatamente

avatar gianluca

gianluca

06 December 2015 ore 06:08

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

avatar Marco Caputo

Marco Caputo

24 July 2015 ore 17:51

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?

avatar Olimpio Romanella

Olimpio Romanella

24 June 2015 ore 16:08

@Luca G.: considero questo script datato. Quello che chiedi e' possibile ma non chiedermi di implementarlo perche' non ho tempo ultimanente.

avatar Luca G.

Luca G.

24 June 2015 ore 16:01

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.

avatar Egos

Egos

04 March 2015 ore 11:28

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

avatar Luca

Luca

08 December 2014 ore 13:19

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

avatar Olimpio Romanella

Olimpio Romanella

21 November 2014 ore 10:07

@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.

avatar Mario

Mario

12 November 2014 ore 16:24

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

avatar Claudio

Claudio

17 October 2014 ore 17:32

Mi reindirizza sempre nella pagina di logout
Come risolvo?
(Appena effettuo il login o la registrazione)

avatar Franz

Franz

31 July 2014 ore 00:27

Mi da errore:

Access denied for user '2646238'@'localhost' to database 'test'

avatar Matteo

Matteo

05 June 2014 ore 17:29

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

avatar Olimpio Romanella

Olimpio Romanella

29 May 2014 ore 12:34

@Andrea: nessuna email di conferma e le pagine che non fanno "nulla" devono essere personalizzate a tuo piacimento a seconda delle tue specifiche esigenze.

avatar Andrea

Andrea

29 May 2014 ore 12:09

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...

avatar michele

michele

21 May 2014 ore 10:03

Ciao, ho risolto tutto, il problema stava nell'url delle pagine nella liberia php non le avevo scritte bene ;-).

avatar michele

michele

21 May 2014 ore 09:45

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

avatar ildemir

ildemir

05 May 2014 ore 20:12

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

avatar salvo

salvo

01 May 2014 ore 11:04

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

avatar lapo

lapo

30 March 2014 ore 23:58

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

avatar Daniele

Daniele

24 March 2014 ore 12:26

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

avatar abdel

abdel

08 March 2014 ore 10:50

@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

avatar Olimpio Romanella

Olimpio Romanella

20 February 2014 ore 19:24

@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.

avatar Francesco

Francesco

18 February 2014 ore 08:08

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

avatar Federico

Federico

13 February 2014 ore 10:10

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

avatar tiger23

tiger23

10 February 2014 ore 01:15

@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

avatar tiger23

tiger23

10 February 2014 ore 00:41

@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

avatar tiger23

tiger23

09 February 2014 ore 21:38

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

avatar fabio

fabio

09 February 2014 ore 10:13

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!

avatar Olimpio Romanella

Olimpio Romanella

13 January 2014 ore 13:43

@roberta: mi puoi dire esattamente cosa è che non funziona?

avatar roberta

roberta

13 January 2014 ore 12:58

Salve a tutti, li script nn funziona cn Explorer 10 e successivi. Sapreste dirmi xkè ?

avatar salvatore

salvatore

29 December 2013 ore 18:29

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

avatar claudio

claudio

04 December 2013 ore 16:34

@oly1982: Ciao oly1982 hai una mail a cui scriverti direttamente ??

Ciao Claudio

avatar Marco

Marco

07 October 2013 ore 14:41

Ciao, non ho capito, una volta creato tutto, come far diventare una pagina protetta.
Grazie, comunque molto bravo!

avatar oly1982

oly1982

13 September 2013 ore 15:26

@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.

avatar Dylan

Dylan

12 September 2013 ore 11:29

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.

avatar oly1982

oly1982

20 August 2013 ore 14:13

@Sam: la risposta che ti ha fornito lo script è più che eloquente. La tabella 'users' npn esiste all'interno del tuo database chiamato 'test'

avatar Sam

Sam

18 August 2013 ore 20:03

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

avatar adrianovlad

adrianovlad

24 June 2013 ore 00:03

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&#728; 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;
}
}
?>

avatar Francesco

Francesco

07 March 2013 ore 17:27

Ottimo Script, il migliore sicuramente che ho trovato! ehm ehm.. è possibile avere anche un'implementazione per l'email confirm prima della registrazione?

avatar Valentina

Valentina

27 February 2013 ore 13:28

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\">&nbsp;";
$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\">&nbsp;";
$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;
}

avatar gianni

gianni

08 February 2013 ore 17:08

complimenti sei in gamba, ti seguo con molta attenzione, BRAVO

avatar oly1982

oly1982

19 January 2013 ore 18:08

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.

avatar Mattia

Mattia

19 January 2013 ore 17:48

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à.

avatar Maurizio

Maurizio

29 December 2012 ore 07:48

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!

avatar Giovanni

Giovanni

16 December 2012 ore 17:18

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?

avatar Giovanni

Giovanni

14 December 2012 ore 14:20

Ok,ho risolto...lol

Ho semplicemente cambiato l'estensione della mia home page,da .html a .php. :)

avatar Giovanni

Giovanni

14 December 2012 ore 14:11

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

avatar oly1982

oly1982

11 December 2012 ore 23:38

@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.

avatar Piero

Piero

10 December 2012 ore 13:55

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.

avatar oly1982

oly1982

26 November 2012 ore 12:27

@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)

avatar Gino

Gino

25 November 2012 ore 18:48

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è?

avatar laura

laura

18 November 2012 ore 17:59

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??

avatar Mimmo

Mimmo

11 October 2012 ore 07:26

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

avatar leo

leo

20 June 2012 ore 17:43

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

avatar leo

leo

20 June 2012 ore 17:39

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

avatar oly1982

oly1982

03 May 2012 ore 20:14

hai indicato un percorso errato al file da includere.

require_once('cartella/tuo_spazio_web/Users.class.php');

avatar guido

guido

03 May 2012 ore 19:56

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??

avatar carlo

carlo

02 May 2012 ore 21:01

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???

avatar guido

guido

02 May 2012 ore 18:05

ciao mi sapresti dire come portare tutto su un host del tipo altervista?? scarico i file, poi faccio il download e dopo??

avatar gianluca

gianluca

30 April 2012 ore 20:39

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

avatar oly1982

oly1982

30 April 2012 ore 20:33

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.

avatar gianluca

gianluca

30 April 2012 ore 20:26

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

avatar Crisbr

Crisbr

07 April 2012 ore 00:56

Ciao, ho bisogno di un aiuto. Come posso fare una pagina per Admin per poter cancellare gli utenti???

avatar rob

rob

01 March 2012 ore 10:58

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.

avatar oly1982

oly1982

29 February 2012 ore 11:20

Perchè hai rimosso gli apici.

private $host_db = '62.149.150.XX';

avatar Mauro

Mauro

29 February 2012 ore 08:56

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

avatar cruz

cruz

24 February 2012 ore 18:10

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!

avatar oly1982

oly1982

22 February 2012 ore 23:33

@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à?

avatar cruz

cruz

22 February 2012 ore 17:59

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!!!

avatar rob

rob

22 February 2012 ore 14:36

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.

avatar kekko

kekko

31 January 2012 ore 17:28

Adesso invece se si accede direttamente alla pagina protetta senza essere loggati mi da una pagina bianca, ho forse sbagliato qualcosa ?

avatar kekko

kekko

31 January 2012 ore 17:25

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

avatar oly1982

oly1982

30 January 2012 ore 13:37

@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>

avatar fobos

fobos

30 January 2012 ore 12:54

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'
);

avatar Marco Mariella

Marco Mariella

30 January 2012 ore 11:49

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?

avatar oly1982

oly1982

29 January 2012 ore 22:30

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.

avatar Marco Mariella

Marco Mariella

29 January 2012 ore 21:45

Si riesce a fare che ogni utente ha una pagina diversa da visualizzare?

avatar oly1982

oly1982

27 January 2012 ore 18:12

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.

avatar kekko

kekko

27 January 2012 ore 14:08

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 !

avatar fobos

fobos

26 January 2012 ore 17:22

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.

avatar oly1982

oly1982

02 August 2011 ore 22:06

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.

avatar luca

luca

01 August 2011 ore 17:13

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

avatar oly1982

oly1982

14 June 2011 ore 22:37

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.

avatar Elisa

Elisa

14 June 2011 ore 21:00

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

avatar oly1982

oly1982

14 June 2011 ore 19:51

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

avatar Elisa

Elisa

14 June 2011 ore 19:27

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!

avatar oly1982

oly1982

08 June 2011 ore 18:35

Ti ho risposto privatamente via email

avatar kikasso

kikasso

08 June 2011 ore 12:04

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.

avatar oly1982

oly1982

07 June 2011 ore 22:16

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.

avatar kikasso

kikasso

07 June 2011 ore 18:21

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 lutente del suo db che genera la vendita dei prodotti e lIP 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>

LURL 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.