2013-01-12 82 views
1

可能重复:
Headers already sent by PHPPHP头位置不工作

这是我当前的脚本。而不是像我希望的那样重定向,页面只刷新到当前页面。该页面曾经工作,但最近无故停止工作。我在PHP 5.3上

<?php 
$page = "Edit Topic"; 
require('top.php'); 
$var = safe($_GET['id']); 
$q = mysql_query("SELECT * FROM `topics` WHERE `id`='".$var."'"); 
$r = mysql_fetch_array($q); 
$c = mysql_num_rows($q); 
$user = mysql_fetch_array(mysql_query("SELECT * FROM `users` WHERE `id`='".$_SESSION['id']."'")); 

if($c==0) { 
    echo "<p>This topic does not exist.</p>"; 
} elseif($_SESSION['name'] != $r['poster'] && $user['rank'] == "Member") { 
    echo "<p>This is not your topic.</p>"; 
} else { 
    if(isset($_POST['enter'])) { 
      $title = safe($_POST['title']); 
      $post = safe($_POST['post']); 

      if($post=='' || $title=='') { 
       $message = "You have to write something in your title and post."; 
      } else { 
       mysql_query("UPDATE `topics` SET `text`='".$post."' WHERE `id`='".$r['id']."'"); 
       mysql_query("UPDATE `topics` SET `title`='".$title."' WHERE `id`='".$r['id']."'"); 
       header("Location: http://www.domain.com/view-post/".$r['id'].""); 
      } 
    } 
} 
?> 
+0

更新后的代码以反映更改。 –

回答

3

You can't produce any other output before calling header。你的问题是这样的一行:

echo "<h1>Edit Topic</h1>"; 
+0

没有工作。将编辑主题下移到HTML中,并将完整域添加到标题中,但仍不会重定向。 –

+0

'top.php'是否产生任何输出?那也会打破它。另外,如果你在这个文件或者'top.php'中打开'<?'之前有任何空格或者其他字符,它们也会打破它。 –

+0

事实证明,在阅读你给我的链接之后,top.php确实包含了HTML输出。我在这篇文章中使用脚本来解决我的问题。 http://stackoverflow.com/a/8689521/1457548 –

1

您在发送标头之前有一个echo。删除如下行:echo "<h1>Edit Topic</h1>"; header函数仅在第一次输出前有效。

+0

没有工作。将编辑主题下移到HTML中,并将完整域添加到标题中,但仍不会重定向。 –

1

您应该使用绝对网址而不是您的相对网址,并且header()之后也应使用exit()

2
  1. 退出()头()
  2. 验证您的top.php确实没有输出(因为你不能改变 头之后写的东西给客户 后前mysql_通话使用@(如@mysql_query
  3. 使用准备语句并从PHP和mysqli扩展
  4. 尝试使用UTF-8的文件没有BOM,他们正在很多人 疯狂像地狱