2012-07-24 71 views
-4

通过我的代码彻底搜索后,我可以确定此错误的唯一原因是我用于将字符串转换为MD5的技术无效。但是我找不到另一种方式来这样做。使用MD5值更新MySQL数据库

$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

+4

什么是“这个错误”? – deceze 2012-07-24 11:41:22

+0

并修复,如果你正在分配给它,你没有比较 – Gntem 2012-07-24 11:42:41

+0

没有获得错误信息 – Yoosuf 2012-07-24 11:46:17

回答

1
$password = md5($password); 
$query = "UPDATE user SET password='".$password."' WHERE username='".$username."'"; 

使用PHP更新该MD5值的任何想法支持MD5哈希值。

+0

不,它没有得到更新,也没有显示任何错误消息 – Yoosuf 2012-07-24 11:45:38

+1

然后echo $ query并将其放入phpmyadmin并检查是否有这样的条目,其中username = $ username。 – dpitkevics 2012-07-24 11:47:17

+0

令人惊讶的是,PHP MyAdmin说0行受到影响! UPDATE user SET password ='202cb962ac59075b964b07152d234b70'WHERE username ='admin' – Yoosuf 2012-07-24 11:59:51

1

检查密码:

SELECT * FROM 'user' WHERE username='bob.jhonny' AND pass=MD5('oldPassword');

更新:

UPDATE 'dlp_contatcs'.'user' SET 'Pass'=MD5('NewPassword') WHERE 'Username'='bob.jhonny';

+0

MD5(NewPassword)与我以前转换的一样 – Yoosuf 2012-07-24 11:45:11

0

警告:

请不要使用mysql_*功能ŧ o编写新的代码。他们不再被维护,社区已经开始了deprecation process。请参阅red box

相反,您应该了解prepared statements并使用PDOMySQLiThis 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."; 
// ... 
+0

是的,我也会检查最新版本的PHP编码。无论如何,你给的代码片段也不工作!没有显示任何错误信息,也没有在数据库中更新 – Yoosuf 2012-07-24 11:54:50

+0

@Yoosuf请检查连接是否成功,'用户'表存在,并且'用户名'(在你想要更新'password' )也存在。 – Whisperity 2012-07-24 11:57:39

+0

是的用户表存在,所以那些列用户名和记录管理。 – Yoosuf 2012-07-24 12:07:05

1

可能会导致问题的问题是,MySQL和PHP中使用不同的默认盐时,他们进行加密。这意味着结果字符串将会不同。所以,你必须为使用PHP MySQL的加密和的2

其次,MD5已经被其他更好的加密算法所取代的混合物。您可以考虑使用其中的一种来提高安全性。查看PHP的crypt()函数。