在Android中更改密码

时间:2017-08-09 15:27:29

标签: php

我在尝试更改应用程序中的密码时遇到问题。它一直显示当前密码无效。我的PHP编码可能有问题。但我无法找到问题所在。这是我的PHP代码。

<?php

require ("config1.php");

if (!empty($_POST)) {

    $lecID = $_GET['lecID'];
    $query = "UPDATE lecturer SET lecPass= :lec_Pass WHERE lecID = '$lecID' ";
    $query_params = array(':lec_Pass'=> $_POST['lecPass']);

    try {
        $stmt = $db->prepare($query);
        $result = $stmt->execute($query_params);
    }
    catch (PDOException $ex) {
        $response["success"] = 0;
        $response["message"] = "Database Error1. Please try again";
        die(json_encode($response));
    }

    $validate_info = false;
    // Fetching rows from query
    $row = $stmt->fetch();

    if ($row) {
        if ($_POST['lecPass'] === $row['lecPass']) {
            $changePass_ok = true;
        }
    }
    if ($changePass_ok) {
        // UserLogin
        $response['success'] = 1;
        $response['message'] = "Password changed successfully";
        die(json_encode($response));
    }
    else {
        $response["success"] = 0;
        $response["message"] = "Failure";
        die(json_encode($response));
    }
}

?>

感谢有人可以指导我。感谢。

1 个答案:

答案 0 :(得分:1)

$row = $stmt->fetch(); 
if ($row){ 
  if($_POST['lecPass'] === $row['lecPass']){ 
    $changePass_ok=true; 
  }
} 

这不会起作用。在UPDATE语句上执行fetch()永远不会返回任何内容,因为UPDATE语句不会返回行。没有什么可比较的。

您有两种选择:

1)只需检查UPDATE语句是否成功。这应该足以证明密码已成功更新,而无需再次选择该行。

2)更长的方式,更类似于您现在尝试的是,在UPDATE之后,您运行单独的SELECT语句以再次从数据库中获取相同的行,并将返回的值与$进行比较_POST值。

N.B。正如其他人在评论中指出的那样,以纯文本形式存储密码并通过未加密的HTTP传输密码是非常不安全的,并且要求麻烦。您应该切换到HTTPS并使用单向哈希将密码存储在数据库中,这样任何有权访问数据库的人都无法立即窃取密码。然后,当用户登录时,您使用相同的算法对它们提供的密码值进行哈希处理,并将 与DB中的值进行比较,以验证登录。