[RISOLTO]Modifica Profilo Utente PHP

Nickname

Utente Attivo
18 Set 2013
122
0
0
Salve a tutti, ormai sto intasando il forum con le mie richieste :p
Ultimamente ho creato un sito con un sistema di registrazione e login
Fin qui tutto ok, ora quello che mi chiedo è come posso fare in modo che gli utenti possano modificare il proprio profilo ?
Premetto che ho cercato molto su google e sul forum ma non ho trovato ancora nessuna soluzione e che non sono molto pratico con il PHP.

Come posso fare ?
Grazie a tutti ;)
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, immagino che tu abbia l'id dell'utente in sessione
Crei una pagina ovviamente sotto login, fai un aquery per estrarre i dati dell'utente che vuoi far modificare e li mostri dentro degli input text all'interno di un form che richiamerà la stessa pagina (o un altra ) che elaborerà i dati e farà l'update sulla tabella
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
non sapendo cosa hai nella sessione ne i nomi delle variabili campi e cosa vuoi cosa l'utente possa modificare faccio solo uno schema di come potresti fare.
poi ho messo le vecchie query mysql (faccio prima a scriverle) ma tu passa a mysqli o alla classe pdo.
PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){//questo DOVREBBE arrivare dalla pag di log, se log ok
	header("location: index.php");
	exit();
}
//dati di connessione.....
$query="SELECT * FROM utenti WHERE utente='".$_SESSION['utente']."'";
$ris=mysql_query($query);
$riga=mysql_fetch_array($ris);
$nome=$riga['nome'];
$cognome=$riga['cognome'];
if(isset($_POST['modifica'])){
	//non metto gli indispensabili controlli
	$n=$_POST['nome'];
	$c=$_POST['cognome'];
	$query="UPDATE utenti SET nome='$n', cognome='$c' WHERE utente='".$_SESSION['utente']."'";
	$ris=mysql_query($query);
	header("location: dove_vuoi.php");
	exit();
}
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  nome 
  <input name="nome" type="text" id="nome" value="<?php echo $nome; ?>">
  <br>
  cognome 
  <input name="cognome" type="text" id="cognome" value="<?php echo $cognome; ?>">
  <br>
  <input name="modifica" type="submit" id="modifica" value="modifica">
</form>
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
non sapendo cosa hai nella sessione ne i nomi delle variabili campi e cosa vuoi cosa l'utente possa modificare faccio solo uno schema di come potresti fare.
poi ho messo le vecchie query mysql (faccio prima a scriverle) ma tu passa a mysqli o alla classe pdo.
PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){//questo DOVREBBE arrivare dalla pag di log, se log ok
	header("location: index.php");
	exit();
}
//dati di connessione.....
$query="SELECT * FROM utenti WHERE utente='".$_SESSION['utente']."'";
$ris=mysql_query($query);
$riga=mysql_fetch_array($ris);
$nome=$riga['nome'];
$cognome=$riga['cognome'];
if(isset($_POST['modifica'])){
	//non metto gli indispensabili controlli
	$n=$_POST['nome'];
	$c=$_POST['cognome'];
	$query="UPDATE utenti SET nome='$n', cognome='$c' WHERE utente='".$_SESSION['utente']."'";
	$ris=mysql_query($query);
	header("location: dove_vuoi.php");
	exit();
}
?>
<form name="form1" method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  nome 
  <input name="nome" type="text" id="nome" value="<?php echo $nome; ?>">
  <br>
  cognome 
  <input name="cognome" type="text" id="cognome" value="<?php echo $cognome; ?>">
  <br>
  <input name="modifica" type="submit" id="modifica" value="modifica">
</form>

Io ho provato in questo modo, solo che mi sembra troppo semplice.
PHP:
<?php
if (isset ($_POST['submit'])){
	$nome = $_POST['nome'];
	$descrizione = $_POST['descrizione'];
	
	if ($nome&&$descrizione){
		
	mysql_connect ("localhost", "root", "") or die ("Impossibile......."); 
	mysql_select_db("db_prova") or die ("Impossibile.....");
	
	$exists = mysql_query ("SELECT * FROM utenti WHERE nome='$nome'") or die ("Impossibile..........");
	if (mysql_num_rows($exists) != 0){
		
		mysql_query ("UPDATE utenti SET descrizione='$descrizione' WHERE nome='$nome'") or die ("Caricamento non.....");
		echo "Tutto ok";
		
	}else echo "Utente non esiste";
	
	
} else echo "Inserisci tutti e due...";
}
?>
<html>
<head>
</head>
<body>
<form action="update.php" method="POST">
<table>
<tr><td>Nome:</td><td><input type="text" id="nome" name="nome"></td></tr>
<tr><td>Descrizione:</td><td><textarea id="descrizione" name="descrizione"></textarea></td></tr>
<tr><td>Nome:</td><td><input type="submit" id="submit" value="Inserisci" name="submit"></td></tr>
</table>
</form>

