2016-08-18 144 views
0

這是我的代碼,我想更新密碼與給定的新密碼$new_password,驗證它與$new_password2並檢查當前給定的密碼是否匹配$old_password檢查哈希密碼,並在php

<?php 
    if (isset($_POST['submit'])) { 

    //validations 
    $required_fields = array("username", "old_password", "password", "password2"); 
    validate_presences($required_fields); 

    $fields_with_max_lengths = array("username" => 30); 
    validate_max_lengths($fields_with_max_lengths); 

    if(empty($errors)) { 
     //process the form 
     $id = $admin["id"]; 
     $username = mysql_prep($_POST["username"]); 
     $new_password = password_encrypt($_POST["password"]); 
     $old_password = password_encrypt($_POST["old_password"]); 
     $new_password2 = password_encrypt($_POST["password2"]); 

您必須給出的兩個密碼必須相互相等才能更改密碼。所有三個密碼都被散列。驗證新密碼需要使用$new_password$new_password2$old_password也必須更新爲$new_password。如果ID等於數據庫中的編號並且$old_password與當前的$old_password匹配,則必須更改它。

 if ($new_password == $new_password2) { 
     //update 
     $query = "UPDATE admins SET "; 
     $query .= "username = '{$username}', "; 
     $query .= "password = '{$new_password}', "; 
     $query .= "old_password = '{$new_password}', "; 
     $query .= "password2 = '{$new_password}' "; 
     $query .= "WHERE id = {$id} "; 
     $query .= "AND old_password = '{$old_password}' "; 
     $query .= "LIMIT 1"; 
     $result = mysqli_query($connection, $query); 

     if ($result && mysqli_affected_rows($connection) == 1) { 
     //success 
     $_SESSION["message"] = "Admin updated."; 
     redirect_to("manage_admins.php"); 

     } else { 
     //failure 
     $_SESSION["message"] = "Admin update failed1"; 
     } 
     } else { 
     $_SESSION["message"] = "Admin update failed2"; 
     } 
    } else { 
     $_SESSION["message"] = "Admin update failed3"; 
    } 
    } else { 
     } 
?> 
+0

你跑什麼問題? – Nick

+0

什麼是'password_encrypt'?你的意思是[password_hash](http://php.net/manual/en/function.password-hash.php)? – Machavity

+0

它告訴我我有一個錯誤,如果($ new_password == $ new_password2){} –

回答

0

您可能指的是password_hash而不是password_encrypt。但是,這將是錯誤的用法。看看password_verify。其基本思想是從數據庫中獲取該用戶的當前散列密碼,然後使用password_verify檢查用戶條目與存儲的散列值。

+0

我真的不知道,我在html中發送了證書,這些證書將在數據庫中加密。這些是三個值,在這段代碼中,我正在嘗試檢查old_password是否與散列函數匹配,後來我添加了一個散列函數並且必須驗證新散列函數。對不起,模糊不清 –

+0

Password_verify是這樣的:function password_encrypt($ password){ $ hash_format =「$ 2y $ 10 $」; $ salt_length = 22; $ salt = generate_salt($ salt_length); $ format_and_salt = $ hash_format。 $鹽; $ hash = crypt($ password,$ format_and_salt); 返回$ hash; } –