【发布时间】:2011-06-20 22:06:04
【问题描述】:
我有简单的密码重置结构,用户可以在丢失时更新他们现有的密码。用户转到他们输入电子邮件的链接,为忘记密码的用户创建一个令牌并将其存储在指定的表中。一封电子邮件会发送给用户,其中包含一个附加了令牌的链接,当他们点击该链接时,它会将他们带到一个页面以重置他们的密码。如果存储在数据库中的令牌与$_GET 中的令牌匹配,我允许他们重置密码。很简单。
问题是我无法更新他们在数据库中的特定行。我试图通过检查他们在数据库中输入的电子邮件来识别他们。我可以更新整个表的密码行,但是当指定一个用户时它会失败。
if(isset($_POST['sub_settings'])){
$query = "SELECT * FROM `Password_Reset` WHERE `token` = '".$token."' AND `email` = '".$user_email."'";
$request = mysql_query($query,$connection) or die(mysql_error());
$result = mysql_fetch_array($request);
$token = $result['token'];
$alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcedfghijklmnopqrstuvwxyz1234567890";
$rand = str_shuffle($alpha);
$salt = substr($rand,0,40);
$hashed_password = sha1($salt . $_POST['password']);
$user_email = $result['email'];
if($_GET['token'] == $token) {
header("Location: index.php");
exit;
}else{
if(empty($_POST['Password'])) {
$valid = false;
$error_msgs[] = 'Whoops! You must enter a password.';
}
if($_POST['Password'] != $_POST['passwordConfirm'] || empty($_POST['Password'])) {
$valid = false;
$error_msgs[] = "Your password entries didn't match...was there a typo?";
}
if($valid) {
$query = "UPDATE `Users` SET `encrypted_password` = '$hashed_password' WHERE `Email` = '$user_email'";
mysql_query($query,$connection);
}
}
}
提前非常感谢
【问题讨论】:
标签: php mysql html passwords reset