Ajax提供了与php服务器端不同的结果

Ajax提供了与php服务器端不同的结果,php,jquery,ajax,Php,Jquery,Ajax,好的,我有以下php代码: $_you = $_GET['you']; $_answer = $_GET['answer']; $_pass = md5($_GET['pass']); $sql = "select password from users where username='$_you'"; $query = mysqli_query($db_conx, $sql); while ($row = mysqli_fetch_array($query)) { $_oldpass

好的,我有以下php代码:

$_you = $_GET['you'];
$_answer = $_GET['answer'];
$_pass = md5($_GET['pass']);
$sql = "select password from users where username='$_you'";
$query = mysqli_query($db_conx, $sql);
while ($row = mysqli_fetch_array($query)) {
    $_oldpass = $row['password'];
}
if ($_pass !== $_oldpass) {
    $_passresult = "not ok";
} else {
    $_passresult = "ok";
}
$sql2 = "select answer from useroptions where username='$_you'";
$query2 = mysqli_query($db_conx, $sql2);
while ($row2 = mysqli_fetch_array($query2)) {
    $_veranswer = $row2['answer'];
}
if ($_answer !== $_veranswer) {
    $_answerresult = "not ok";
} else {
    $_answerresult = "ok";
}
$_result = array("Password" =>$_passresult, "Answer" =>$_answerresult);
header("Content-Type: application/json");
echo json_encode($_result);

?>
下面是调用上述php的jquery片段:

$.get("verifydp.php?u="+you+"&pass="+pass+"&answer="+answer, function(result) {
    if (result.Password === "not ok" ) {
        $('#requiredp').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> Password is not correct');
        $('#cpassword').css("border", "solid 1px #f60");
        $('#cpassword').focus();
        $('#cpassword').val('');
        return false;
    } else {
        $('#requiredp').html('');
        $('#cpassword').css("border", "solid 1px #ccc");
    }
    if ( result.Answer === "not ok" ) {
        $('#requireda').html('<i class="fa fa-exclamation-triangle" aria-hidden="true"></i> This is not the correct answer.');
        $('#answer').css("border", "solid 1px #f60");
        $('#answer').focus();
        $('#answer').val('');
        return false;
    } else {
        $('#requireda').html('');
        $('#answer').css("border", "solid 1px #ccc");
    }   
});
$.get(“verifydp.php?u=“+you+”&pass=“+pass+”&answer=“+answer,函数(结果){
如果(result.Password==“不正常”){
$('#requiredp').html('密码不正确');
$('cpassword').css(“边框”,“实心1px#f60”);
$('cpassword').focus();
$('cpassword').val('');
返回false;
}否则{
$('#requiredp').html('');
$('cpassword').css(“边框”,“实心1px#ccc”);
}
if(result.Answer==“不正常”){
$(“#requireda”).html(“‘这不是正确的答案’);
$(“#答案”).css(“边框”,“实心1px#f60”);
$('答案').focus();
$('答案').val('');
返回false;
}否则{
$('#requireda').html('');
$(“#答案”).css(“边框”、“实心1px#ccc”);
}   
});
你可能已经猜到了,这是我做的一个小小的密码验证,它还没有完成,所以不要说它还不是100%安全的。我只是想在以下两段代码之间的交互中遇到的显著问题上寻求您的帮助:

它正在验证正确或不正确的密码和答案,但是,当我输入正确的密码时,它会回击我说密码不正确。有趣的是,当我使用相同的数据运行php部分时,它告诉我密码是正确的。 因此,php向Ajax提供了一个“OK”,而Ajax以某种方式将其转换为“NotOK”,这会在脚本的其余操作中造成相应的混乱。有人知道为什么会这样吗?非常感谢您的任何帮助,因为这会让我头疼:-/ 如果你需要更多的信息,请告诉我


万分感谢

我只是想忽略这有多不安全,就因为你这么说

所以,继续。Ajax不会以任何方式操作数据。Ajax只是网页异步访问Web服务器并获取某些数据的一种“方式”


这不起作用且密码总是“不正常”的原因是,您的PHP希望用户名位于GET parameteryou中,但您将其发送到GET parameteru

我将忽略这是多么不安全,因为您说过

所以,继续。Ajax不会以任何方式操作数据。Ajax只是网页异步访问Web服务器并获取某些数据的一种“方式”


这不起作用且密码总是“不正常”的原因是,您的PHP希望用户名位于GET parameteryou,但您将用户名发送到GET parameteru,谢谢您的评论-但是,即使答案部分有错误,它仍然会处理密码部分,然后在得到答案时停止?甚至完全停止?编辑:php确实给出了正确的答案-例如:如果我直接运行它,它会显示{Password:ok,Answer:ok},但是我发出了Ajax响应警报,警报在Password下显示“notok”。说。即使是这样也不安全!您真的不应该使用PHP来处理密码安全性。在散列之前,请确保您在它们上安装或使用任何其他清理机制。这样做会更改密码,并导致不必要的额外编码。我讨厌人们说“我没走那么远…”或“这个网站不会公开…”或“它只供学校使用,所以安全性不重要…”。如果老师和教授从一开始就不谈论安全问题,那他们就是做错了。挑战他们。他们正在教授草率而危险的编码实践,学生们以后将不得不放弃这些实践。我也讨厌人们说“我以后再添加安全性…”或“安全性现在不重要…”。如果你第一次没有时间做对,你什么时候才能找到时间添加它?谢谢你的评论-但是,即使答案部分有问题,它仍然会处理密码部分,然后在找到答案时停止?甚至完全停止?编辑:php确实给出了正确的答案-例如:如果我直接运行它,它会显示{Password:ok,Answer:ok},但是我发出了Ajax响应警报,警报在Password下显示“notok”。说。即使是这样也不安全!您真的不应该使用PHP来处理密码安全性。在散列之前,请确保您在它们上安装或使用任何其他清理机制。这样做会更改密码,并导致不必要的额外编码。我讨厌人们说“我没走那么远…”或“这个网站不会公开…”或“它只供学校使用,所以安全性不重要…”。如果老师和教授从一开始就不谈论安全问题,那他们就是做错了。挑战他们。他们正在教授草率而危险的编码实践,学生们以后将不得不放弃这些实践。我也讨厌人们说“我以后再添加安全性…”或“安全性现在不重要…”。如果你第一次没有时间做正确的事情,你什么时候会有时间再加上它?你一定是在开玩笑-我一定完全忽略了这一点,我有多愚蠢-只是为了表明杀人的是小东西,而不是大东西:)不管怎样,至于安全-当然这一切都会被消毒,但由于这还没有结束,我只想把它从等式中排除。万分感谢!你一定是在跟我开玩笑-我一定完全忽略了这一点,我有多么愚蠢-只是为了证明杀死的是小东西,而不是大东西:)无论如何,至于安全性-当然这一切都会被消毒,但由于这还没有结束,我只想把它从等式中排除。万分感谢!