我正在使用 mysqli 和 php,我想要做的是我希望用户能够创建一个新密码,如果他们希望这样做的话。
对于用户更改密码,他们将在“用户名”文本框中输入他们的用户名,然后在“新密码”文本框中输入他们的新密码。
当用户提交表单时,它应该在数据库中查找,在数据库中找到匹配的用户名并更新该行,以便以前的密码更改为新密码,并且它还会对密码进行加盐以更好地加密。
但问题是它根本没有这样做。数据库根本没有更新密码,别介意给它们加盐,我不知道我需要做什么。
下面是我的尝试(我已经连接到 db,但只是没有包含下面的代码):
<?php
// PHP code
session_start();
$salt = "";
for ($i = 0; $i < 40; $i++) {
$salt .= substr(
"./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
mt_rand(0, 63),
1);
}
$username = (isset($_POST['username'])) ? $_POST['username'] : '';
$newpassword = (isset($_POST['newpassword'])) ? $_POST['newpassword'] : '';
if (isset($_POST['submit'])) {
// don't use $mysqli->prepare here
$query = "UPDATE Teacher SET TeacherSalt = $salt, TeacherPassword = SHA1(CONCAT($newpassword,$salt)) WHERE TeacherUserName = ?";
// prepare query
$stmt=$mysqli->prepare($query);
// You only need to call bind_param once
$stmt->bind_param("s",$username);
// execute query
$stmt->execute();
// get result and assign variables (prefix with db)
$stmt->bind_result($dbTeacherUsername,$dbTeacherPassword);
while($stmt->fetch()) {
if ($username == $dbTeacherUsername) {
$loggedIn = true;
}
}
/* close statement */
$stmt->close();
/* close connection */
$mysqli->close();
}
....
<p>Username</p><p><input type="text" name="username" /></p> <!-- Enter Teacher Username-->
<p>New Password</p><p><input type="password" name="newpassword" /></p> <!-- Enter Teacher Password-->
下面是数据库表当前的样子:
TeacherUsername TeacherPassword TeacherSalt
j.lu fgrfre4r4ffsdfv
所以如果j.lu想修改密码,那么她会输入她的用户名,然后输入一个新密码,那么这应该都更新到上表中。但它没有更新任何东西。
谢谢