Form di registrazione e log in.

  • Creatore Discussione Creatore Discussione Liiuk
  • Data di inizio Data di inizio

Liiuk

Nuovo Utente
2 Feb 2012
13
0
1
Salve a tutti.
In rete ho trovato un form di registrazione e login e da qualche giorno sto cercando di modificarlo per adattarlo al mio blog. Tuttavia ho un problema: lo script che ho trovato permette la registrazione di utenti con validazione dell'account attraverso un email ( in pratica mi registro e per attivare il mio account devo cliccare nel link che mi viene inviato nell'email). Ciò rende la registrazione degli utenti abbastanza lunga e macchinosa. Insomma vorrei fare in modo che una volta avere inserito nome e mail e aver scelto la password, il mio utente sia gia indirizzato nella pagina profile.php (cioe il suo profilo).
quindi vi chiedo affinchè questo possa accadere, quale porzione di codice devo eliminare?
preferite che posto tutto lo script qui (è lungo) oppure vi linko il sito in cui è pubblicato il listato?
grazie in anticipo
 
pagina register.php
HTML:
<?php 

// includo le funzioni per gestire le sessioni
require_once 'inc/session.php';

// faccio partire la sessione
sessionStart();

// Controllo se l'utente ￾ gia loggato 
// e, nel caso lo sia, lo rimando alla pagina di profilo
if (true == sessionUserIsLogged())
{
	header('Location: profile.php');
}
// Altrimenti controllo se sono presenti dei dati inviati in POST; 
// se ci sono, il form ￾ stato inviato dall'utente
else if (count($_POST) > 0)
{
	// Includo il modello per la pagina di registrazione
	require_once 'models/register.php';
}

// Includo la vista per la pagina di registrazione
require_once 'views/register.php';

?>
pagina models/register.php
HTML:
<?php

// includo il file con la lista delle funzioni di utilitˆ
require_once 'inc/utils.php';

// Qui inseriremo gli errori avvenuti durante la validazione
// dei dati inseriti dall'utente nel form di login
$formErrors = array();

// Questi sono i dati inviati dall'utente
$userName			= $_POST['user-name'];
$userEmail 			= $_POST['user-email'];
$userEmailRepeat 	= $_POST['user-email-repeat'];
$userPassword 		= $_POST['user-password'];
$userPasswordRepeat = $_POST['user-password-repeat'];

/* Controllo sull'indirizzo email
 * 
 * Se la lunghezza ￾ 0 allora il campo ￾ vuoto
 * altrimenti controllo che l'indirizzo email sia valido
 * altrimenti controllo che l'indirizzo email sia uguale
 * all'indirizzo email ripetuto
 */
if (strlen($userEmail) == 0)
{
	$formErrors[] = 'Il campo email &egrave; obbligatorio.';
}
else if (false == emailIsValid($userEmail))
{
	$formErrors[] = "L'indirizzo email inserito non &egrave; corretto";
}
else if ($userEmail != $userEmailRepeat)
{
	$formErrors[] = "L'indirizzo email e l'indirizzo ripeti email non sono uguali";
}
	
/* Controllo sulla password inserita
 * 
 * Se la lunghezza ￾ 0 allora il campo ￾ vuoto 
 * altrimenti controllo che la password abbia una lunghezza di almeno 6 caratteri
 * altrimenti controllo che il campo password ed il campo ripeti password siano uguali
 */
if (strlen($userPassword) == 0)
{
	$formErrors[] = 'Il campo password &egrave; obbligatorio';
}
else if (strlen($userPassword) < 6)
{
	$formErrors[] = 'La password inserita &egrave; troppo corta';
}
else if ($userPassword != $userPasswordRepeat)
{
	$formErrors[] = 'Il campo password ed il campo ripeti password non sono uguali';
}
	
/* Controllo sul campo nome
 *
 * Se la lunghezza ￾ 0 allora il campo ￾ vuoto
 * altrimenti controllo che il campo nome abbia una lunghezza di almeno 3 caratteri
 */
