我已经看过很多针对此问题的修复我尝试删除空格但没有,我尝试使用ob_start();功能但无济于事。无论我做什么,都会给我这个错误。
警告:无法修改标头信息 - 已发送的标头 (输出从/home/gener105/public_html/header.php:37开始)在第12行的/home/gener105/public_html/includes/vault_post.inc.php中
它说输出从我的header.php文件的最后一行开始(图1),我调用header()时出现问题;在我需要使用的功能中。这是因为我使用header();函数在vault_post.inc.php的第12行(图2)。
我只是对为什么这样做感到困惑,因为在调用标题之前没有输出。
FIG1(header.php)
<?php
session_start();
include 'includes/dbh.php';
include 'includes/vault_post.inc.php';
date_default_timezone_set('America/New_York');
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="">
<meta name="author" content="">
<title>Generation Diary - Leave Them Something For Later</title>
<!-- Bootstrap Core CSS -->
<link href="lib/bootstrap/css/bootstrap.min.css" rel="stylesheet">
<!-- Custom Fonts -->
<link href="lib/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css">
<link href="https://fonts.googleapis.com/css?family=Cabin:700" rel="stylesheet" type="text/css">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css">
<!-- Theme CSS -->
<link href="css/grayscale.min.css" rel="stylesheet">
<!-- Temporary navbar container fix until Bootstrap 4 is patched -->
<style>
.navbar-toggler {
z-index: 1;
}
@media (max-width: 576px) {
nav > .container {
width: 100%;
}
}
</style>
</head>
FIG2(vault_post.inc.php)文件中需要的第一个函数
<?php
function setVaultPosts($conn) {
if (isset($_POST['vault_sub'])) {
$uid = $_POST['uid'];
$date = $_POST['date'];
$content = $_POST['content'];
$sql = "INSERT INTO vaults (uid, date0, content) VALUES ('$uid', '$date', '$content')";
$result = mysqli_query($conn, $sql);
header("Location: http://www.generationdiary.com/user_vault.php?success");
}
}
形成需要的功能
<?php include('header.php'); ?>
<div class="container" id="vault_main">
<div class="row row-offcanvas row-offcanvas-right">
<div class="col-12 col-md-9">
<p class="float-right hidden-md-up">
<button type="button" class="btn btn-primary btn-sm" data-toggle="offcanvas">Toggle nav</button>
</p>
<div class="jumbotron">
<h1 class="text-center">
<?php
if (isset($_SESSION['username'])) {
echo $_SESSION['firstname'] . " " . $_SESSION['lastname'] . "'s";
} else {
echo "You are not logged in";
}
?>
</h1>
<h2 class="text-center">Vault</h2> </div>
<?php
if (isset($_SESSION['username'])) {
echo "
<form action='".setVaultPosts($conn)."' method='POST'>
<input type='hidden' name='uid' value='".$_SESSION['username']."'>
<input type='hidden' name='date' value='".date(' Y-m-d ')."'>
<textarea class='ckeditor' name='content'></textarea>
<br>
<button class='btn btn-default btn-lg' type='submit' name='vault_sub'>Submit</button>
";
getVaultPosts($conn);
} else {
echo "log in";
}
?>
</div>
<div class="col-6 col-md-3 sidebar-offcanvas" id="sidebar">
<div class="fixed">
<div class="list-group"> <a href="#" class="list-group-item active">Vault</a> <a href="recipient.php" class="list-group-item">Recipient Settings</a> <a href="settings.php" class="list-group-item">Account Settings</a> <a href="includes/logout.inc.php" class="list-group-item">Log Out</a> </div>
</div>
</div>
</div>
</div>
<?php include('footer.php'); ?>
答案 0 :(得分:1)
这是完全明显的。并且您的代码完全有缺陷,这可能是因为您第一次使用HTML表单提交。
您的header.php包含立即发送的HTML文本。所以你想调用你的Header()函数,你需要确保没有事先发出。您在代码的第一行上有session_start(),这是正确的,您需要确保此函数是使用它的任何PHP脚本处理中的第一行代码。在调用此函数之前,您需要注意不要发送头信息。
HTMl表单的action属性是url路径,而不是PHP函数。
<form action='form_process.php'>
。您在此处设置路径的方式与设置链接的href(相对路径或绝对路径)的方式相同。然后,您的form_process.php将收到一个$ _POST全局变量,以便您处理收到的表单数据。 http://php.net/manual/en/reserved.variables.post.php