【问题标题】:PHP header location error? Don't know how to fix [duplicate]PHP标头位置错误?不知道如何解决[重复]
【发布时间】:2016-01-09 00:36:22
【问题描述】:

我又需要帮助了...

我的 PHP 代码:

<?php session_start();
include_once 'init.inc.php'; // connection to database
include_once 'testFunc.php'; 

在我的 testFunc.php 里面是这样的:

<?php
function loggedIn(){

if(isset($_SESSION['user_id']) && !empty($_SESSION['user_id'])){

    return true;
} else{

    return false;

}

} 

在我的 test1 中是这样的:

<?php

if(loggedIn()){
?>
<a href="test.php">Home</a>|
<a href="testMessage.php">Messages</a>|
<a href="testLoggout.php">Log out</a>
<?php
}else{
    ?>
    <a href="test.php">Home</a> |
    <a href="testLogin.php">Log In</a>|
    <a href="testRegister.php">Register</a>
<?php
}
?>

include_once 'test1.php';
?>

// 这里开始主要部分。

<head> // here is line 8 in my code here it gives me the error.

</head>

 <body>

 <h3>Conversation - Message System</h3>
 <?php include_once 'testMessageBar.php' ?>
 <?php
 $my_id = $_SESSION['user_id'];
 ?>
 <br>

 <div>
 <?php

 if(isset($_GET['hash']) && !empty($_GET['hash'])){

    $hash = $_GET['hash'];
    $message_query = mysqli_query($db,"SELECT from_id, message FROM messages WHERE group_hash='$hash'");
    while($run_message = mysqli_fetch_array($message_query)){

            $from_id = $run_message['from_id'];
            $message = $run_message['message'];

        $user_query = mysqli_query($db, "SELECT username FROM users1 WHERE id='$from_id'");
        $run_user = mysqli_fetch_array($user_query);
        $from_username = $run_user['username'];

        echo "<p><b>$from_username</b><br/>$message</p>";
    }

    ?>
    <br/>
        <form method="post">
            <?php
            if(isset($_POST['message']) && !empty($_POST['message'])){
                $new_message = $_POST['message'];
                mysqli_query($db, "INSERT INTO messages VALUES('','$hash','$my_id','$new_message')");
                header('location: testConversation.php?hash='.$hash);

            }
            ?>
                Enter Message: <br/>
            <textarea name="message" rows="6" cols="30"></textarea>
            <br/></br>
            <input type="submit" value="Send Message">
        </form>
<?php

}else{

    echo "<b>Select Conversation </b>";
    $get_con = mysqli_query($db,"SELECT hash, user_one, user_two FROM message_group WHERE user_one='$my_id' OR user_two='$my_id'");
    while($run_con = mysqli_fetch_array($get_con)){
        $hash = $run_con['hash'];
        $user_one = $run_con['user_one'];
        $user_two = $run_con['user_two'];

        if($user_one == $my_id){

                $select_id = $user_two;
        }else{

            $select_id = $user_one;

        }
            $user_get = mysqli_query($db, "SELECT username FROM users1 WHERE id='$select_id'");
            $run_user = mysqli_fetch_array($user_get);
            $select_username = $run_user['username'];

                echo "<p><a href='testConversation.php?hash=$hash'>$select_username</a></p>";

    }
}

?>
</div>

</body>
</html>

我收到此错误...

 Warning: Cannot modify header information - headers already sent by (output started at /Applications/MAMP/htdocs/project/sites/test1.php:8)

我知道在 header() 之前不应该有输出......但我不知道我应该如何解决这个问题或在哪里放置我的 header();一切都还在工作......我现在试了几个小时仍然不知道......

希望有人可以帮助我:)

【问题讨论】:

    标签: php html


    【解决方案1】:

    看看你的header 函数在哪里。它位于一些 HTML 代码的中间。

    根据定义,您必须在之前发送您的正文(在本例中为您的 HTML)。这就是 HTTP 服务器响应的结构。

    确保您发送的任何标头都在您的输出之前完成,即使是您的正文的一个字符。

    我不确定您为什么要在表单中间发送 Location 标头。如果您想将用户重定向到新页面,请创建一个新问题,询问如何根据特定事件将用户重定向到新页面。

    【讨论】:

    • 我不想将用户重定向到新页面。我将用户重定向到同一页面,因此页面刷新......当我在 textarea 中写一些东西并发送它时,我必须刷新页面以显示网站上的内容,因为我从数据库中获取消息......不要'不知道是否可以理解抱歉:/
    • 当您提交表单时,它会自动刷新页面,因此您无需在此处编写标题。只需回显您从那里的数据库中检索到的任何内容。
    • 确保创建一个 PHP 端点来捕获用户提交表单时发送的任何表单数据。只有在这一点上,您才写入数据库。见这里w3schools.com/php/php_forms.asp
    • 如果我使用 echo 我会得到输出,但只有当我第二次刷新页面时...当我第一次提交表单时它不会回显任何输出。
    猜你喜欢
    • 2017-01-20
    • 2015-01-11
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 2016-05-16
    • 1970-01-01
    相关资源
    最近更新 更多