Source : Quarante-deux
Code PHP :
<?php
if (isset($_GET['s']))
{
$s = intval($_GET['s']);
}
else $s = 0;
switch ($s)
{
case '1':
mysql_connect('localhost', 'user', 'mdp') or die(mysql_error());
$login = mysql_real_escape_string($_POST['login']);
$account_password0 = mysql_real_escape_string($_POST['password0']);
$account_password1 = mysql_real_escape_string($_POST['password1']);
$account_password2 = mysql_real_escape_string($_POST['password2']);
mysql_select_db('realmd');
$query = mysql_query("SELECT * FROM account WHERE username='".$login."'") or die(mysql_error());
$donnees = mysql_fetch_array($query);
$account_password = $donnees['sha_pass_hash'];
if ((!empty($account_password1)) AND (!empty($account_password2)) AND (!empty($login)))
{
if ($account_password1 == $account_password2)
{
$sql = "SELECT * FROM account WHERE username='$login' AND sha_pass_hash=SHA1(CONCAT(UPPER('$login'),':',UPPER('$account_password0')))";
$result2 = mysql_query($sql);
$num2 = mysql_num_rows($result2);
if ($num2 > 0) //Mot de passe OK
{
mysql_select_db('realmd');
mysql_query("UPDATE account SET sha_pass_hash=SHA1(CONCAT(UPPER('$login'),':',UPPER('$account_password1'))),v=0,s=0 WHERE username='$login'") or die(mysql_error());
echo 'Votre mot de passe a été changé.<br/>';
}
else
{
echo 'L\'ancien mot de passe est incorrect.<br/>';
}
}
else echo 'Les deux nouveaux mot de passe ne correspondent pas.<br/>';
}
else echo 'Un champ est resté vide';
break;
default:
?>
<form method="post" action="index_pwchange.php?s=1">
<table>
<tr><td>Nom de compte : </td><td><input type="text" name="login"/></td></tr>
<tr><td>Mot de passe : </td><td><input type="password" name="password0"/></td></tr>
<tr><td>Nouveau mot de passe : </td><td><input type="password" name="password1"/></td></tr>
<tr><td>Vérification : </td><td><input type="password" name="password2"/></td></tr>
</td></tr>
<tr><td><input type="submit" value="Valider"/></td><td><a href="/">Retour</a></td></tr>
</table>
</form>
<?php
break;
}
?>
Le code SQL à appliquer sur la base de donnée des comptes (par défault realmd)
Citation :SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `password_temp`
-- ----------------------------
DROP TABLE IF EXISTS `password_temp`;
CREATE TABLE `password_temp` (
`sha_pass_hash` text,
`login` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Cela peut toujours servir
Il se présente sous la forme :
Nom de compte
mot de passe
nouveau mot de passe
vérification nouveau mot de passe