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">&times;</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还是一种新鲜的东西,所以对于我可能做错什么的深入了解会非常棒。

+0

因为;该会话仅在会话开始后设置 –

+1

您的意思是,我没有为显示错误消息的页面调用session_start()。如果这就是你的想法,我确实打电话会话开始,但它在页面顶部的单独的PHP块,如果这有所作为。 – Frank

那么,你的意思是:

  1. 有人去包含您的第二个PHP模块文件。
  2. db中已经有一个匹配的行。
  3. 您的脚本会在会话中设置错误消息并重定向到登录页面。
  4. 登录页面应该显示错误,但不会刷新页面。

是吗?

+0

是的,代码中的ajax请求(未显示)将信息传递给名为changeRoomName.php的文件,该文件是您看到的第二个php块。当它发送到数据库时,它会看到注册人的姓名是否已经存在,如果是,则会设置$ _SESSION ['signUpError']消息并将其重定向回他们尝试注册的页面。并且该错误消息显示在顶部块上的代码dentist_home.php中 – Frank

+0

可能是万物。这里有一个线程有很多可能:https://stackoverflow.com/questions/17242346/php-session-lost-after-redirect – Phl3tch