【发布时间】:2017-11-12 21:12:55
【问题描述】:
这是我的代码
<?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");
}
?>
抱歉,我是 StackOverflow 的新手。当我在密码栏中输入旧密码时,例如“123”,其中 123 实际上是存储在我的数据库中的密码。但是当我点击更改密码时总是响应是“旧密码不匹配”。 123 = 123 应该是正确的。
我的代码有什么错误?
【问题讨论】:
-
你确实不想使用不安全的
md5hash算法来存储密码! -
查看数据库并告诉我它存储了什么密码?
-
除了@arkascha 所说的,md5 哈希可以在几秒钟内被破解。我推荐使用password_hash 来散列您的密码。
-
代码不会说谎,如果您使用
md5("something")并将其与md5("something")进行比较,您总是会发现它们是相同的。如果你不这样做,那么你正在做两个不同的事情的md5。你应该问自己的问题是它们为什么不同。我一直问自己的问题是,当有数百种解决方案都可以正常工作时,为什么人们还要坚持制作自己的登录/用户管理系统。 -
也使用参数化查询,因为您当前的方法非常容易进行 SQL 注入。例如你可以给我们php.net/manual/en/mysqli.quickstart.prepared-statements.php
标签: php mysql session passwords