[RISOLTO]Account Utente PHP

Nickname

Utente Attivo
18 Set 2013
122
0
0
Salve a tutti, sono ancora qui con un altro problema in php XD
Praticamente ho creato un sistema di registrazione e login degli utenti.
Ovviamente ora ho creato anche una pagina con il proprio account.
Il problema è che, facendo il login per la prima volta, i dati nell'account non vengono visualizzati, se invece si esce e si rientra vengono visualizzati correttamente.
Non capisco il perché di questo.
Come detto in altre discussioni sono una capra in php XD, quindi non fate caso ai vari errori e imprecisioni nel codice:


Questo è il login con il logout:

PHP:
<?php if(isset($_SESSION['utente']))
{					
echo "Ciao ".$_SESSION['utente']." | <a href='account.php?azione=logout' class='logout'>Esci</a>";

} else {
					
echo "<a href='account.php?azione=login' class='login'>Accedi</a>";
}
 ?>

<?php
		
$p = $_GET['azione'];

if($p == "login"){
if(!isset($_POST['invia'])){ ?>
<br />
<form method="post" action="#" id="formlogin">
					
<label for="username">Nome Utente</label><br />
<input type="text" name="username" id="username" /><br><br>
<label for="password">Password</label><br />
<input type="password" name="password" id="password" /><br /><br>
<input type="submit" name="invia" id="buttonlogin" value="Entra" />

</form>

Questo è il recupero dei dati ecc.

PHP:
<?php
} else {
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
  
if($username == "" || $password == ""){
					
echo "Attenzione, devi inserire sia il Nome utente che la Password.";
					
} else {
	
$password_cript = md5($password);
					
mysql_query("SELECT * FROM utenti WHERE id  = ".$_SESSION['id']);
		
$recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'");
						
$verificadati = mysql_num_rows($recuperadati);
						
if($verificadati == 1){
						
$sessione = mysql_fetch_array($recuperadati);
$_SESSION['id'] = $sessione['id'];
$_SESSION['utente'] = $sessione['username'];
$_SESSION['email2'] = $sessione['email'];
$_SESSION['nome2'] = $sessione['nome'];
$_SESSION['cognome2'] = $sessione['cognome'];
echo "<br><b>Login effettuato con successo.</b>";
header("Refresh: 2; URL= account.php");

} else {
						
echo "Utente o password sbagliati.";
						
}
}
}

} elseif ($p == "logout"){
			
session_destroy();
echo "<br>Logout effettuato con successo!";
header("Refresh: 2; URL= account.php");
}
?>

E infine con questo recupero i dati dal database:

