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