当我想添加一篇包含内容管理管理页面的文章时,我收到以下错误:
你可以帮我解决这个问题吗?我知道这是一个经常出现的问题,但我没有足够的经验来解决这个问题。谢谢。"警告:无法修改标头信息 - 已发送的标头 (输出从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');
}
?>
答案 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关于省略标题以及为什么建议跳过标题。