Profilo utente

  • Creatore Discussione Creatore Discussione xxx86
  • Data di inizio Data di inizio

xxx86

Nuovo Utente
29 Lug 2013
7
0
0
Salve a tutti, mi sono appena registrata a questo forum poichè lo trovo molto interessante e di aiuto.
Sto facendo un'applicazione web e dovrei per ogni utente che si logga visualizzarne il profilo.
Qualcuno mi può aiutare? ho provato a scrivere un pezzo di codice ma è come se non vedo l'utente loggato in quel momento...grazie in anticipo
 
Bisogna utilizzare le sessioni o comunque hai bisogno di salvare in un livello di persistenza i dati principali dell'utente, quando vai sulla pagina profilo.php (che è unica per tutti gli utenti) controlli questi dati e stampi tutto ciò che ha a che fare con l'utente in questione.
Comunque, come diceva borgo, senza codice non possiamo aiutare molto.
 
Questo è il codice, ma anche se faccio il login mi dice "Devi prima effettuare il login."
PHP:
<?php
session_start();

if (!isset($_SESSION['email']) || !isset($_SESSION['password'])) {
 
    die('Devi prima effettuare il login.');
}

require_once 'inc/database.php';

$utente = isset($_GET['user_id']) ? trim($_GET['user_id']) : ($_SESSION['name']);
$utente = addslashes($user_id);

$profilo = mysql_query("SELECT * FROM login_cliente WHERE name = '{$user_id}'");

if (!$profilo) {
    die('Errore nell\'invio della query del profilo: ' . mysql_error());
}

if (mysql_num_rows($profilo) === 0) {
    die('L\'utente {$utente} non esiste.');
}

$arr = mysql_fetch_assoc($profilo);
?>
 
Ultima modifica di un moderatore:
ciao
evidentemente le due sessioni, $_SESSION['email']) $_SESSION['password'], o uno o l'altra o entrambe non esistono.
verifica dove dovrebbero essere valorizzate.
poi un piccolo appunto
$_GET['user_id']
usare così l'id via get può essere molto pericoloso
 
è vero!!! non ci avevo pensato in realtà per le session ho:
PHP:
<?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();
}
?>

come posso modificare il codice precedente?
e mi daresti un consiglio per l'alternativa da usare a $_GET['user_id']?
grazie mille
 
Ultima modifica di un moderatore:
ciao
perche usi quell'ambaradan di funzioni?
es. a che ti serve avere la funzione function sessionStart()?
basta che la prima riga sia
PHP:
<?php
session_start();
//.....
?>
attenta prima del tag php quando usi session_start non deve essereci nemmeno una spazio
non so esattamente cosa devi fare ma le funzioni si usano soprattutto se devi fare la medesima operazione più volte o richiamarle in pagine diverse,
altrimenti sono solo una complicazione.
l'alternativa a $_GET è $_POST, ma non so cosa usi per far loggare l'utente, immagino un form.
in tal caso modifica il tag form <form name="form1" method="post"....
 
HTML:
<h3>Effettua Login</h3>
 

<div class="conteiner">
<form class="form-horizontal" method="post" action="" >
  <div class="control-group">
    <label class="control-label" for="user-email">Email</label>
    <div class="controls">
      <input type="text" name="user-email" placeholder="Email">
    </div>
  </div>
  <div class="control-group">
    <label class="control-label" for="user-password">Password</label>
    <div class="controls">
      <input type="password" name="user-password" placeholder="Password">
    </div>
  </div>
  <div class="control-group">
    <div class="controls">
  
      <button type="submit" value="Login" class="btn btn-primary">Login</button>
    </div>
  </div>
</form>
    
</div>

<a class="btn"  href="register.php">Registrati</a>&nbsp;&nbsp;
<a class="btn" href="lost_password.php">Password persa?</a>
<hr/>
 
