我正在尝试为我的作业创建注册和登录系统。我做了与该部分相同的注册,但是我无法登录,它总是会引发错误事件(出了点问题!),状态为200
,状态文本为OK.
我尝试更改dataType为TEXT,echo json_encode("x")
至echo "x"
,并据此编辑了成功/错误方法,但没有任何变化。
Ajax请求:
$.ajax({
type : 'POST',
url : 'functions/loginHandler.php',
dataType : 'JSON',
data : {
email : email,
password : password
},
success : function(data) {
switch(data) {
case "emailNotExists" :
notifier.alert("Email not found");
break;
case "loginFailed" :
notifier.alert('Invalid login credentials');
break;
case "loginSuccessful" :
notifier.success('Login Successful');
setTimeout(function () {
window.location.href = "index.php";
},2000);
break;
}
},
error : function(data) {
notifier.alert('Something went wrong!');
console.log(data);
}
});
loginHandler.php
if (isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])){
$username = $_POST['username'];
$password = $_POST['password'];
$login = new Library();
$login->login($username, $password);
}
Login Method :
public function login($username, $password) {
try {
$db = DB();
$query = $db->prepare("SELECT userID FROM users WHERE username = :username");
$query->bindParam("username", $username);
$query->execute();
if($query->rowCount() == 0) {
echo json_encode("usernameNotExists");
} else {
$querySecond = $db->prepare("SELECT userID FROM users WHERE (username = :username AND password = :password)");
$querySecond->bindParam("username", $username);
$encPassword = hash("sha256", $password);
$querySecond->bindParam("password", $encPassword);
$querySecond->execute();
if ($querySecond->rowCount() > 0) {
$result = $querySecond->fetch(PDO::FETCH_OBJ);
$_SESSION["userID"] = $result->userID;
echo json_encode("loginSuccessful");
} else {
echo json_encode("loginFailed");
}
}
} catch (PDOException $e) {
exit($e->getMessage());
}
}
编辑:我意识到我在发送电子邮件时出错,但是检查用户名非常感谢您的帮助。我花了将近2个小时来解决这个错误。 :)
答案 0 :(得分:-1)
200 表示您的AJAX请求已发送,并且服务器未发生任何错误。那就不是AJAX问题。
您的AJAX响应中没有任何内容,因为您的php进程未返回任何内容。
这应该可行...
if (isset($_POST['username']) && !empty($_POST['username']) && isset($_POST['password']) && !empty($_POST['password'])) {
$username = $_POST['username'];
$password = $_POST['password'];
$login = new Library();
echo $login->login($username, $password);
}
登录方法:
public function login($username, $password) {
try {
$db = DB();
$query = $db->prepare("SELECT userID FROM users WHERE username = :username");
$query->bindParam("username", $username);
$query->execute();
if($query->rowCount() == 0) {
return json_encode("usernameNotExists");
} else {
$querySecond = $db->prepare("SELECT userID FROM users WHERE (username = :username AND password = :password)");
$querySecond->bindParam("username", $username);
$encPassword = hash("sha256", $password);
$querySecond->bindParam("password", $encPassword);
$querySecond->execute();
if ($querySecond->rowCount() > 0) {
$result = $querySecond->fetch(PDO::FETCH_OBJ);
$_SESSION["userID"] = $result->userID;
return json_encode("loginSuccessful");
} else {
return json_encode("loginFailed");
}
}
} catch (PDOException $e) {
exit($e->getMessage());
}
}
请注意,$login->login($username, $password);
是一种方法,应该返回不使用echo
的内容。
然后,将所有echo
替换为return
,并使用echo $login->login($username, $password);
来显示发送响应