2013-01-12 116 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,他們正在很多人 瘋狂像地獄