if (strlen($userName) == 0)
{
	$formErrors[] = 'Il campo nome &egrave; obbligatorio';
}
else if (strlen($userName) < 3)
{
	$formErrors[] = 'Il nome inserito &egrave; troppo corto';
}
	
// Se il conteggio degli errori ￾ 0 allora i dati inviati dall'utente
// sono validi, procedo con la registrazione del nuovo utente	
if (count($formErrors) == 0)
{
	// includo ora la lista di funzioni che servono per gestire l'utente
	require_once 'inc/user.php';
	
	// Per prima cosa mi assicuro che l'indirizzo email del nuovo utente
	// non sia giˆ registrato nel database
	if (true == userEmailExists($userEmail))
	{
		$formErrors[] = "L'indirizzo email inserito &egrave; gi&agrave; stato registrato";
	}
	else
	{
		// La password inserita viene ora criptata tramite la funzione md5()
		// criptare la password ￾ un buon modo per alzare il livello di sicurezza
		// del nostro sistema di login	
		$userPassword = md5($userPassword);
		
		// Questo ￾ il codice alfanumerico di 32 caratteri che verrˆ utilizzato
		// nel link di attivazione account
		$activationToken = md5(time().'_'.$userEmail);
		
		/* Tento di registrare il nuovo utente sul database
		 * 
		 * Se non riesco avverto il nuovo utente che non ho potuto registrarlo
		 * altrimenti gli invio una email contenente un link con cui confermare
		 * la registrazione
		 */
		$userData = array(
			'email'		=> $userEmail, 
			'password' 	=> $userPassword, 
			'name' 		=> $userName,
			'token'		=> $activationToken
		);
		
		$userId = registerNewUser($userData);
		
		if (false == $userId)
		{
			$formErrors[] = 'Si &egrave; verificato un errore durante la registrazione';
		}
		else 
		{
			// Questo ￾ il link di attivazione che serve all'utente per confermare
			// la propria registrazione 
			$activationLink = 'http://'.$_SERVER['HTTP_HOST'];
			$activationLink .= str_replace('register.php', 'confirm.php', $_SERVER['REQUEST_URI']);
			$activationLink .= '?token='.$activationToken;
			
			// Invio la mail in formato HTML
			$headers  = 'MIME-Version: 1.0' . "\r\n";
			$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
			
			// Oggetto e testo dell'email da inviare
			$subject 	= 'Attivazione account';
			$emailText 	= "<p>Gentile {$userName}, la tua registrazione &egrave; avvenuta correttamente.</p>"
							. "<p>Per attivare il tuo account, clicca sul link sottostante</p>"
							. "<p><a href=\"{$activationLink}\">Clicca qui per attivare il tuo account</p>";
											
			// Provo ora ad inviare l'email all'indirizzo del nuovo utente
			// Redirigo poi il nuovo utente alla pagina di conferma invio email
			if (false == mail($userEmail, $subject, $emailText, $headers))
			{
				$formErrors[] = "Si &egrave; verificato un errore durante il tentativo di invio dell'email di conferma";
			}
			else
			{ 
				header('Location: confirm_sendmail.php');
			}
		}	
			
	}
	
}

// Stampo a video la lista degli errori, se presenti
echo showFormErrors($formErrors);
pagina confirm.php
HTML:
<?php 

// Se il parametro token non ￾ stato settato
// regirigo l'utente alla  pagina di login
if (false == isset($_GET['token']))
{
	header('Location: login.php');
}
	
// Includo il modello per la pagina di conferma registrazione
require_once 'models/confirm.php';

// Includo la vista per la pagina di conferma registrazione
require_once 'views/confirm.php';

?>
pagina models/confirm.php
HTML:
<?php 

// Questo ￾ il token che identifica la richiesta di un utente
$token  = $_GET['token'];

// Qui inseriamo gli errori 
$errors	= array();

// includo la lista delle funzioni di utilitˆ
require_once 'inc/utils.php';

// Controllo se il token ￾ valido e, se non lo ￾,
// stampo a video l'errore
if (false == tokenIsValid($token))
{
	$errors[] = 'Il codice specificato non &egrave; valido';
	echo showFormErrors($errors);
	exit();	
}

