未定义的数组键页登录时键入,即使它已添加到页面中



我正在尝试登录,然后根据用户类型重定向到自定义页面。我的问题是,当我按下登录按钮,在控制台上,我得到我有一个未定义的数组键pageType我不明白为什么…例如,在教师页面,我设置$_SESSION['pageType'] = 'teacher';这是我的login.html页面:

<img class="wave" src="img/wave.png">
<div class="container_main" onsubmit="redirect();">
<div class="img">
<img src="img/bg.svg">
</div>
<div class="login-content">
<form onsubmit="redirect();"> 

<img src="img/avatar.svg">
<h2 class="title">Quiz Website</h2>
<div class="input-div one">
<div class="i">
<i class="fas fa-user"></i>
</div>
<div class="div">
<input type="text" class="input" id="enterID" placeholder="Username">
</div>
</div>
<div class="input-div pass">
<div class="i"> 
<i class="fas fa-lock"></i>
</div>
<div class="div form-group">
<input id="password" type="password" class="form-control" placeholder="Password" value="" required/>
</div>
</div>
<a href="page/registration.php">Don't have an account?</a>
<div class="form-group">
<a href="page/forget-password.php" class="ForgetPwd">Trouble logging in?</a>
</div>
<input type="submit" class="btn" value="Login" onclick="login();" readonly >
<div class="error-message" id="errorMessage"></div>
</form>
</div>
</div>
</html>
这是checklogin.js:
function login() {
var enterID = document.getElementById("enterID").value;
var password = document.getElementById("password").value;
if ((password != "") && (enterID != "")) {
var info = "?enterID=" + enterID + "&password=" + password;
$.ajax
({
type: "GET",
async: true,
url: "php/login.php" + info,
success: function (respond) {
if (respond == "admin") {
window.location.href = "page/admin-system-management.php";
} else if (respond == "student") {
window.location.href = "page/student-dashboard.php";
} else if (respond == "teacher") {
window.location.href = "page/teacher-dashboard.php";
} else {
document.getElementById("errorMessage").innerText = respond;
}

}
});
}
else {
document.getElementById("errorMessage").innerText = "Please fill in all the fields.";
}
}
function redirect() {
$.ajax
({
type: "GET",
async: true,
url: "php/redirect.php",
success: function (respond) {
if (respond != "not logged.") {
if (respond == "admin") {
window.location.href = "page/admin-system-management.php";
} else if (respond == "student") {
window.location.href = "page/student-dashboard.php";
} else if (respond == "teacher") {
window.location.href = "page/teacher-dashboard.php";
}
}
console.log(respond)
}
});
} 

这是我的redirect。php文件

<?php
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
if (isset($_SESSION["type"])){
if ($_SESSION["type"] != $_SESSION["pageType"]){
$alert_message = "You cannot access this page using your account!";
$link = "../login.html";
echo "<script type='text/javascript'>alert('$alert_message'); window.setTimeout(function(){ if ('".$_SESSION["type"]."'=='admin'){ window.location.href = '../page/admin-system-management.php';} else if ('".$_SESSION["type"]."'=='student'){ window.location.href = '../page/student-dashboard.php';} else if ('".$_SESSION["type"]."'=='teacher'){ window.location.href = '../page/teacher-dashboard.php';}  }, 0);</script>";
}
} else {
$alert_message = "Your login period has expired! Please login again!";
$link = "../login.html";
echo "<script type='text/javascript'>alert('$alert_message'); window.setTimeout(function(){ window.location.href = '$link'; }, 0);</script>";
}
?>

我怀疑的是,重定向()函数它甚至没有加载,所以这就是为什么我认为我得到这个错误…有时我看到,,XHR加载失败:GET"我修改了一个代码,以便有另一个login.html页面,这是我的旧login.html代码:

<body class="jumbotron vertical-center" onload="redirect();">
<div class="container login-container">
<div class="row">
<div class="col-md-4 login-form mx-auto">
<h3>Login</h3>
<h6>Don't have an account?<a href="page/registration.php" class=""> Register</a></h6>
<form>
<div class="error-message" id="errorMessage"></div>
<div class="form-group">
<input id="enterID" type="text" class="form-control" placeholder="Your User ID *" value="" required/>
</div>
<div class="form-group">
<input id="password" type="password" class="form-control" placeholder="Your Password *" value="" required/>
</div>
<div class="form-group">
<input class="btn btn-block btn-primary" value="Login" onclick="login();" readonly />
</div>
<div class="form-group">
<a href="page/forget-password.php" class="ForgetPwd">Trouble logging in?</a>
</div>
</form>
</div>
</div>
</div>
</body>
  1. 在redirect()函数的开头添加这一行。这将停止表单的默认动作重定向/刷新页面

    event.preventDefault();

那么你的重定向函数/响应变量应该工作

  1. 如果你从php返回这个,它将被javascript忽略

    echo "<script type='text/javascript'>code here</script>";

  2. 为了使你的redirect.php更容易调试输出数据作为json编码的数组而不是字符串,这样你可以查看/测试更多的数据。在redirect.php中,试着在session_start()行之后直接添加这段代码,作为第一个测试

$data = [
'session' => $_SESSION,
'response' => 'place your response here',
];
echo json_encode($data);
exit;

好的,这是我认为你需要的更新。

redirect.php

<?php
if(!session_id()) {
session_start();
}
// you can change this line to this once you have debugged your code - $data = [];
$data = ['session' => $_SESSION];
// place code here to get the user type from the database
// then use $_SESSION['type'] = '{database response}';
if(!isset($_SESSION['type']))
{
$_SESSION['type'] = null;
}
switch($_SESSION['type']) {
case 'admin':
header('Location: /page/admin-system-management.php'); // this is the php way to redirect
break;
case 'student':
header('Location: /page/student-dashboard.php');
break;
case 'teacher':
header('Location: /page/teacher-dashboard.php');
break;
default:
$data['alert_message'] = 'Your login period has expired! Please login again!';

}
echo json_encode($data);
exit;
?>

Javascript重定向函数

function redirect() {
$.ajax
({
type: "GET",
async: true,
url: "php/redirect.php",
success: function (response) {
console.log(response);
if(response.alert_message) {
alert(response.alert_message);
}
}
});
}

最新更新