带有错误消息的PHP页面重定向仅在页面刷新后显示

时间:2017-04-16 22:24:45

标签: php html sql mysqli

所以我对其他页面使用相同的方法,它工作得很好。 例如,我在登录页面上使用它,在用户填写登录表单后,它调用一个php文件来查询数据库。如果查询失败,它会设置一个带有错误的会话变量,并将您重定向回登录页面。在登录页面上我有什么要检查是否设置了会话变量,如果是,则显示错误消息。

我重复使用同样的方式显示错误消息,对于尝试注册的用户,如果他们已经在此页面上注册,那么查询数据库的我的php文件应该重定向他们有错误。现在,这个方法就像我的登录页面一样。但是,它仅在页面刷新后显示,这是不理想的。

这是包含html供用户注册的php文件,如果设置了错误消息,则会显示错误消息:

<?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的新手,所以任何洞察我可能做错的事情都会很棒。

1 个答案:

答案 0 :(得分:0)

所以,你所说的是:

  1. 有人转到包含第二个PHP块的文件。
  2. 数据库中已有匹配的行。
  3. 您的脚本会在会话中设置错误消息并重定向到登录页面。
  4. 登录页面应该显示错误,但直到刷新页面才会显示。
  5. 是吗?