带有标头的PHP重定向不起作用


PHP redirect with header not working

这是我的代码:

<?php
     
$url = $_GET["id"];
$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXX";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
    
    $sql = "DELETE FROM Table WHERE id='".$url."'";
    
    if ($conn->query($sql) === TRUE) {
        echo 'Row deleted successfully';
    } else {
        echo "Error deleting record: " . $conn->error;
    }
    
    $conn->close();
    
    header('Location:index.php');
        exit;
    ?>

但是标头重定向不起作用。。。以下是错误日志:

严格标准:header():依赖系统的时区设置是不安全的。需要使用date.timezone设置或date_default_timezone_set()函数。如果您使用了其中任何一种方法,但仍然收到此警告,则很可能是您拼错了时区标识符。我们在第24行的/homepages/5/d394578306/htdocs/XXXXX/XXXXXX/delete.php中选择了"America/New_York"作为"EST/5.0/no DST"

警告:无法修改标头信息-标头已由(输出开始于/homepages/5/d394578306/htdocs/XXXXX/delete.php)在/homepages/5/d394578006/htdocs/XXXXX/deletes.php第24行上发送

    <?php

删除PHP标记之前的空白-这将被视为输出,并将停止header()调用的工作。

您还执行了一些echo调用,这两个调用都将并且停止重定向,因为echo将向浏览器输出内容/标头。

在我看来,标头的时区警告导致了输出,这反过来又使函数本身无法工作。尝试这样做:

@header('Location:index.php')

@将抑制该特定函数调用的错误输出。

此外,正如Bulk正确指出的那样,您应该禁用第17行和第19行中的echo调用,或者将它们移动到标头方法调用下方。

根据时区错误,尝试以下操作:

<?php
date_default_timezone_set("--HERE YOUR TIMEZONE---");
$url = $_GET["id"];
$servername = "XXXX";
$username = "XXXX";
$password = "XXXX";
$dbname = "XXX";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
    $sql = "DELETE FROM Table WHERE id='".$url."'";
    if ($conn->query($sql) === TRUE) {
        echo 'Row deleted successfully';
    } else {
        echo "Error deleting record: " . $conn->error;
    }
    $conn->close();
    header('Location:index.php');
        exit;
    ?>

现在替换"--此处为您的时区--"。

在这里,您可以找到您所在国家的正确时区:http://php.net/manual/en/timezones.php