Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP更改密码(旧密码与数据库中的旧密码不匹配)_Php_Mysql_Session_Passwords - Fatal编程技术网

PHP更改密码(旧密码与数据库中的旧密码不匹配)

PHP更改密码(旧密码与数据库中的旧密码不匹配),php,mysql,session,passwords,Php,Mysql,Session,Passwords,这是我的密码 <?php include("connect.php"); error_reporting(0); session_start(); if($_SESSION['logged'] == true){ if($_SESSION['user_type'] == 2){ header("location:admin\home.php"); } $user_id = $_SESSION['user_id']

这是我的密码

<?php
  include("connect.php");
  error_reporting(0);
  session_start();

  if($_SESSION['logged'] == true){

      if($_SESSION['user_type'] == 2){
          header("location:admin\home.php");
      }

      $user_id = $_SESSION['user_id'];
      $query = "SELECT * FROM tbl_useraccounts where user_id = $id";

      $q = mysqli_query($con,$query);

      while($row = mysqli_fetch_array($q)){
          $oldpassworddb = $row['password'];
      }

    if($user_id)
    {
        //user is logged in

        if(isset($_POST['submit']))
        {
          //check fields

          $oldpassword = md5($_POST['oldpassword']);
          $newpassword = md5($_POST['newpassword']);
          $repeatnewpassword = md5($_POST['repeatnewpassword']);


          //check passwords
          if ($oldpassword == $oldpassworddb)
          {
             // check two new passwords
             if ($newpassword == $repeatnewpassword)
             {
                //success
                //change password in db
                $querychange = mysqli_query("
                UPDATE tbl_useraccounts SET password='$newpassword' WHERE user_id='$user_id'");

                session_destroy();
                echo "Your password has been changed<br/>
                <a href='home.php'>Return</a>";

             }
             else
                 echo "New passwords doesnt match";


         }
         else
             echo "Old password doesnt match!";



    }
    else
    {

    echo"
    <form action='changepassword.php' method='POST'>
        Old Password: <input type='password' name='oldpassword'><p>
        New Password: <input type='password' name='newpassword'><br>
        Repeat New Password: <input type='password' name='repeatnewpassword'><p>
        <input type='submit' name='submit' value='Change Password'>
    </form>
    ";

      }
  }
  else 
      die("You must be logged in to change your password");

  }else{

      header("location:login.php");
  }
?>      

您可能选择了错误的用户:

$user_id = $_SESSION['user_id']; // here you pick in $user_id
$query = "SELECT * FROM tbl_useraccounts where user_id = $id"; // here you check with $id
所以换成

$query = "SELECT * FROM tbl_useraccounts where user_id = $user_id";
另外,
print\r($variable)
对您也有帮助。

更改以下内容:

$user_id = $_SESSION['user_id'];
$query = "SELECT * FROM tbl_useraccounts where user_id = $id";


您已将用户id存储在$user\u id变量中,但使用了未定义的$id变量。

您在where语句中使用了$id而不是$user\u id

$user_id = $_SESSION['user_id'];

$query = "SELECT * FROM tbl_useraccounts where user_id = $id";

$q = mysqli_query($con,$query);
while($row = mysqli_fetch_array($q)){
    $oldpassworddb = $row['password'];
}
您可以像这样转储数据库中的值:

$user_id = $_SESSION['user_id'];
$query = "SELECT * FROM tbl_useraccounts where user_id = $id";

$q = mysqli_query($con,$query);
        while($row = mysqli_fetch_array($q)){
            $oldpassworddb = $row['password'];
            var_dump($oldpassworddb);
        }
检查数据库中有多少用户。转储旧密码并将其与您提供的密码进行比较。如果不匹配,请更改数据库中的密码,结果为:

var_dump(md5('123'));

然后再次运行代码。此时,我们无法确定数据库中的内容;)

您不想使用不安全的
md5hash
算法来存储密码!查看数据库并告诉我它存储了什么密码?除了@arkascha所说的之外,md5哈希可以在几秒钟内被破解。我建议您使用的是散列密码。如果您使用md5(“某物”)
并将其与md5(“某物”)进行比较,则代码不会说谎,您总是会发现它们是相同的。如果不这样做,那么您正在做一个包含两种不同内容的
md5
。你应该问自己的问题是为什么它们不同。我一直在问自己的问题是,当有数百种解决方案都能很好地工作时,为什么人们总是坚持开发自己的登录/用户管理系统。也可以使用参数化查询,因为您当前的方法非常容易进行SQL注入。例如,您可以告诉我们我更改了它,但仍然=>旧密码不匹配。我的代码中是否存在键入错误?或者数据库连接在
$user\u id=$\u会话['user\u id']之后编写以下代码
echo';打印(用户id);回声'&告诉我结果,结果是2。我很抱歉反应太晚。希望在这里看到您的下一个答复。请检查数据库。用户id为2的用户是否存在?密码是否加密。此外,您还可以使用前面的
print\r
技术检查该行的输出。若你们在特定的行中发现缺少输出,你们可以更具体地说明你们的错误在哪里。我现在更改了它,但密码仍然并没有match@JpTamayo你能告诉我们你的数据库里有什么吗?已更改但仍然不工作。现在是我的数据库出了问题吗?
var_dump(md5('123'));