Php mysql查询未给出正确的输出
我已经为用户创建了一个表单来更改密码,编程如下-Php mysql查询未给出正确的输出,php,mysql,Php,Mysql,我已经为用户创建了一个表单来更改密码,编程如下- 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)."'";
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');
}
include(“../database.php”);
如果(isset($\u会话['user\u name']))
{
$password=$\u POST['new\u password'];
$query=“从用户名为“”的登录名中选择密码”。$\u会话['user\u name']”和密码为“”。.md5($password)。“”;
回显$query。“
\n”;
$result=mysql\u query($query)或die(mysql\u error());
回显$result。“
\n”;
回显“abc
\n”;
回显mysql\u num\u行($result)。“
\n”;
if(mysql_num_行($result))
{
回声“def”;
$row=mysql\u fetch\u row($result);
$pass=$row['password'];
回音$pass;
如果($pass==$password)
{
$query2=“更新登录设置密码='$password',其中用户名='$\会话[用户名]”;
echo$query2;
回显“密码更改成功”;
}
其他的
{
echo“您输入了错误的当前密码”;
}
}
其他的
{
呼应“这里”;
}
}
其他的
{
标题('Location:index.php');
}
它给出$result=0。所以它不会更新用户密码。它直接转到else部分,并以书面形式给出输出“here”。解决方案是什么。您使用的是新密码而不是密码字段来查找现有用户 我猜应该是这样的(假设您的用户在“password”字段中也提供了旧密码):
如果不是这样,那么您至少应该为旧密码添加一个字段,并使用该字段在数据库中查找用户。您正在使用一个变量-密码-用于两件事:旧密码(在数据库中以MD5散列形式保存,带有用户ID)和新密码,用户正在将其传递到例程中 让它们成为两个不同的变量。第一个查询应该从数据库中密码的MD5中设置“old_password”。您可以使用它来确认用户知道旧密码
如果一切正常,则将新密码保存在数据库中。您正试图通过新密码的哈希值获取用户
$password=$_POST['new_password'];
$query="select password from login where username = '".$_SESSION['user_name']."' and password='".md5($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]'";
很难确定,但您正在使用
$\u POST['new\u password']
进行选择,然后使用相同的值进行更新。当然,您应该使用SELECT的现有密码,因为此时不会更改其密码?您的查询是什么样子的?用户名和密码是否确实存在于数据库更改“$”会话[用户名]。“
$newPassword=md5($_POST['new_password']);
$query2="UPDATE login SET password='$newPassword' WHERE username='$_SESSION[user_name]'";