0

重複の可能性:
PHP によって既に送信されたヘッダー

これが私の現在のスクリプトです。私が望むようにリダイレクトする代わりに、ページは現在のページに更新されます。このページは以前は機能していましたが、最近理由もなく機能しなくなりました。私は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']."");
          }
     }
}
?>
4

4 に答える 4

2

header を呼び出す前に、他の出力を生成することはできません。あなたの問題はこの行です:

echo "<h1>Edit Topic</h1>";
于 2013-01-12T22:17:29.310 に答える
1
  1. header() の後に exit()
  2. top.php が出力を行わないことを確認します (クライアントに何かを書き込んだ後にヘッダーを変更できないため、mysql_-calls (のように) の前に @ を使用します@mysql_query)
  3. プリペアド ステートメントと php の mysqli 拡張機能を使用する
  4. BOM なしで utf-8 ファイルを使用しようとすると、多くの人が狂ってしまいます
于 2013-01-12T22:31:50.977 に答える
0

echobefore send ヘッダーがあります。次のような行を削除しecho "<h1>Edit Topic</h1>"; headerます。関数は最初の出力の前にのみ機能します。

于 2013-01-12T22:16:30.613 に答える
0

相対 URL の代わりに絶対 URL を使用する必要がありexit()ますheader()

于 2013-01-12T22:16:36.620 に答える