2013-06-23 228 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";} 

     } 

    } 
    ?>