Php 检查密码是否正确jquery
我对登录表单有问题。当我尝试登录时,javascript总是返回假值,即使我输入了正确的用户名和密码 以下是我在jQuery文件中的代码:Php 检查密码是否正确jquery,php,jquery,forms,login,passwords,Php,Jquery,Forms,Login,Passwords,我对登录表单有问题。当我尝试登录时,javascript总是返回假值,即使我输入了正确的用户名和密码 以下是我在jQuery文件中的代码: $(document).ready(function(){ var teamname = $("#teamname"); var teampassword = $("#teampassword"); function isPasswordCorrect() { var password = teampassword.val(); var
$(document).ready(function(){
var teamname = $("#teamname");
var teampassword = $("#teampassword");
function isPasswordCorrect()
{
var password = teampassword.val();
var name = teamname.val();
var result = false;
$.post('../php/validations/validatePassword.php', {tname: name, tpassword: password}, function(data){
if(data == 1){
result = true;
}else{
result = false;
}
});
return result;
}
$("#join").click(function(){
if(isPasswordCorrect()){
alert("You have joined");
}else{
alert("You have not joined");
}
});
});
这是我在PHPfile中的代码:
<?php
$teamname = $_POST['tname'];
$teampassword = $_POST['tpassword'];
if($teamname != "" || $teampassword !=""){
include('../connection.php'); // Here is the log in to the phpmyadmin
$queryCheckPassword = mysqli_query($con, "SELECT password FROM
teams WHERE name = '$teamname'");
$row = mysqli_fetch_row($queryCheckPassword);
$teamPassword = $row[0];
if($teamPassword == $teampassword)
{
echo 1;
}else{
echo 0;
}
}
?>
问题在于Javascript的使用。看看你的isPasswordCorrect
函数(我稍微重新格式化了一下,使问题更清楚一些):
看到那里的函数(数据){}
了吗?这是回拨。$.post
方法的工作方式如下:
JS代码使用$向服务器发送请求。post
您的JS代码将继续,继续下一步的工作
一段时间后(可能是10毫秒后,也可能是30秒后),服务器响应请求此时您的回调被调用
这是什么意思?当您的代码点击返回结果时代码>行,您的代码刚刚向服务器提交了请求,服务器可能还没有响应。因此,result
仍然是false
此问题的快速解决方案是将警报
语句移动到回调中,如下所示:
function isPasswordCorrect()
{
var password = teampassword.val();
var name = teamname.val();
$.post(
'../php/validations/validatePassword.php',
{tname: name, tpassword: password},
function (data) {
if(data == 1){
alert("You have joined");
}else{
alert("You have not joined");
}
}
);
}
$("#join").click(function(){ isPasswordCorrect(); });
然而,我想你会想做的不仅仅是alert
什么。您需要研究Javascript的异步性质并理解它,然后才能扩展此片段以完成更多工作。因为AJAX不会立即返回结果-异步-您只想在AJAX回调中检查,并且只有在得到结果时才这样做:
function isPasswordCorrect()
{
var password = teampassword.val();
var name = teamname.val();
$.post(
'../php/validations/validatePassword.php',
{ tname: name, tpassword: password },
function(data) {
if(data == 1) {
alert("You have joined");
} else {
alert("You have not joined");
}
}
);
}
$("#join").click(isPasswordCorrect);
PeterKA关于异步的看法是正确的。默认值(false)可能在异步调用返回之前返回。请尝试添加回调(未测试):
AJAX是异步的,结果
变量操作并没有那么精确。请在AJAX回调中进行检查。我希望这些代码不会出现在互联网上。如果是这样,您应该添加一些代码来防止SQL注入。您确实应该使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u hash()
。下面是一个学习语句的示例。感谢您与我分享这些有用的信息。我要检查一下。当然,我不会在没有SQL注入保护的情况下将这些代码放到Internet上。再次感谢你!
function isPasswordCorrect()
{
var password = teampassword.val();
var name = teamname.val();
$.post(
'../php/validations/validatePassword.php',
{tname: name, tpassword: password},
function (data) {
if(data == 1){
alert("You have joined");
}else{
alert("You have not joined");
}
}
);
}
$("#join").click(function(){ isPasswordCorrect(); });
function isPasswordCorrect()
{
var password = teampassword.val();
var name = teamname.val();
$.post(
'../php/validations/validatePassword.php',
{ tname: name, tpassword: password },
function(data) {
if(data == 1) {
alert("You have joined");
} else {
alert("You have not joined");
}
}
);
}
$("#join").click(isPasswordCorrect);
function isPasswordCorrect(callback)
{
var password = teampassword.val();
var name = teamname.val();
$.post('../php/validations/validatePassword.php', {tname: name, tpassword: password},
function(data) { callback(data == 1); });
}
$("#join").click(function(){
isPasswordCorrect(function(result) {
if (result)
alert("You have joined");
else
alert("You have not joined");
});
});