通过我的代码彻底搜索后,我可以确定此错误的唯一原因是我用于将字符串转换为MD5的技术无效。但是我找不到另一种方法。
$username = $_POST['username'];
$password = $_POST['password'];
$repassword = $_POST['repassword'];
if( $password=$repassword ) {
$con=mysql_connect("localhost", "root", "");
if( $con == true ) {
mysql_select_db("movedb", $con);
//$newpassword = mysql_real_escape_string(md5($_POST['password']));
$query = "UPDATE user SET password=MD5('$password') WHERE username='$username'";
// $query = "UPDATE user SET password='$newpassword' WHERE username='$username'";
$result = mysql_query($query, $con);
if( $result == true ) {
echo "Successfully saved your message";
} else {
echo mysql_error();
}
mysql_close($con);
} else {
echo "Cannot connect to the database";
}
} else {
echo "Passwords do not match!";
}
有关如何从PHP更新此MD5值的任何想法
答案 0 :(得分:1)
$password = md5($password);
$query = "UPDATE user SET password='".$password."' WHERE username='".$username."'";
使用PHP支持的md5哈希。
答案 1 :(得分:1)
检查密码:
SELECT * FROM 'user' WHERE username='bob.jhonny' AND pass=MD5('oldPassword');
更新:
UPDATE 'dlp_contatcs'.'user' SET 'Pass'=MD5('NewPassword') WHERE 'Username'='bob.jhonny';
答案 2 :(得分:1)
可能导致问题的一个问题是MySQL和PHP在加密时使用不同的默认盐。这意味着生成的字符串将不同。所以你必须使用PHP 或 MySQL来加密,并且不是 2的混合物。
其次,MD5已被其他更好的加密算法取代。您可以考虑使用其中一个来提高安全性。查看PHP的crypt()
函数。
答案 3 :(得分:0)
警告:强>
请不要使用
mysql_*
函数来编写新代码。它们已不再维护,社区已开始deprecation process。请参阅red box?相反,您应该了解prepared statements并使用PDO或MySQLi。 This article应该提供有关决定使用哪个API的一些详细信息。对于PDO,这里是good tutorial。
您可以使用PHP计算md5()
哈希并将其存储到变量中,然后将该变量放入数据库中。检查数据库时,请确保执行相同的转换(PHP代码正文中为md5
。
您应该修改第if( $password=$repassword )
行。您需要两个或三个=
符号才能对某些内容进行if
检查。正确的行是if( $password === $repassword )
。
// ...
$newpassword = md5($_POST['password']);
$result = mysql_query('UPDATE user SET password="' .mysql_real_escape_string($newpassword). '" WHERE username = "' .mysql_real_escape_string($username). '"', $con);
if ( $result === TRUE )
{
echo "Successfully saved your message.";
// ...