更改密码问题


Changing password issues

无法解决问题。问题以**开始,以**结束,问题行就在其后。请帮助我修复代码,似乎问题太多了。非常抱歉。

   <?php
    include 'core/login.php'; 
    include 'core/init.php';    
    include 'includes/head.php';    
    if(count($_POST)>0) {
    $result = mysqli_query("SELECT *from users WHERE id='" . $_SESSION["id"] . "'");
    $row=mysqli_fetch_array($result);
    if($_POST["currentPassword"] == $row["password"]) 
    {
          mysqli_query("UPDATE users set password='" . $_POST["newPassword"] . "' WHERE id='" . $_SESSION["id"] . "'");
          $message = "Password Changed";
    } 
    else 
          $message = "Current Password is not correct";
    }

?>

我得到的错误是:

expects 2 parameters, 1 given / 1 parameter to be mysqli result, null given
undefined variable result
undefined currentpassword
undefined new password / expects 2 parameters, 1 given

让我们从读取错误消息开始:

期望2个参数,1个给定/1个参数为mysqli结果,空给定

因此函数需要2个参数。你给它提供。。。

mysqli_query("SELECT *from users WHERE id='" . $_SESSION["id"] . "'")

一个参数。mysqli_query()也需要被赋予连接对象:

mysqli_query($connection, "SELECT *from users WHERE id='" . $_SESSION["id"] . "'")

(或您的连接对象的名称)

未定义变量结果

创建$result的操作失败,因此任何使用$result的操作也将失败。

未定义的当前密码

这表明POST数据不包含您要查找的值。在尝试使用某个值之前,可以使用isset()来确定该值是否存在。

未定义的新密码/需要2个参数,给定 1个

与上述问题相同。

此外,还有两个问题你没有注意到。。。

"UPDATE users set password='" . $_POST["newPassword"] . "' WHERE id='" . $_SESSION["id"] . "'"
  1. 您的代码对SQL注入攻击非常开放
  2. 您正在以纯文本形式存储用户密码

这两个都是极其糟糕的事情,应该立即修复。

mysqli_query函数期望第一个参数是mysqli链接标识符。在代码中,第一个参数是SQL语句(即字符串)。

函数mysqli_connect()返回链接标识符,您可能在init.php脚本中使用了该函数。

示例:

$link = mysqli_connect("localhost", "root", "", "info");
$result = mysqli_query($link, $sql);

您的mysqli_query不正确,它需要第二个参数,即连接字符串。试试这样的东西:

$con = mysqli_connect("HOST","USERNAME","PASSWORD","DATABASE");
mysqli_query($con, "SELECT *from users WHERE id='" . $_SESSION["id"] . "'")

用此代码修复了它。。。现在唯一的问题是它并没有改变。至少错误已经消失了,现在就这么玩吧。

<?php
    include 'core/login.php'; 
    include 'core/init.php';    
    include 'includes/head.php';    
    if(count($_POST)>0) {
    $result = mysqli_query($link, "SELECT *from users WHERE id='" . $_SESSION["id"] . "'");
    $row=mysqli_fetch_array($result);
    if($_POST["currentpassword"] == $row["password"]) {
    mysqli_query("UPDATE users set password='" . $_POST["newpassword"] . "' WHERE id='" . $_SESSION["id"] . "'");
    $message = "Password Changed";
    } else $message = "Current Password is not correct";
    }
?>