</body>
</html>
Premetto che funziona tutto benissimo, però vorrei capire cosa inserire per rendere il tutto più sicuro, grazie mille a tutti comunque per le risposte, questo forum è fantastico :)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
per avere un po' di sicurezza modifica la ricezione dei post
PHP:
<?php
//.....
$nome = addslashes(trim($_POST['nome']));
$descrizione = addslashes(trim($_POST['descrizione'])); 
//.....
?>
comunque non preuccuparti: "la semplicità di uno script non vuol dire malfunzionamento"
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
per avere un po' di sicurezza modifica la ricezione dei post
PHP:
<?php
//.....
$nome = addslashes(trim($_POST['nome']));
$descrizione = addslashes(trim($_POST['descrizione'])); 
//.....
?>
comunque non preuccuparti: "la semplicità di uno script non vuol dire malfunzionamento"
Ok grazie mille :)

Solo una cosa, in questo script praticamente uno deve inserire il nome dell'utente di cui vuole cambiare la descrizione, lo script verifica che quell'utente esista e poi esegue la modifica della descrizione.
Se io volessi semplicemente modificare solo la descrizione ? Senza inserire il nome.
Perché ovviamente se un utente va a modificare il proprio profilo (ovviamente dopo aver fatto il login) non deve andare ad inserire il proprio nome.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
Se io volessi semplicemente modificare solo la descrizione ? Senza inserire il nome.
questo dipende da come hai strutturato il log.
è evidente che o il nome lo inserisci o quando l'utente si logga questo passi in sessione.
devi avere sempre qualcosa che indichi quale record deve essere modificato
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao

