Inserire vecchia password per cambiare password

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
Massa, Italy
Salve, come faccio ad fare che l'utente del sito possa cambiare password ed deve inserire la vecchia per confermare la nuova password?.

il codice mio è cosi: -- > l'unico che vorrei far inserire la vecchia.. essendo che quella inserita è stata criptata con md5 come faccio a verificare
se l'utente ha scritto la password vecchia giusta?
PHP:
<?php
require_once(dirname(__FILE__) . '/../inc.php');
require_once(dirname(__FILE__) . '/member.php');
$page = new Page;
$page->setTitle('Password utente');
$page->startBody();
?>
<?php


if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	
if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {
	
		$id_user = get_userID($_SESSION["user_crypt"]);
		$db_id_user = $db->real_escape_string($id_user);
		
	
		$query = "SELECT * FROM utenti WHERE id='".$db_id_user."'";
		$result = $db->query($query) or die($db->error);
		if(empty($db_id_user)) {
		echo "ID non specificato";
}
elseif ($result->num_rows==0) { echo "Record non trovato!"; }
else
{
		$row = $result->fetch_assoc();
		$result->free_result(); 
	
if(isset($_POST["invia"]))
{

		$password = protect($_POST["password"]);

	if(empty($password))
	{
		$error = "Inserire la password nuova o lasciare in bianco per non cambiare la password";
	}
	else
	if ($password != $row["pass"] )
		{
		
		 $db_password = $db->real_escape_string($password);
		
		$strSQL = "UPDATE utenti SET"
						. " pass = '".md5($db_password)."'"
					. " WHERE id = ".$db_id_user."";	
		$db->query($strSQL) or die($db->error);
		
		$msg = "Fatto...<a href=\"update_password.php\">Torna indietro</a>";
		}else
	{ $msg = "Nessuna modifica eseguita: <a href=\"update_password.php\">Torna indietro</a>";}
	}
	
	


?>
<p class="titolo">Cambio password di <?php echo get_username($_SESSION["user_crypt"]);  ?></p>
<?php	if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	?>
<?php	if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {?>
	<div align="center">
	<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
	<table style="text-align: left;" border="0" cellpadding="4" cellspacing="4" align="center" >
  <tbody>
    <tr>
      <td align="center">Password</td>
      <td><input class="input" type="text" id="password" name="password" size="50" value="<?php if(isset($_POST['password'])){echo $_POST['password'];} ?>" /></td>
    </tr>
  </tbody>
</table>
<p></p>
<input type="submit" name="invia" value="Modifica" />
</form>
</div>
	<?php 
	?><?php
	}
}
}
?>
<?php
$page->endBody();
echo $page->render('layout/template.php');
?>
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
Devi fare lo stesso meccanismo di quando fai il login, cioè cripti la password e la confronti con quella del db, inoltre md5 non è più molto sicuro per proteggere le password, alternalo allo sha1, generalo più volte oppure prova la funzione hash() per usare altri algoritmi meno conosciuti.
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
Massa, Italy
ciao, ok grazie per le info:
ma ho fatto cosi:

PHP:
<?php
require_once(dirname(__FILE__) . '/../inc.php');
require_once(dirname(__FILE__) . '/member.php');
$page = new Page;
$page->setTitle('Password utente');
$page->startBody();
?>
<?php


if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	
if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {
	
		$id_user = get_userID($_SESSION["user_crypt"]);
		$db_id_user = $db->real_escape_string($id_user);
		
	
		$query = "SELECT * FROM utenti WHERE id='".$db_id_user."'";
		$result = $db->query($query) or die($db->error);
		if(empty($db_id_user)) {
		echo "ID non specificato";
}
elseif ($result->num_rows==0) { echo "Record non trovato!"; }
else
{
		$row = $result->fetch_assoc();
		$oldpassword = md5($row['pass']);
		
		$result->free_result(); 
	
if(isset($_POST["invia"]))
{

		$password = md5(protect($_POST['password']));
		$newpassword = md5(protect($_POST['newpassword']));
		
	if(empty($password))
	{
		$error = "Inserire la password nuova o lasciare in bianco per non cambiare la password";
	}	
	else
	{
	
	if($password != $oldpassword)
	{
	   $error = "Password vecchia non esite";
	}else
		{	
		 $db_password = $db->real_escape_string($newpassword);
		
		$strSQL = "UPDATE utenti SET"
						. " pass = '".md5($db_password)."'"
					. " WHERE id = ".$db_id_user."";	
		$db->query($strSQL) or die($db->error);
		
		$msg = "Fatto...<a href=\"update_password.php\">Torna indietro</a>";
	}
	
}
}
	


?>
<p class="titolo">Cambio password di <?php echo get_username($_SESSION["user_crypt"]);  ?></p>
<?php	if ( isset ( $error ) )	{ echo '			<p class="error">' . $error . '</p>' . "\n";	}	?>
<?php	if ( isset ( $msg ) )	{ echo '			<p class="msg">' . $msg . '</p>' . "\n";	} else {?>
	<div align="center">
	<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
	<table style="text-align: left;" border="0" cellpadding="4" cellspacing="4" align="center" >
  <tbody>
    <tr>
      <td align="center">Vecchia Password</td>
      <td><input class="input" type="password" id="password" name="password" size="50" value="<?php if(isset($_POST['password'])){echo $_POST['password'];} ?>" /></td>
    </tr> <tr>
      <td align="center">Password</td>
      <td><input class="input" type="text" id="newpassword" name="newpassword" size="50" value="<?php if(isset($_POST['newpassword'])){echo $_POST['newpassword'];} ?>" /></td>
    </tr>
  </tbody>
</table>
<p></p>
<input type="submit" name="invia" value="Modifica" />
</form>
</div>
	<?php 
	?><?php
	}
}
}
?>
<?php
$page->endBody();
echo $page->render('layout/template.php');
?>
mi dice sempre: "Password vecchia non esite" anche se la inserisco giusta.

hai idee?

ora cambio md5 a sha etc..

ti ringrazio molto.