PHP页面重定向错误信息只在页面刷新后出现
问题描述:
所以我对其他页面使用相同的方法,它工作得很好。 例如,我在我的登录页面上使用这个,在用户填写登录表单后,它调用一个php文件来查询数据库。如果查询失败,它会设置一个会话变量并将其重定向到登录页面。在登录页面上,我需要检查是否设置了会话变量,如果是,则显示错误消息。PHP页面重定向错误信息只在页面刷新后出现
我重复使用同样的方式显示错误消息,对于试图注册的用户,如果他们已经注册在这个页面上,那么我的php文件查询数据库应该重定向错误。现在,这种方法正如我的登录页面一样工作。但是,它仅在页面刷新后才显示,这并不理想。
这里是PHP文件,适用于用户的HTML来注册,并显示出它是否设定错误消息:
<?php
if(isset($_SESSION['signUpError'])) {
$error = $_SESSION['signUpError'];
unset($_SESSION['signUpError']);
echo '<div class="alert alert-warning alert-dismissible"
role="alert" id="logError" style="width:600px; margin-left:auto; margin-right:auto;">
<span type="button" class="close" data-dismiss="alert" aria-
label="Close"><span aria-hidden="true">×</span></span>
<strong>' . $error . '</strong></div>';
}else{
$error = "";
}
?>
这得到被称为后,他们签了php文件:
<?php
session_start();
include("../includes/databaseHandler.inc.php");
$title = $_POST['title'];
$newTitle = $_POST['newTitle'];
$id = $_POST['id'];
$joinName= "%".$_POST['joinName']."%";
if($stmt = mysqli_prepare($conn, "SELECT title FROM rooms WHERE title LIKE ?")){
mysqli_stmt_bind_param($stmt, 's', $joinName);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
if($row = mysqli_fetch_assoc($result)){
$_SESSION['signUpError'] = "This Dentist/Hygienist is already assigned to a room!";
header('Refresh:5; url = ../dentist_home.php');
exit;
}
}
if($stmt = mysqli_prepare($conn, "UPDATE rooms SET title = ? WHERE title = ? AND id = ?")){
mysqli_stmt_bind_param($stmt, "sss", $newTitle, $title, $id);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
}
mysqli_close($conn);
?>
对于登录页面,我使用header("Location: file_name.php");
,但如果我在此页面上使用它,即使页面刷新,它也不会显示错误。我对PHP还是一种新鲜的东西,所以对于我可能做错什么的深入了解会非常棒。
答
那么,你的意思是:
- 有人去包含您的第二个PHP模块文件。
- db中已经有一个匹配的行。
- 您的脚本会在会话中设置错误消息并重定向到登录页面。
- 登录页面应该显示错误,但不会刷新页面。
是吗?
因为;该会话仅在会话开始后设置 –
您的意思是,我没有为显示错误消息的页面调用session_start()。如果这就是你的想法,我确实打电话会话开始,但它在页面顶部的单独的PHP块,如果这有所作为。 – Frank