同じ問題が以前に議論されていましたが、ヘッダー機能を呼び出す前に空白をブラウザに送ることはできません。私はここで間違っている、私は前にHTMLのdivタグを印刷しているので、ソリューションはちょうどすべてが私がしたいと働くように基本的な戦略に従っている! FYI、AJAX(Using jQuery)では、JSONエンコードされた出力をPHPスクリプトからレスポンスとして返すだけで済みます(結果の一部またはエラーが表示される可能性があります)。しかし、それは検索ページなので、私はURLのsearch_queryのためのURL書き換えのようなユーザーに施設を利用していますので、ユーザーが望むならばフォームを記入する必要はありません。したがって、GETメソッドを使用します。以下は、私のコードは、私がこれを達成しています:FYIPHPのヘッダが期待通りに動作しない
<div class="two-third">
<?php if($_GET['err'] == "no_results_found") {
echo "<p class='error-box'>No results found for your query. Please search using different specific keywords.</p>";
} ?>
<form method="GET" action="<?php echo BASE_URL; ?>/content.php" id="search_content_form">
<fieldset>
<div>
<label>Search this site: </label>
<input type="text" title="Enter your query" class="form-poshytip" id="search_query" name="search_query" value="<?php echo $search_query; ?>">
</div>
<p><input type="submit" id="search_content_submit_button" value="Search Content"></p>
</fieldset>
</form>
<?php if(isset($search_query)) {
$query = "SELECT * FROM (
(SELECT 'event' AS content_type, event_id AS content_id, event_title AS content_title, publishing_time AS content_publishing_time FROM event WHERE event_title LIKE '%".$search_query."%' OR content LIKE '%".$search_query."%')
UNION
(SELECT 'article' AS content_type, article_id AS content_id, article_title AS content_title, publishing_time AS content_publishing_time FROM article WHERE article_title LIKE '%".$search_query."%' OR content LIKE '%".$search_query."%')
) content_result
ORDER BY content_result.content_publishing_time DESC
LIMIT 500
";
$result = mysql_query($query);
if(!$result) {
header("location:".BASE_URL."/content.php");
}
if(mysql_num_rows($result) == 0) {
header("location:".BASE_URL."/content.php?err=no_results_found");
}
$i = 0;
echo "<div id='search_content_results' class='list'>";
echo "Found <strong>".mysql_num_rows($result)."</strong> result(s) for search query: \"<strong>".$search_query."</strong>\"";
while($row = mysql_fetch_assoc($result)) {
// extract all needed varaibles from $row
$content_type = $row['content_type'];
$content_id = $row['content_id'];
$content_title = $row['content_title'];
$content_publishing_time = $row['content_publishing_time'];
echo "
<ul>
<li><a href='".BASE_URL."/".$content_type."s.php?".$content_type."_id=".$content_id."'>".($i+1).") <strong>".$content_title."</strong> <span style='font-size: 12px; text-decoration: italic;'>(Published On: ".date('M jS Y', strtotime($content_publishing_time)).")</span></a></li>
</ul>
";
$i++;
}
echo "</div>";
}
?>
</div>
<!-- ENDS two-third -->
:上記の$ SEARCH_QUERYは、上記のコードではすべてがどこかのブロックを除いて動作します$ _GETのエイリアス[ 'SEARCH_QUERY']
ですheader()が呼び出されます。私は前に述べたように理由を知っています。ちょうど私が使用しているIFブロックにあるページの最上部にあるすべてをチェックするのに役立ちます。そして、num_rowsが0より大きいときに検索フォームを表示してエコー出力を表示し、num_rowsの場合は上記のようにエラーを表示しますMySQLクエリの結果は0です。私の貧しい言語(申し訳ありませんが適切なformatingも)私は急いでいるように申し訳ありません。 ;)
EDIT: ロジックは単純です:
- $ _GET [ 'SEARCH_QUERY']その後、クエリを実行し、同じページにリダイレクト送信後、NUM_ROWS
- NUM_ROWS == 0をチェックします"?err = example_error_message"を指定してエラーメッセージをフォームの上に表示し、同時に出力結果を出力しないでください。
- num_rows> 0次に、$行の値を出力します上記のコード
- ません$ _GET [ 'SEARCH_QUERY']のみ検索フォーム
したがって、これらを達成するために私を助けてください。
私は質問が何であるか不明です。見出しの呼び出しがうまくいかないことは知っていますが、コードを見てみるよう人々に求めていますか? – Jim
だから、それは壊れ、あなたはその理由を知っていますか? –
@ジム:はい、私は解決策を知っていますが、期待通りの結果を得るために私のコードをリファクタリングすることができません。 – Vishal