密码更改PHP

密码更改PHP,php,passwords,Php,Passwords,我正在编写一个简单的脚本,允许用户创建一个帐户。它没有什么特别之处,因为它要求的是用户名和密码。我遇到的唯一问题是创建一个允许用户更改密码的脚本。这是我的进步 它说“你当前的密码不对!”,即使密码很好。我已经有它连接到数据库与另一个代码在同一页上 <?php $CurrentPassword = mysql_real_escape_string(strip_tags(stripslashes($_POST['CurrentPassword']))); $NewPasswo

我正在编写一个简单的脚本,允许用户创建一个帐户。它没有什么特别之处,因为它要求的是用户名和密码。我遇到的唯一问题是创建一个允许用户更改密码的脚本。这是我的进步

它说“你当前的密码不对!”,即使密码很好。我已经有它连接到数据库与另一个代码在同一页上

<?php
    $CurrentPassword  = mysql_real_escape_string(strip_tags(stripslashes($_POST['CurrentPassword'])));
    $NewPassword    = mysql_real_escape_string(strip_tags(stripslashes($_POST['NewPassword'])));
    $ConfirmNewPassword = mysql_real_escape_string(strip_tags(stripslashes($_POST['ConfirmNewPassword'])));
    $Submit2      =    mysql_real_escape_string(strip_tags(stripslashes($_POST['Submit2'])));
?>
<?php
    if ($Submit2) {
       $_OLDHASH = hash('sha512',''.$CurrentPassword.'');
       $_NEWHASH = hash('sha512',''.$NewPassword.'');
       $_CONFIRMNEWHASH = hash('sha512',''.$ConfirmNewPassword.'');

       if ($myU->Password == $_OLDHASH) {
           if ($_NEWHASH == $_CONFIRMNEWHASH) {
               mysql_query("UPDATE Password='".$_NEWHASH."' WHERE Username='".$User."'");
               session_destroy();
               header("Location: index.php");
           }
           else {
               echo "Your new password and new confirm password does not match!";
           }
       }
       else {
           echo "Your current password is not right!";
       }
    }
?>


<form action='' method='POST'>
<br />
Update Password
<br />
<input placeholder='Current Password' type='password' name='CurrentPassword'>
<br />
<input placeholder='New Password' type='password' name='NewPassword'>
<br />
<input placeholder='Confirm New Password' type='password' name='ConfirmNewPassword'>
<br />
<input type='submit' value='Change' name='Submit2'><br />
</form>

尝试创建两个文件:

changePass.html:

<form action='changePass.php' method='POST'>
<br />
Update Password
<br />
<input placeholder='Current Password' type='password' name='CurrentPassword'>
<br />
<input placeholder='New Password' type='password' name='NewPassword'>
<br />
<input placeholder='Confirm New Password' type='password' name='ConfirmNewPassword'>
<br />
<input type='submit' value='Change' name='Submit2'><br />
</form>


更新密码




和第二个copyPass.php:

<?php
//    Copy your php code here
?>

因此,当用户想要更改pass时,将其指向changePass.html,当用户输入表单时,数据将被传输并处理到changePass.php。请注意,表单中的tag/action参数被添加为changePass.php,作为处理数据的网页

现在我还注意到SQL查询中的语法错误,您应该编写如下代码:


mysql_query(“UPDATE
passwordTable
SET
Password='”。$\u NEWHASH。“”其中Username='”。“$User.”)

当你在登录时检查密码时,你是否也在做这些无关的事情

mysql_real_escape_string(strip_tags(stripslashes()))
因为我可以看到,使用包含特殊字符的密码(也称为:强密码)会导致问题。我的建议是根本不要这样做,在将输入包括在查询中之前要对其进行散列,因此不可能对这个特定字段进行SQL注入

其他错误:

  • '.$NewPassword.'
    仅相当于
    $NewPassword
  • 为什么?

    ?>
    <?php
    
    ?>
    
    那么你真正的问题是什么?什么不起作用?这里没有一个代码打印出“无效密码”,因此您首先要找到它。不要“猜测”,调试。然后您就知道您与数据库的连接是否有问题了?如果你不喜欢免费的帮助,就去付钱吧。我同意@Dagon。调试。尝试
    var\u dump($myU->Password)
    。如果它产生了一个散列,那么您的数据库就没有问题。也许你真的输入了错误的密码。你确实忘记了密码,对吗?尝试手动重置密码哈希并再次检查。我不知道你怎么能花两周的时间调试20行左右的代码。