questo dipende da come hai strutturato il log.
è evidente che o il nome lo inserisci o quando l'utente si logga questo passi in sessione.
devi avere sempre qualcosa che indichi quale record deve essere modificato
Bè la pagina può essere visualizzata solo dopo che un utente fa il login, poi metto così (ho modificato il codice che ho postato prima e l'ho messo per modificare il cognome):

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

echo "<b><i>Modifica il cognome:</i></b>"; 
echo "
<form action='update.php' method='POST'>
<table>
<tr><td>Cognome:</td><td><input type='text' id='cognome' name='cognome'></td></tr>
<input type='submit' id='submit' value='Inserisci' name='submit'></td></tr>
</table>
</form>
";
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
puoi fare così (a parte che mi sembra di averti gia postato qualcosa di simile)

PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){//l'utente NON è loggato
	header("location:alla_pagina_che_vuoi.php");//reindirizzi
	exit();
}
if(isset($_POST['submit'])){
	//dati di connessione
	if(trim($_POST['cognome']==""){
		echo "<h1>non pu&ograve; essere vuoto</h1>";
		//e rimandi al form
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{
		$cognome=addslashes($_POST['cognome']);
		query="UPDATE utenti SET cognome='$cognome' WHERE utente='".$_SESSION['utente']."'";
    	$ris=mysql_query($query);
    	header("location: alla_pagina_che_vuoi.php");
    	exit();
	}
}else{
	echo "<b><i>Modifica il cognome:</i></b>"; 
	echo "
	<form action='update.php' method='POST'>
	<table>
	<tr><td>Cognome:</td><td><input type='text' id='cognome' name='cognome'></td></tr>
	<tr><td><input type='submit' id='submit' value='Inserisci' name='submit'></td></tr>
	</table>
	</form>
	";
}
//...
?>
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
puoi fare così (a parte che mi sembra di averti gia postato qualcosa di simile)

PHP:
<?php
session_start();
if(!isset($_SESSION['utente'])){//l'utente NON è loggato
	header("location:alla_pagina_che_vuoi.php");//reindirizzi
	exit();
}
if(isset($_POST['submit'])){
	//dati di connessione
	if(trim($_POST['cognome']==""){
		echo "<h1>non pu&ograve; essere vuoto</h1>";
		//e rimandi al form
		echo "<meta http-equiv='Refresh' content='3; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
	}else{
		$cognome=addslashes($_POST['cognome']);
		query="UPDATE utenti SET cognome='$cognome' WHERE utente='".$_SESSION['utente']."'";
    	$ris=mysql_query($query);
    	header("location: alla_pagina_che_vuoi.php");
    	exit();
	}
}else{
	echo "<b><i>Modifica il cognome:</i></b>"; 
	echo "
	<form action='update.php' method='POST'>
	<table>
	<tr><td>Cognome:</td><td><input type='text' id='cognome' name='cognome'></td></tr>
	<tr><td><input type='submit' id='submit' value='Inserisci' name='submit'></td></tr>
	</table>
	</form>
	";
}
//...
?>
C'erano alcuni errori che ho comunque corretto, ma non va, stesso problema, dice che l'utente non esiste :( uff
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
scusa una cosa, ma dove ti dice che l'utente non esiste?
nello script che ti ho postato non c'è nulla che dica una cosa del genere.
sei sicuro che lo script di log sia ok?
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
scusa una cosa, ma dove ti dice che l'utente non esiste?
nello script che ti ho postato non c'è nulla che dica una cosa del genere.
sei sicuro che lo script di log sia ok?
Nella pagina update.php

PHP:
<?php
if(isset($_SESSION['utente'])){
	$cognome = addslashes(trim($_POST['cognome']));
	
	if ($cognome){
		
	$exists = mysql_query ("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'") or die ("Impossibile completare la richiesta");
	if (mysql_num_rows($exists) != 0){
		
		mysql_query ("UPDATE utenti SET cognome='$cognome' WHERE username = '$username' AND password = '$password_cript'") or die ("Caricamento dei dati nel database fallito.");
		echo "Tutto ok";
		
	}else echo "L'utente non esiste";
	
	
} else echo "Inserisci tutti i campi";
}
?>
Si lo script di log va bene perché per tutto il resto funziona.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se questo script è parziale è difficile capire dove è l'errore, se non è parziale ma completo mancano diverse cose e ci sono delle cose in piu
PHP:
<?php
if(isset($_SESSION['utente'])){
	$cognome = addslashes(trim($_POST['cognome']));
	if ($cognome){ 
		$exists = mysql_query ("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'") or die ("Impossibile completare la richiesta");
		if (mysql_num_rows($exists) != 0){
			mysql_query ("UPDATE utenti SET cognome='$cognome' WHERE username = '$username' AND password = '$password_cript'") or die ("Caricamento dei dati nel database fallito.");
			echo "Tutto ok";
		}else echo "L'utente non esiste";
} else 
	echo "Inserisci tutti i campi";
}
?>
se è completo:
1) non vedo il session_start
2) da dove saltano fuori le variabili $username e $password_cript?
3) se hai fatto il log (come dovrebbe) a che ti serve riverificare l'utente?
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
se questo script è parziale è difficile capire dove è l'errore, se non è parziale ma completo mancano diverse cose e ci sono delle cose in piu
PHP:
<?php
if(isset($_SESSION['utente'])){
	$cognome = addslashes(trim($_POST['cognome']));
	if ($cognome){ 
		$exists = mysql_query ("SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'") or die ("Impossibile completare la richiesta");
		if (mysql_num_rows($exists) != 0){
			mysql_query ("UPDATE utenti SET cognome='$cognome' WHERE username = '$username' AND password = '$password_cript'") or die ("Caricamento dei dati nel database fallito.");
			echo "Tutto ok";
		}else echo "L'utente non esiste";
} else 
	echo "Inserisci tutti i campi";
}
?>
se è completo:
1) non vedo il session_start
2) da dove saltano fuori le variabili $username e $password_cript?
3) se hai fatto il log (come dovrebbe) a che ti serve riverificare l'utente?

Ciao, no lo script è parziale, il session_start, la verifica utente e le variabili le ho messe prima, il resto del codice lo puoi trovare qui:
http://forum.mrwebmaster.it/php/36322-account-utente-php.html
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
verifica per prima cosa di avere aperto/chiuso correttamente le graffe dei vari if/else, se non ne hai saltata una col copy/paste mi sembra che ne manchi una.
poi dividi la query di select e metti un var dump per verificare se viene scritta come dovrebbe

PHP:
<?php
//....
	$q="SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'";
	var_dump($q);
	mysql_query($q);
//....
?>
 

Nickname

Utente Attivo
18 Set 2013
122
0
0
ciao
verifica per prima cosa di avere aperto/chiuso correttamente le graffe dei vari if/else, se non ne hai saltata una col copy/paste mi sembra che ne manchi una.
poi dividi la query di select e metti un var dump per verificare se viene scritta come dovrebbe

PHP:
<?php
//....
	$q="SELECT * FROM utenti WHERE username = '$username' AND password = '$password_cript'";
	var_dump($q);
	mysql_query($q);
//....
?>
Aaallora, scusami se ho tardato a rispondere ma ho avuto altri problemi :D
Ho "risolto" la cosa facendo in modo che l'utente possa modificare tutti i suoi dati e che alla fine come conferma dovesse immettere la propria password.

Ora però ho un'altro problema relativo sempre a questo:

Come posso fare in modo che l'utente possa modificare anche la propria immagine del profilo?
Lo script per la modifica è quello che ho postato precedentemente, leggermente modificato.