我为用户创建了一个表单来更改编程的密码 -
include("../database.php");
if(isset($_SESSION['user_name']))
{
$password=$_POST['new_password'];
$query="select password from login where username = '".$_SESSION['user_name']."' and password='".md5($password)."'";
echo $query."<br>\n";
$result=mysql_query($query) or die(mysql_error());
echo $result."<br>\n";
echo "abc<br>\n";
echo mysql_num_rows($result)."<br>\n";
if(mysql_num_rows($result))
{
echo "def";
$row=mysql_fetch_row($result);
$pass=$row['password'];
echo $pass;
if($pass==$password)
{
$query2="UPDATE login SET password='$password' WHERE username='$_SESSION[user_name]'";
echo $query2;
echo "Password changed successfully";
}
else
{
echo "You entered wrong current password";
}
}
else
{
echo "here";
}
}
else
{
header('Location:index.php');
}
它给$ result = 0。所以它不会更新用户密码。它直接进入else部分,并按照书面形式给出输出“here”。解决方案是什么。
答案 0 :(得分:1)
您正在使用一个变量 - 密码 - 用于两件事:旧密码(在db中使用用户ID保存为MD5哈希)和新密码(将从用户传递到您的例程中)。
使它们成为两个不同的变量。第一个查询应该从db中的密码的MD5设置“old_password”。您可以使用它来确认用户知道旧密码。
如果一切都结束,则将新密码保存在数据库中。
答案 1 :(得分:0)
您正在使用new_password而不是密码字段来查找现有用户。
我想它应该是这样的(假设您的用户也在字段'password'中提供旧密码):
$password=$_POST['password'];
$query="select password from login where username = '".$_SESSION['user_name']."' and password='".md5($password)."'";
如果不是这种情况,那么您至少应该为旧密码添加一个字段,并使用该字段在数据库中查找用户。
答案 2 :(得分:0)
您正在尝试通过新密码的哈希来获取用户
$password=$_POST['new_password'];
$query="select password from login where username = '".$_SESSION['user_name']."' and password='".md5($password)."'"
如果您的表单包含old_password输入,则应指定为:
$password=md5($_POST['old_password']);
$query="select password from login where username = '".$_SESSION['user_name']."' and password='".$password."'";
并将更新查询更改为:
$newPassword=md5($_POST['new_password']);
$query2="UPDATE login SET password='$newPassword' WHERE username='$_SESSION[user_name]'";