【问题标题】:Warning: Cannot modify header information - headers already sent by (two headers on one page?) [duplicate]警告:无法修改标头信息 - 标头已由(一页上有两个标头?)[重复]
【发布时间】:2014-02-06 18:06:49
【问题描述】:

在此页面上,我有一个要选择然后显示一条消息的查询、一个删除消息的查询和一个添加消息的查询。当删除消息和添加消息的查询成功运行时,我将重定向回同一页面,以便用户可以看到更新。因为我在执行此操作时需要传递一些变量,所以我使用标头重定向。

$home_url = 'http://' 。 $_SERVER['HTTP_HOST'] 。目录名($_SERVER['PHP_SELF'])。 '/discussion.php?caseid=' 。 $case_id.'&did='.$discussion_id.'&user_id='.$user_id; header('位置:' . $home_url);

我注意到我的第二个重定向(用于添加消息的重定向)给了我这个

警告:无法修改标头信息 - 标头已由第 126 行 C:\xampp\htdocs\casekeeper\discussion.php 中的(输出从 C:\xampp\htdocs\casekeeper\discussion.php:85 开始)发送

在我添加 3-4 条消息后。我可以不必在同一页面上标头重定向消息吗?是我错误地设置了脚本还是我只是在完全错误的路径上?

    $query2 = "SELECT user_profile.first_name, user_profile.last_name, discussion_messages.message_text, discussion_messages.message_id FROM `user_profile` INNER JOIN discussion_messages ON (user_profile.user_id = discussion_messages.user_id) WHERE discussion_messages.discussion_id = '" . $_GET['did'] . "' ORDER BY discussion_messages.message_id DESC";
    $data2 = mysqli_query($dbc, $query2); 
    while ($row2 = mysqli_fetch_array($data2)) {
    $message_id = $row2['message_id'];
    ?>
    <div class="row">
      <div class="col-xs-4 col-md-2">

      </div>
      <div class="col-xs-8 col-md-10 discussion_title">
        <?php echo '<h5 class="discussionname">' . $row2['first_name'] . ',' . $row2['last_name'] . '</h5>';?>
        <?php echo '<h5 class="">' . $row2['message_text'] . '</h5>';?>           
        <h6 class="pull-right">Jan. 03 </h6>
        <div>
    <?php 
      if (isset($_POST['delete'])) {
      // Grab the profile data from the POST

        $messageid = mysqli_real_escape_string($dbc, trim($_POST['messageid']));
        $queryd = "DELETE FROM `discussion_messages` WHERE message_id = '$messageid' ";
        mysqli_query($dbc, $queryd)
        or die("Unable to connect");
        mysqli_close($dbc);

        $home_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/discussion.php?caseid=' . $case_id.'&did='.$discussion_id.'&user_id='.$user_id;
         header('Location: ' . $home_url);
          }
          ?>
          <div>
             <form method="post">
              <?php echo '<input type="hidden" value="'.$row2['message_id'].'" name="messageid" />'; ?>
              <input type="submit" name="delete" class="btn btn-info btn-sm" value="delete"/>
            </form>
          </div>
        </div>
      </div>
    </div>
    <?php 
        };

        ?>
    <br>
    <hr>
    <?php

    if (isset($_POST['submit'])) {
      // Grab the profile data from the POST
        $message = mysqli_real_escape_string($dbc, trim($_POST['message']));
        $query3 = "INSERT INTO `discussion_messages`(`message_text`, `discussion_id`, `user_id`, `message_date_time`, `case_id`) VALUES ('$message','$discussion_id','$user_id', NOW(), '$case_id')";
        mysqli_query($dbc, $query3)
        or die("Unable to connect");
        //Confirm success with the user
        mysqli_close($dbc);

        $update_url = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/discussion.php?caseid=' . $case_id.'&did='.$discussion_id.'&user_id='.$user_id;
         header('Location: ' . $update_url);

      };

      ?>
    <div class="row col-md-10 col-md-offset-1">
      <div class="well well-lg">
          <form role="form" method="post">
          <div class="form-group">
            <label class="sr-only" for="fact_text">Fact Text</label>
            <textarea name="message" class="form-control" rows="10" placeholder="Put note here"></textarea>
          </div>
          <br>

          <input type="submit" value="Add to discussion" name="submit" class="btn btn-info btn-sm" />

          </form>
      </div>
    </div>

【问题讨论】:

  • 至于数以千计的错误消息的精确欺骗:您已经执行了输出之前您尝试进行header() 调用
  • 每次我尝试将标题调用放在任何输出上方时,它都会说找不到页面,如果我想重定向回页面我已经打开但无法使用标题.....有吗另一种方法来做到这一点,所以我仍然可以在 URL 甚至在帖子中传递变量?

标签: php mysql http-headers


【解决方案1】:

我认为您可以尝试一种简单的方法来重定向您的页面:

echo "<script>window.location.href = $update_url</script>";

或者

echo "<script>window.location.raplace('$update_url')</script>";

请记住,必须在发送任何实际输出之前调用 header()。(Reference)

【讨论】:

  • 最后是问题所在,我最终将 php 逻辑中的标题移动到页面顶部并修复了
猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 2013-07-09
  • 2012-02-28
  • 2011-01-15
  • 2012-03-31
  • 2012-07-21
相关资源
最近更新 更多