"警告:无法修改标题信息"

时间:2018-01-16 07:49:05

标签: php html mysql pdo

当我想添加一篇包含内容管理管理页面的文章时,我收到以下错误:

  

"警告:无法修改标头信息 - 已发送的标头   (输出从cms / includes / connection.php:12开始)   cms / admin / add.php在第23行"

你可以帮我解决这个问题吗?我知道这是一个经常出现的问题,但我没有足够的经验来解决这个问题。谢谢。

这是我的文件connection.php

<?php

ini_set("display_errors", "1");
error_reporting(E_ALL);
try{
    $pdo = new PDO('mysql:host=localhost; dbname=cms', 'root','root');
} catch (PDOException $e) {
    exit('Database error.');
}

?>

这是我的add.php文件

<?php

session_start();

include_once ('../includes/connection.php');

if (isset($_SESSION['logged_in'])) {
    if(isset($_POST['title'],$_POST['content'])) {
        $title = $_POST['title'];
        $content = $_POST['content'];

        if(empty($title) or empty($content)) {
            $error = 'All fields are required!';
        } else {
            $query = $pdo->prepare('INSERT INTO articles (article_title, article _content, article_timestamp) VALUES (?,?,?)');

            $query->bindValue(1,$title);
            $query->bindValue(2,$content);
            $query->bindValue(3,time());

            $query->execute();

            header('Location: index.php');
        }

    }

      ?>

 <html lang="en">
 <head>
     <title>My Fitness Lifestyle</title>

     <link rel="stylesheet" type="text/css" href="../assets/style.css">
 </head>

 <body>

 <div class="container">
     <a href="index.php" id="logo">CMS</a>


     <br />

     <h4>Add Article</h4>

     <?php if (isset($error))  { ?>
     <small style="color:#900010;"><?php echo $error; ?>
         <br /><br />
         <?php } ?>

     <form action="add.php" method="post" autocomplete="off">
         <input type="text" name="title" placeholder="Title" /><br> <br />
         <textarea rows="15" cols="50" placeholder="Content" name="content"></textarea><br /><br />
        <input type="submit" value="Add Article" />
     </form>

 </div>
 </body>
 </html>

    <?php

}   else {
    header('Location: index.php');
}

?>

2 个答案:

答案 0 :(得分:0)

您的connection.php文件正在发出警告或通知,这就是您收到此错误的原因。

你应该从connection.php中删除这一行,以避免警告或通知。

// ini_set("display_errors", "1");
// error_reporting(E_ALL);

答案 1 :(得分:-1)

如@RamRaider所述,您可以启用output buffering in your php.ini,也可以在php文件中使用6手动启动缓冲。请记住,这仅在任何输出发送之前有效。

我们目前在您的代码中没有任何行号,因此您应该检查在connection.php第12行中可以找到的确切内容。我假设由于启用所有可用日志级别的错误显示,您将获得ob_start();或可比较的,这也将导致输出服务。

手动输出缓冲的示例

举个例子,您可以启用输出缓冲,如下所示:

E_NOTICE

只要脚本完全运行,输出缓冲区就会自动刷新到客户端。您可以使用<?php // start buffering ob_start(); session_start(); include_once ('../includes/connection.php'); if (isset($_SESSION['logged_in'])) { if(isset($_POST['title'],$_POST['content'])) { 手动刷新内容,但我还没有找到一个实际用途(因为大多数浏览器都在等待响应完成而不是处理部分响应)。

关于Jonathan关于尾随内容的评论

正如Jonathan在他的评论中所述,关闭PHP标记之后的任何尾随隐形字符也将立即发送到客户端,导致已经发送&#34; 标题&#34;错误,因此我建议在脚本末尾省略关闭的PHP标记。有一个good SO question关于省略标题以及为什么建议跳过标题。