PHP header()无法正确重定向

时间:2019-04-19 16:59:10

标签: php redirect header

header()不会重定向到我想要的页面。没有错误消息,并且标头功能在Xampp中可以正常工作,但在生产Web服务器中则不能。

我要完成的工作是,在链接表中,当我单击APR按钮时,“状态”列立即变为“已批准”。这可以在localhost环境中工作,但不能在生产服务器中工作。

我已经尝试过ob_start和ob_end_flush,还检查了是否有空格或行。

我还删除了index.php之前的“ ./”。

// this is the reservation.php
if (isset($_GET['apr'])) {
  $rsID = $_GET['apr'];
  $query = $conn->query("UPDATE reservations SET reservStatus = True WHERE 
  reservID = $rsID");
  header("location: ./index.php");
}

// this is the index.php
<?php
   require 'header.php';

   if (isset($_SESSION['user_info'])) {
     include 'reservation.php';
   } else {
     include 'login.form.php';
   }

   include 'footer.php';

我希望它会重定向到index.php,并从那里开始,如果会话已经开始,它将把页面引导回Reservation.php

1 个答案:

答案 0 :(得分:1)

即使重定向标头之后,PHP脚本也不会停止。您必须通过调用die();函数来停止继续加载PHP脚本

// this is the reservation.php
if (isset($_GET['apr'])) {
  $rsID = $_GET['apr'];
  $query = $conn->query("UPDATE reservations SET reservStatus = True WHERE 
  reservID = $rsID");
  header("location: ./index.php")

  // Add these two lines
  die();
  exit();
}

您也可以在脚本中每个重定向标题的下方添加这些行,谢谢。...

更新

我想我遇到了您的问题,到目前为止,您所看到的是在显示网站标题部分的欢迎消息后,您正在重定向页面,

因此,实际上,在任何类型的输出(通过PHP)发送到浏览器之后(在您的情况下,标题部分中的欢迎消息),您都无法调用标头函数,因为PHP最初会先向浏览器发送Content-type标头您首先要通过PHP在浏览器上显示任何内容

现在,您可以通过两种方式

1)包括redirection

的JavaScript

以此替换您的标题行在Reservation.php中

echo ("<script> window.location = 'http://cdnj-nas.synology.me/cdnj/index.php'; </script>");

或者,如果这不起作用

echo ("<script> location.replace('http://cdnj-nas.synology.me/cdnj/index.php');  </script>");

2)您可以在顶部的header.php文件中检查这种重定向条件