PHP:
<?php if(isset($_SESSION['utente'])) {

echo "<b>Email: </b>"; echo $_SESSION['email2']; echo "<br>";
echo "<b>Nome: </b>"; echo $_SESSION['nome2']; echo "<br>";
echo "<b>Cognome: </b>"; echo $_SESSION['cognome2']; echo "<br>";
?>

Non capisco dove sbaglio.
Grazie mille a tutti per l'aiuto :)
 
Non vedo session_start() da nessuna parte
ricordati che deve essere la prima istruzione in una pagina che fa uso selle sessioni
 
Devi sempre mettere session_start() quando vuoi usare le sessioni, non è detto che risolvi, inizia così intanto
 
Devi sempre mettere session_start() quando vuoi usare le sessioni, non è detto che risolvi, inizia così intanto

Mh ho provato facendo questo così

PHP:
 <?php if(isset($_SESSION['utente'])) {
session_start();
echo "<b>Email: </b>"; echo $_SESSION['email2']; echo "<br>";
echo "<b>Nome: </b>"; echo $_SESSION['nome2']; echo "<br>";
echo "<b>Cognome: </b>"; echo $_SESSION['cognome2']; echo "<br>";
?>

Ma niente, ma poi il fatto strano è che facendo il login per la prima volta da questo problema, se invece uno esce e rifà il login si visualizza tutto correttamente, è molto strano
 
session_start(); deve stare prima di ogni altra istruzione (a inizio pagina )
 
mysql_query("SELECT * FROM utenti WHERE id = " . $_SESSION['id']);
dove l'hai messa non ha motivo di esistere
la pagina account.php quale sarebbe?
 
nel senso posta l'intero codice della pagina account.php, deve essere li il problema
 
nel senso posta l'intero codice della pagina account.php, deve essere li il problema

Ah ok, eccolo :

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Profilo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

<?php

	include 'config.php';
	connect();
	session_start();
	
?>

</head>
<body>
<div id="login">
<?php if(isset($_SESSION['utente']))
{					
echo "Ciao ".$_SESSION['nome2']." | <a href='account.php?azione=logout' class='logout'>Esci</a>";

} else {
					
echo "<a href='account.php?azione=login' class='login'><div id='scrittalogin'>Accedi</div></a>";
}
 ?>

<?php
		
$p = $_GET['azione'];

if($p == "login"){
if(!isset($_POST['invia'])){ ?>
<br />
<form method="post" action="#" id="formlogin">
					
<label for="username">Nome utente</label><br />
<input type="text" name="username" id="username" /><br><br>
<label for="password">Password</label><br />
<input type="password" name="password" id="password" /><br /><br>
<input type="submit" name="invia" id="buttonlogin" value="Entra" />

</form>

		
<?php

} else {
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
  
					
if($username == "" || $password == ""){
					
echo "<br>Devi inserire sia il Nome utente che la Password.</span>";
					
} else {
	
$password_cript = md5($password);
					
mysql_query("SELECT * FROM utenti WHERE id  = ".$_SESSION['id']);
		
$recuperadati = mysql_query("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'");
						
$verificadati = mysql_num_rows($recuperadati);
						
if($verificadati == 1){
						
$sessione = mysql_fetch_array($recuperadati);
$_SESSION['id'] = $sessione['id'];
$_SESSION['utente'] = $sessione['username'];
$_SESSION['email2'] = $sessione['email'];

echo "<br><b>Login effettuato con successo.</b>";
header("Refresh: 2; URL= account.php");

} else {
						
echo "<br>Utente o password sbagliati.";
						
}
}
}

} elseif ($p == "logout"){
			
session_destroy();
echo "<br>Logout effettuato con successo!";
header("Refresh: 2; URL= account.php");
}
?>

</div>

<div id="dati">

<?php if(isset($_SESSION['utente'])) {

echo "<b>username: </b>"; echo $_SESSION['utente']; echo "<br>";
echo "<b>Email: </b>"; echo $_SESSION['email2']; echo "<br>";
} ?>

</div>


</body>
</html>
 
mmm.. mi sembra a posto
posta anche il login che ti porta a questa pagina
edit:
lascia perdere questa mia ultima risposta : stavo leggendo un altro file
 
Ultima modifica:
l'ho provato e a parte diversi warning funziona
qunado scrivi
PHP:
echo "Ciao " . $_SESSION['nome2'] . "
non stampa perche nome2 non è settato, dovresti scrivere
PHP:
echo "Ciao " . $_SESSION['utente'] . "
a parte questo il problema che hai descritto non l'ho notato
 
l'ho provato e a parte diversi warning funziona
qunado scrivi
PHP:
echo "Ciao " . $_SESSION['nome2'] . "
non stampa perche nome2 non è settato, dovresti scrivere
PHP:
echo "Ciao " . $_SESSION['utente'] . "
a parte questo il problema che hai descritto non l'ho notato

No no nome2 l'ho settato ma mi sono dimenticato di metterlo, ma anche se fosse la cosa non cambia, non capisco perché fa così :(
 
per verificare ho messo var_dump($_SESSION); subito dopo session_start() e la sessione viene creata correttamente
pulisci la cache del tuo browser e riprova : a me funziona
 
per verificare ho messo var_dump($_SESSION); subito dopo session_start() e la sessione viene creata correttamente
pulisci la cache del tuo browser e riprova : a me funziona

No niente, avevo già provato, ma uguale, non capisco proprio perché faccia così, gli unici dati che mi si vedono la prima volta sono l'username e il nome.
Il resto tutto vuoto (nel codice che ho postato c'è poca roba ma in quello originale c'è nome,cognome,indirizzo ecc.)
Uff help :(
 
Ho risolto, era un problema stupidissimo.
Praticamente se facevo il login dalla pagina account.php i dati venivano tutti restituti correttamente.
Se lo facevo ad esempio da index.php invece no, semplicemente mi ero dimenticato, nella pagina index (dove facevo il login), di recuperare i dati dal database.
Quindi ho risolto mettendo questo anche in index:

PHP:
$_SESSION['id'] = $sessione['id'];
$_SESSION['utente'] = $sessione['username'];
$_SESSION['email2'] = $sessione['email'];

Così tutto funziona bene, scusate per la scocciatura :D
Spero sia utile a qualcuno
 

Discussioni simili