// Includo la lista delle funzioni per gestire gli utenti
require_once 'inc/user.php';

// Cerco i dati di un utente in base al token
$user = userFindByToken($token);

// Se non ho trovato nessun utente genero un errore
if (false == $user)
{
	$errors[] = 'Nessun utente da attivare con il codice specificato.';
}
// Altrimenti se non sono riuscito ad attivare l'account dell'utente
// genero un errore
else if (false == userActivate($user['user_id']))
{
	$errors[] = 'Si &egrave; verificato un errore durante il tentativo di attivazione account';
}

// Se sono presenti degli errori li stampo a video
if (count($errors) > 0)  
{
	echo showFormErrors($errors);
	exit();	
}

// Questo ￾ il nome dell'utente da visualizzare nella vista
$userName = $user['name'];
pagina confirm_sendmail.php
HTML:
<?php 

// Includo la vista per la pagina di conferma invio email
// contenente il link per attivare l'account dell'utente
require_once 'views/confirm_sendmail.php';

?>
pagina views/congirm_sendmail.php
HTML:
<h2>La registrazione &egrave; avvenuta con successo.</h2>
<p>Ti abbiamo inviato una email contenente il link per attivare il tuo account.</p>
<p>Controlla ora la casella di posta.</p>
<hr/>
<ul>
	<li><strong>Vista: </strong>views/confirm_sendmail.php</li>
	<li><strong>Pagina pubblica: </strong>confirm_sendmail.php</li>
</ul>
<hr/>
<p>Questa pagina serve solamente per notificare all'utente che &egrave; stata
inviata una email all'indirizzo da lui specificato contenente un link
con cui ha la possibilit&agrave; di attivare il proprio account.</p>

pagina user.php
HTML:
<?php

/*
 * In questo file sono contenute le funzioni utili
 * alla gestione degli utenti 
 */

// Includo la lista delle funzioni per dialogare con il database
require_once 'database.php';

// Questa funzione si occupa di autenticare un utente 
// nel sistema
function authenticateUser($userEmail, $userPassword)
{
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Cerco nel database un utente attivo
	// con la coppia email:password specificata
	$sql = "SELECT user_id
			FROM user 
			WHERE 
				email = '%s' 
			AND 
				password = '%s'
			AND
				active = 1";

	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $userEmail, $userPassword);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure non ho trovato nessun risultato
	if (false == $result || mysql_num_rows($result) == 0)
		return false;
	
	// Questa riga contiene le informazioni dell'utente, se trovato nel database	
	$row = mysql_fetch_assoc($result);

	// Ritorno lo user_id dell'utente
	return $row['user_id'];	
}

// Questa funzione permette di registrare un nuovo utente nel sistema
function registerNewUser($userData)
{
	// Apro una connessione con il database
	$connection = getConnection();

	// Questi sono i dati da inserire nel database
	$userEmail 		= $userData['email'];
	$userPassword 	= $userData['password'];
	$userName		= $userData['name'];
	$token 			= $userData['token'];
	
	// Query per inserire i nuovi dati nel database
	$sql = "INSERT INTO user 
				(email, password, name, token) 
			VALUES 
				('%s', '%s', '%s', '%s') ";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, 
				$userEmail, 
				$userPassword, 
				mysql_real_escape_string($userName), 
				$token);
	
	// Provo ad inserire i dati
	if (false == mysql_query($sql, $connection))
	{
		return false;
	}
	// se sono riuscito ad inserire i dati,
	// ritorno l'ultimo user_id inserito	
	else
	{
		return mysql_insert_id($connection);
	}
}

// Questa funzione controlla l'esistenza
// nel database di un utente con uno specifico indirizzo email
function userEmailExists($userEmail)
{
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Conto il numero di utenti registrati con 
	// l'indirizzo email specificato
	$sql = "SELECT user_id
			FROM user 
			WHERE 
				email = '%s' ";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $userEmail);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se non ho trovato utenti oppure se si ￾
	// verificato un errore
	if (false == $result || mysql_num_rows($result) == 0)
	{
		return false;
	}
	// Altrimenti vuol dire che ho trovato un utente
	// con l'indirizzo email specificato
	else
	{	 
		return true;
	}
}

