为什么这会给我一个不能修改标题信息的错误


Why does this give me a cannot modify header information error?

我想在以下方面寻求一些帮助。我得到的错误是:

警告:无法修改报头信息-报头已经由

发送

这是我使用的代码:

<?php
    if (isset($_GET['success']) === true && empty($_GET['success']) === true) 
    {
        echo 'Your details have been updated!';
    } 
    else 
    {
        if (empty($_POST) === false && empty($errors) === true) 
        {               
            $newevent = array(
                'title'         => $_POST['title'],
                'discription'   => $_POST['discription'],
                'event_date'    => $_POST['event_date'],
                'time'          => $_POST['time'],
                'contact_name'  => $_POST['contact_name'],
                'contact_num'   => $_POST['contact_num'],
                'username'      => $_POST['username']
            );
            new_event($session_user_id, $newevent);
            header('Location: settings.php?success');
            exit();
        } else if (empty($errors) === false) {
            echo output_errors($errors);
        }
    }
?>

这是new_event函数:

function new_event($user_id, $newevent) {
    $event = array();
    array_walk($newevent, 'array_sanitize');
    foreach($newevent as $field=>$data) {
        $event[] = '`' . $field . '` = ''' . $data . '''';
    }
    mysql_query("UPDATE `event` SET " . implode(', ', $event) . " WHERE `username` = $user_id");
}

任何帮助都将非常感激,我已经看了很长时间了。

多谢

在你的页面顶部使用

<?php
ob_start("ob_gzhandler");
?>
  1. 如果可能的话,尽量避免header,如果它只是用来触发其他服务器请求。产生更多的等待时间和乒乓,干扰browser.back等。尝试找到一种方法来执行settings.php?成功,无需另一个HTTP。

  2. header()仅在之前没有输出单个简单字符时有效。您可以在脚本的开头启动ob_start,并在每个预期输出之前执行ob_end_clean,特别是在header()之前。