2013-06-23 563 views
1

我正在爲我的網站實施密碼更改功能。不幸的是它不起作用。PHP:更改密碼

在.html文件,我得到了代碼:

<form method='post' > 
        <td>Old Password:</td>     
        <td><input name='oldpw' type='password' required='required'/></td> 
       <tr> 
        <td>New Password:</td> 
        <td><input name='newpw' type='password' required = 'required' /></td> 
       <tr>      
        <td>Confirm Password:</td>     
        <td><input name='conpw' type='password' required = 'required' /></td> 
        <td> 
        <input type='submit' value='Change Password' /> 
        </td> 
       </tr>   
       </form> 

在我寫這個account.php文件:

if (isset($_POST['newpw'])){ 

    $pw=$dbc->query("select passwort from kundenaccount where accname= '" . $_SESSION['accname'] . "';") 
       $row = $pw->fetch_object() 
       $pawo = $row->passwort 

     if (md5($_POST['oldpw']) == $pawo){ 
     if ($_POST['newpw']==$_POST['conpw']){ 
     $dbc->query("UPDATE accname SET passwort='" . md5($_POST['newpw']) . "' WHERE accname='" . $_SESSION['accname'] . "';") 
     } 
     else { echo "Passwords do not match" } 
     } 
    else { echo "Wrong password entered"} 
    } 

不要任何人看到我的錯誤?我試圖解決這個問題,因爲天..

希望任何人都可以提供幫助。

感謝

+3

不要儲存在純文本或MD5密碼。你也可以嘗試刪除你在任何地方都不應該使用的@。你應該處理錯誤,而不是壓制它們。 – JimL

+2

您的表單沒有采取任何行動 – user2067005

+4

第一步,** STOP **用'@'來禁止錯誤。如果代碼不起作用,那麼不要做相當於在你的耳朵裏塞入手指並且去拉拉拉。 –

回答

2

試試這個表單上:

<form method='post' action='account.php'> 

更新:

我經歷了,併爲我的數據庫做腳本,工作正常。在需要更改值:

<?php 
$dbc = new mysqli("localhost", "db-user", "db-pass", "db-name"); 
if (isset($_POST['newpw'])){ 
    [email protected]$dbc->query("select passwort from kundenaccount where accname= '" . $_SESSION["accname"] . "'"); 
       $row = $pw->fetch_object(); 
       $pawo = $row->password ; 

    if (md5($_POST['oldpw'])== $pawo){ 

     if ($_POST['newpw']==$_POST['conpw']){ 
     @$dbc->query("UPDATE kundenaccount SET passwort='" . md5($_POST['newpw']) . "' WHERE accname='" . $_SESSION['accname'] . "'"); 
     } 
     else { echo "Passwords do not match"; } 
     } 

    else { echo "Wrong password entered";} 
    } 
    ?> 
0

MD5是一種單向散列,所以你不能撤銷它,你應該比較的其他方式。

if (md5($_POST['oldpw'])==$pawo){ 

注:MD5不被認爲是安全的,我會升級到另一個算法..

1
if ($_POST['oldpw']==md5($pawo)) 

應該

if (md5($_POST['oldpw']) == $pawo) 
0

另一種解決問題的辦法

<?php 

include ('connect_db.php'); 
if(isset($_POST['submit'])) 
    { 
     $oldpw = $_POST ['oldpw']; 
$newpw = $_POST ['newpw']; 
$retypepw = $_POST ['retypepw']; 

$sql = mysql_query("SELECT * FROM users WHERE password = '$oldpw'") or die (mysql_error()); 
    if ($sql) 

    { 
     $row = mysql_fetch_array($sql); 
     extract ($row); 

     if ($oldpw <> $password) { 
      echo "Passwords dont match";} 

      else 

     if ($newpw == $retypepw){ 
     $update = mysql_query("UPDATE users SET password = '$newpw' WHERE password = '$oldpw' ") or die (mysql_error()); 
      if($update) 

    { 

     echo "Successfully changed password"; } 
     } 

    else { echo "Password dont match";} 

     } 

    } 
    ?>