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

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non vedo session_start() da nessuna parte
ricordati che deve essere la prima istruzione in una pagina che fa uso selle sessioni
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Devi sempre mettere session_start() quando vuoi usare le sessioni, non è detto che risolvi, inizia così intanto
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
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
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
session_start(); deve stare prima di ogni altra istruzione (a inizio pagina )
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
session_start(); deve stare prima di ogni altra istruzione (a inizio pagina )
Ah si dimenticavo, quello l'ho messo
PHP:
<?php

	include 'config.php';
	connect();
	session_start();
	
?>
All'inizio di ogni pagina
Però il problema c'è lo stesso.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
mysql_query("SELECT * FROM utenti WHERE id = " . $_SESSION['id']);
dove l'hai messa non ha motivo di esistere
la pagina account.php quale sarebbe?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
nel senso posta l'intero codice della pagina account.php, deve essere li il problema
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
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>
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
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ì :(
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
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
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
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 :(
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
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