Inserire vecchia password per cambiare password

luigi777

Utente Attivo
14 Feb 2008
1.086
1
38
42
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');
?>
 
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.
 
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.
 

Discussioni simili