我正在构建注册和登录表单,我想在注册时哈希我的用户密码,此时我的主要问题是当用户签署他的电子邮件并通过时,如何编写查询来更新密码第一次,我想在查询中添加mysqli_insert_id(),以跟踪每个用户的唯一ID。
所以我的数据库名为testdb,里面有@Override
public int getItemViewType(int position) {
return position == playposition ? PLAYING_LAYOUT : STILL_LAYOUT;
}
。
我的代码完全正常工作,直到您必须查询密码并更新密码为止。
首先我要哈希我的密码
users
正如您所看到的,我的查询存在问题,应该更新数据库中的密码。
我已经编写了这段代码,所以我需要帮助才能继续我的UPDATE查询
$password = $_POST['password'];
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
$query = "UPDATE `users` SET `password` = '$hashed_password' WHERE id = "
答案 0 :(得分:1)
在任何情况下,您都不应以明文形式存储密码。
这意味着当您注册用户时,您应该立即散列密码并在执行insert语句时将其存储为散列格式。您当前的逻辑以纯文本形式存储密码,如果注册成功,则您尝试更新密码以成为哈希密码。这意味着如果有任何失败,你最终可能只在数据库中只有明文密码,无论哪种方式,这意味着在某个特定点它确实存在于某个给定点的纯文本中,对于我们不知道的任何用户不想要。
此外,除了浪费一些额外的代码行之外,update语句没有用处。
这样的事情应该做:
if ( mysqli_num_rows($results) > 0 ) {
$error = "That email address is taken.";
} else {
$password = $_POST['password'];
$hashed_password = password_hash($password, PASSWORD_BCRYPT);
$query = "INSERT INTO `users` (`email`, `password`) VALUES('".mysqli_real_escape_string($link, $_POST['email'])."','".$hashed_password."') ";
if (!mysqli_query($link,$query)) {
$error = "<p>Could not sign you up - please try again later</p>";
} else {
echo "Sign up successful";
}
}
但是,如果您真的想坚持自己的计划,那么您可以为刚刚创建的用户选择用户ID(例如,使用希望唯一的电子邮件标识符)并使用它来识别哪个用户更新。请不要这样做。
注意:我建议您查看mysqli's prepared statements以确保更高级别的安全性,而不是转发单个变量。