// Questa funzione cerca i dati di un utente 
// in base al token specificato
function userFindByToken($token)
{
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Cerco un utente con un certo token
	$sql = "SELECT * 
			FROM user
			WHERE
				token = '%s'";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $token);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure non
	// ho trovato nessun utente
	if (false == $result || mysql_num_rows($result) == 0)
	{
		return false;
	}
	
	// Ritorno i dati dell'utente trovato
	return mysql_fetch_assoc($result);
}

// Questa funzione cerca i dati di un utente 
// in base all'indirizzo email specificato
function userFindByEmail($userEmail)
{
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Cerco un utente con un certo indirizzo email
	$sql = "SELECT * 
			FROM user 
			WHERE 
				email = '%s'";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $userEmail);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure non
	// ho trovato nessun utente
	if (false == $result || mysql_num_rows($result) == 0)
	{
		return false;
	}
	
	// Ritorno i dati dell'utente trovato
	return mysql_fetch_assoc($result); 	
}

// Questa funzione cerca i dati di un utente 
// in base ad un userId specificato
function userFindById($userId)
{	
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Cerco un utente con un certo userId
	$sql = "SELECT * 
			FROM user 
			WHERE 
				user_id = %d";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $userId);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure non
	// ho trovato nessun utente
	if (false == $result || mysql_num_rows($result) == 0)
	{
		return false;
	}
	
	// Ritorno i dati dell'utente trovato
	return mysql_fetch_assoc($result); 	
}

// Questa funzione serve per attivare l'account 
// di un utente con un certo userId
function userActivate($userId)
{
	// Apro una connessione con il database
	$connection = getConnection();
	
	// Attivo l'utente impostando il campo
	// active a 1
	$sql = "UPDATE user 
			SET active = 1, token = NULL
			WHERE
				user_id = %d";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $userId);
	
	// Eseguo la query sul database
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure nessun utente
	// Ž stato attivato
	if (false == $result || mysql_affected_rows($connection) == 0)
	{
		return false;
	}
	// Altrimenti l'utente ￾ stato attivato
	else
	{ 	
		return true;
	}	
}

// Questa funzione permette di settare il token
// di uno specifico utente, identificato dal suo userId
function userSetToken($token, $userId)
{
	// Apro la connessione al database
	$connection = getConnection();
	
	// Questa ￾ la query di aggornamento
	$sql = "UPDATE user 
			SET token = '%s'
			WHERE user_id = %d";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, $token, $userId);
	
	// Eseguo la query
	$result = mysql_query($sql, $connection);
	
	// Se si ￾ verificato un errore oppure nessun token ￾ stato settato
	// ritorno false
	if (false == $result || mysql_affected_rows($connection) == 0)
	{
		return false;
	}
	// altrimenti ritorno true
	else
	{
		return true;
	}
}
pagina login.php
HTML:
<?php 

// includo le funzioni per gestire le sessioni
require_once 'inc/session.php';

// faccio partire la sessione
sessionStart();

// Controllo se l'utente ￾ gia loggato 
// e, nel caso lo sia, lo rimando alla pagina di profilo
if (true == sessionUserIsLogged())
{
	header('Location: profile.php');
}
// Altrimenti controllo se sono presenti dei dati inviati in POST; 
// se ci sono, il form ￾ stato inviato dall'utente
else if (count($_POST) > 0)
{
	// includo il modello per la pagina di login
	require_once 'models/login.php';
}
	
// includo la vista per la pagina di login
require_once 'views/login.php';
pagina models/login.php
HTML:
<?php

// includo il file con la lista delle funzioni di utilitˆ
require_once 'inc/utils.php';

// Qui inseriremo gli errori avvenuti durante la validazione
// dei dati inseriti dall'utente nel form di login
$formErrors = array();

// Questi sono i dati inviati dall'utente
$userEmail		= $_POST['user-email'];
$userPassword 	= $_POST['user-password'];

/* Controllo sull'indirizzo email
 * 
 * Se la lunghezza ￾ 0 allora il campo ￾ vuoto
 * altrimenti controllo che l'indirizzo email sia valido
 */
