web-dev-qa-db-ja.com

PHPページリダイレクトの問題-ヘッダー情報を変更できません

データベースから呼び出しているIDが存在しないか削除された場合でも、さまざまな要素を表示するページがあります(これにより、検索エンジンが存在しないページをリストし続けるとともに、あらゆる種類の醜いエラーがスローされます)。

$ idが存在しない場合、以下に示すページコードの最初の部分を変更して、404(または少なくとも404ヘッダーを持つprojecterror.php)を送信できますか?どうもありがとう!

<?php
include_once("includes/linkmysql.php");
$adda=$_GET['a']; 
$cont=$_GET['c']; 
$select="SELECT * FROM projects where id='$id'";
$qselect = mysql_query($select);
while ($row = mysql_fetch_array($qselect)) { 

Matt Wilson による元のコメントの結果として Vivek Goel によって親切に提案された次の変更は、ページを正しく表示する有効なエントリになりますが、存在しないページはエラーを表示しますこの変更されたコードの下:

<?php
include_once("includes/linkmysql.php");
$adda=$_GET['a']; 
$cont=$_GET['c']; 
$select="SELECT * FROM projects where id='$id'";
$qselect = mysql_query($select);
if( mysql_num_rows( $qselect ) === 0 )
{
   header("HTTP/1.1 301 Moved Permanently");
   header( 'Location: http://examplesite.domain/errorpage' ) ;
   exit;
}
while ($row = mysql_fetch_array($qselect)) { 

上記の変更に起因するエラー:

Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 22 
Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 23 Lines 22 and 23 are the two header lines in your example above

22行目と23行目は、次の2つのヘッダー行です。

header("HTTP/1.1 301 Moved Permanently");
header( 'Location: http://examplesite.domain/errorpage' ) ;
14
JoeW

私はあなたのためにはるかに簡単な解決策を持っています-それは簡単です!このコマンドを追加するだけです最初に phpソースの:

ob_start();

これにより、出力のバッファリングが開始されるため、PHPスクリプトが終了するまで(またはバッファを手動でフラッシュするまで)、実際には何も出力されません。また、その時までヘッダーは送信されません!だから- コードを再編成する必要はありません、コードの最初にこの行を追加するだけで、それだけです:-)

30
TMS

表示するもの(ブラウザのテキスト)を送信する前。 IDが有効かどうかをモデルで確認してください。 idが有効でない場合は、エラーページにリダイレクトしてください

header("HTTP/1.1 301 Moved Permanently");
header( 'Location: http://examplesite.domain/errorpage' ) ;
2
Vivek Goel

Php header()リダイレクトを使用する前に、コンテンツをブラウザに送信しないでください。ヘッダーがすでに送信されている場合は、代わりにjavascriptリダイレクトを試すことができます。

if( mysql_num_rows( $qselect ) === 0 )
{
   echo "<script type='text/javascript'>window.location.href='{http://examplesite.domain/errorpage}'</script>";
   exit;
}

しかし、JavaScriptリダイレクトが検索エンジンに適しているかどうかはわかりません

0