1. ホーム
  2. php

[解決済み] PHPのヘッダーリダイレクトが機能しない [重複]。

2022-01-25 02:35:34

質問

include('header.php');

$name = $_POST['name'];
$score = $_POST['score'];
$dept = $_POST['dept'];

$MyDB->prep("INSERT INTO demo (`id`,`name`,`score`,`dept`, `date`) VALUES ('','$name','$score','$dept','$date')");
// Bind a value to our :id hook
// Produces: SELECT * FROM demo_table WHERE id = '23'
$MyDB->bind(':date', $date);
// Run the query
$MyDB->run();

header('Location:index.php');
    exit;

上記のコードでは、リダイレクトの問題が発生し続けます。エラーは次のようなものです。

警告 Cannot modify header information - headers already sent by (output は /Applications/MAMP/htdocs/testygubbins/OO/test/header.php:15 で開始) である。 /Applications/MAMP/htdocs/testygubbins/OO/test/form.php on line 16.

これには全くお手上げです。どなたか、どうすればうまくいくのかご存知の方はいらっしゃいますか?

EDIT

header.phpのコード。

<?php
include('class.user.php');
include('class.Connection.php');

$date = date('Y-m-j');

?>
<html>
<head>
    <link rel=StyleSheet href="css/style.css" type="text/css" media=screen>
    <title>Test</title>
</head>
<body>
<div id="page">

解決方法は?

インクルードをよく見てください。おそらく、?> ?を閉じた後に空白行があります。

これは、いくつかのリテラルなホワイトスペースが出力として送られ、その後のヘッダー呼び出しができなくなる原因となってしまいます。

なお、インクルードファイルのクローズ ?> を外すことは合法であり、この問題を回避するのに便利なイディオムです。

(編集: あなたのヘッダーを見ると、ヘッダーを出力したい場合、HTML出力を一切行わないようにするか、出力バッファリングを使用してキャプチャする必要があります)。

最後に ヘッダーのPHPマニュアルページ が指摘するように、リダイレクトには本当に完全な URL を使用すべきです。

<ブロッククオート

注:HTTP/1.1では、絶対的な の引数としてURIを指定します。 場所 スキーム、ホスト名、および の絶対パスですが、クライアントによっては 相対URI。通常は $_server['http_host'], を使用することができます。 相対URIから絶対URIを作る を自分で作成します。