我已经找到了使用Javascript解决此问题的方法,但想知道为什么会这样,并想出使用PHP的可能解决方案。
在我的注册页面(register.php)上,我在提交按钮上使用了jQuery的preventDefault()
,但是如果在成功注册后调用header("Location: /index.php");
,则我的索引页面将被加载到我的注册页面之上。我的浏览器中的URL仍然显示register.php。
使用Java脚本重定向可以解决问题,但是为什么PHP会发生这种情况?我的注册脚本的所有其他功能都可以正常使用,包括在发生错误时我使用header()
将用户重定向到我的主页的其他位置(即,当用户尝试直接导航到... / _ registerAccount.php时);
jQuery:
/// <reference path="jquery-3.3.1.min.js" />
$(document).ready(function() {
$("form").submit(function(event) {
event.preventDefault();
var username = $("#register-username").val();
var email = $("#register-email").val();
var password = $("#register-password").val();
var confirmPassword = $("#register-confirm-password").val();
var submit = $("#register-submit").val();
$(".form-message").load("../shared/_registerAccount.php", {
username: username,
email: email,
password: password,
confirmPassword: confirmPassword,
submit: submit
});
});
});
PHP:
else
{
$errorEmpty = $errorUsername = $errorEmail = $errorPassword = $errorConfirmPassword = false;
$hashedPassword = password_hash($password, PASSWORD_DEFAULT);
mysqli_stmt_bind_param($statement, "sss", $username, $email, $hashedPassword);
mysqli_stmt_execute($statement);
session_start();
$_SESSION['register-success'] = 'You have successfully registered! Please verify your email before logging in.';
$registrationSuccessful = true;
//My Javascript workaround
//exit('<script type="text/javascript">location.assign("../index.php")</script><a href="../index.php">Home</a>');
header('Location: ../index.php');
exit();
}