2012-07-24 90 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()函數。