if (strlen($userEmail) == 0)
{
	$formErrors[] = 'Il campo email &egrave; obbligatorio.'; 
}
else if (false == emailIsValid($userEmail))
{
	$formErrors[] = "L'indirizzo email inserito non &egrave; corretto";
}
		
/* Controllo sulla password inserita
 * 
 * Se la lunghezza ￾ 0 allora il campo ￾ vuoto 
 * Altrimenti controllo che la password abbia una lunghezza minima di 6
 */
if (strlen($userPassword) == 0)
{
	$formErrors[] = 'Il campo password &egrave; obbligatorio';
}
else if (strlen($userPassword) < 6) 
{
	$formErrors[] = 'La password inserita &egrave; troppo corta';	
}

// Se $formErrors ￾ vuoto vuol dire che
// tutti i campi compilati dall'utente sono corretti	
if (count($formErrors) == 0)
{
	//La password inserita viene ora criptata tramite la funzione md5()
	// criptare la password ￾ un buon modo per alzare il livello di sicurezza
	// del nostro sistema di login	
	$userPassword = md5($userPassword);
	
	// includo ora la lista di funzioni che servono per gestire l'utente
	require_once 'inc/user.php';
	
	/* Provo ad autenticare l'utente cercando la coppia email:password
	 * nel database.
	 * 
	 * Se riesco ad autenticarlo, lo redirigo alla sua pagina Profilo
	 * inserendo nella sessione le informazioni basilari dell'utente
	 */
	$userId = authenticateUser($userEmail, $userPassword);
	if (false == $userId)
	{
		$formErrors[] = 'La coppia email/password non &egrave; corretta';
	}
	else
	{
		// Recupero le informazioni dell'utente
		$user = userFindById($userId);
		
		// Aggiungo le informazioni dell'utente alla sessione
		// ed imposto il login a true, per identificare 
		// che l'utente si ￾ loggato correttamente
		sessionAddInformation('login', true);
		sessionAddInformation('user_id', $user['user_id']);
		sessionAddInformation('email', $user['email']);
		sessionAddInformation('name', $user['name']);
		
		// Rimando poi l'utente alla pagina del profilo
		header('Location: profile.php');
	}
}

// Stampo a video la lista degli errori, se presenti
echo showFormErrors($formErrors);
sessioni
HTML:
<?php

/*
 * In questo file sono contenute le funzioni utili
 * alla gestione delle sessioni
 */

// Questa funzion fa partire la sessione
function sessionStart()
{
	// session_start() ￾ una funzione nativa di PHP
	session_start();
}

// Questa funzione controlla se l'utente ￾ loggato
function sessionUserIsLogged()
{
	// L'utente risulta loggato se nei dati della sessione 
	// risulta login = true
	if (array_key_exists('login', $_SESSION) && $_SESSION['login'] == true)
	{
		return true;
	}
	else
	{
		return false;
	}
}

// Questa funzione aggiunge informazioni alla sessione
function sessionAddInformation($informationKey, $informationValue)
{
	$_SESSION[$informationKey] = $informationValue;
}

// Questa funzione serve per ottenere informazioni dalla sessione
function sessionGetInformation($informationKey)
{
	return $_SESSION[$informationKey];
}

// Questa funzione distrugge la sessione, ￾ usata per 
// effettuare il logout di un utente
function sessionDestroy()
{
	// session_destroy() ￾ una funzione nativa di PHP
	session_destroy();
}
pagina profile.php
HTML:
<?php 

// includo le funzioni per gestire le sessioni
require_once 'inc/session.php';

// faccio partire la sessione
sessionStart();

// Controllo se l'utente ￾ loggato e, nel caso 
// non sia loggato, lo rimando alla pagina di login
if (false == sessionUserIsLogged())
{
	header('Location: login.php');
}

// includo il modello per la pagina del profilo
require_once 'models/profile.php';

// includo la vista per la pagina del profilo
require_once 'views/profile.php';

?>
ps dove vedete scritto views/.. sono rimandi alle pagine html che vedrà l'utente
 

Discussioni simili