Ultima modifica di un moderatore:
ciao
ho guardato il form e le funzioni, ma manca una cosa essenziale per capire dove ti inghippi.
intanto dove punta il form? vedo l'action vuota punta alla stessa pagina?
poi come ricevi/verifichi i dati inviati dal form prima di passarli alle funzioni (a parte la mia domanda sull'ambaradan)?
e non vedo una tabella di un db ne le query con cui poi vai a verificare l'esistenza o meno dell'username e password.
vedo che c'è il link a "registrati" quindi da qualche parte dovresti avere una tabella (db), non userai mica un file txt per salvare gli user e le pass?
ma anche se fosse (e spero di no) non vedo dove lo leggi
 
ti ringrazio per le risposte veloci che mi dai....sono alle prime armi quindi non molte cose non le so!
ti posto i due codici a cui faccio riferimento
PHP:
<?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) < 4) 
{
	$formErrors[] = 'La password inserita &egrave; troppo corta! Inserisci una password di almeno 4 caratteri ';	
}

// 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 successiva
		header('Location: rpc.php');
	}
}

// Stampo a video la lista degli errori, se presenti
echo showFormErrors($formErrors);


?>


<?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 login_cliente 
			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'];
        $userLastName		= $userData['lastname'];
        $userDataN		= $userData['datanascita'];
        $userLuogoN= $userData['luogonascita'];
        $userProv= $userData['provincia'];
        $userResidenza= $userData['residenza'];
        $userIndirizzo= $userData['indirizzo'];
	$token 			= $userData['token'];
	
	// Query per inserire i nuovi dati nel database
	$sql = "INSERT INTO login_cliente 
				(email, password, name,lastname,datanascita,luogonascita,provincia,residenza,indirizzo, token) 
			VALUES 
				('%s', '%s', '%s','%s','%s','%s','%s','%s','%s','%s') ";
	
	// Assegno alla query i parametri da cercare
	$sql = sprintf($sql, 
				$userEmail, 
				$userPassword, 
				mysql_real_escape_string($userName), 
                                mysql_real_escape_string($userLastName), 
                                $userDataN, $userLuogoN,$userProv,$userResidenza,$userIndirizzo,
				$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 login_cliente
			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 login_cliente
			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 login_cliente 
			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 login_cliente 
			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 login_cliente 
			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 login_cliente
			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;
	}
}
 
ciao
intanto hai postato tutto? poi facciamo un passo alla volta
tu includi il file utils.php dove c'è quell'ambaradan di function, e sin qui ok
poi raccogli i dati con il $_POST
passo uno: verifichi l'indirizzo email con
PHP:
<?php
//....
if (strlen($userEmail) == 0){
    $formErrors[] = 'Il campo email &egrave; obbligatorio.'; 
}else if (false == emailIsValid($userEmail))
{
    $formErrors[] = "L'indirizzo email inserito non &egrave; corretto";
}
//....
?>
ho guardato tra le funzioni, ma non vedo la emailIsValid, se devi farla puoi farla così
PHP:
<?php
function emailIsValid($e){
	return filter_var($e, FILTER_VALIDATE_EMAIL);
	//se l'indirizzo non è falido ritorna FALSE
}
?>
anche se non capisco perchè non utilizzi direttamente la funzione nativa di php (scrivi meno e quindi meno possibilità di errori)
PHP:
<?php
//....
if (strlen($userEmail) == 0){
    $formErrors[] = 'Il campo email &egrave; obbligatorio.'; 
}else if (!filter_var($userEmail, FILTER_VALIDATE_EMAIL)){
    $formErrors[] = "L'indirizzo email inserito non &egrave; corretto";
}
//....
?>
questo è uno (se non ho visto male) poi passo al resto

p.s.
anche se ammesso non usare nei nomi dei campi il - (meno) usa l'underscore, sempre per il principio che possono essere fonte di errore soprattutto se usi col copy/paste il nome del campo per definire una fvariabile php
 

Discussioni simili