libro
www.tuyano.com
初心者のためのPHPプログラミング入門

ページ遷移、クッキー、セッション (2/8)

作成:2010-12-09 09:20
更新:2010-12-09 09:20

■header関数でページを移動してみる

では、ページ遷移の簡単なサンプルを下にあげておきましょう。ここではindex.phpindex2.phpという2つのファイルを同じ場所に用意し、index.phpのボタンを押すとindex2.phpに移動する、ということをやってみます。

――実際やってみると、「これって、<a>タグで移動するのと何が違うの?」と思うかも知れません。が、違います! <a>タグは、ただ指定のページにジャンプするだけですが、これは、まずページに書かれているPHPのスクリプトを実行し、その中で移動を指定できる、という点です。つまり、サーバーでスクリプトが処理されている段階で、それを受け取るクライアントに「このページに移動しろ」と指定できるのです。従って、必要な作業とページの移動を組み合わせて行うことができます。

このheaderによるページ移動で注意しておくべき点。1つは、「headerを実行すると、以降の処理はキャンセルされる」ということ。なぜって、headerをブラウザが読み込んだ段階で、そのページに移動してしまいますから、それ以降に何が書かれていても意味が無いのです。Locationheaderで書きだす前にすべての処理を行っておかないといけないわけです。

もう1点は、「headerは、何かを出力する前に実行しないといけない」という点です。これは、よく引っかかる部分でしょう。ヘッダーは、ボディの前に送信されます。ところが、echoやHTMLタグなどが書いてあって何かが出力されると、自動的にその時点でヘッダーは送られてしまいます。一度ヘッダーが送られてしまうと、もうヘッダーは再送することができないのです。

従って、header関数は、必ず何かを出力する前に実行してください。PHPは、HTMLのタグの中にスクリプトを記述しますから、<?php ?>タグ以外のものはすべて「なにか書いてあればそれがそのまま出力される」ようになっています。ですから、例えば<?php ?>タグの前に改行がしてあっただけでも、もうheader関数は使えないのです(その前に改行コードが送られているので、既にヘッダーは送信済み)。この点は、しっかり理解しましょう。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

※index.phpの内容

<?php
	if ($_POST != null){
		$url = $_POST['text1'];
		header("Location:{$url}");
	}
?>
<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<head> 
		<meta http-equiv="Content-Type"
			content="text/html; charset=UTF-8" /> 
		<title>sample page</title>
	</head>
	<body>
		<h1>Hello PHP!</h1>
		<p><?php echo $url; ?></p>
		<hr>
		<form method="post" action="./index.php">
			<input type="text" name="text1" value="./index2.php">
			<input type="submit" value="移動">
		</form>
		<hr>
	</body>
</html>


※index2.phpの内容(適当でOK)

<!DOCTYPE html
	PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"
		xml:lang="ja" lang="ja"> 
	<head> 
		<meta http-equiv="Content-Type"
			content="text/html; charset=UTF-8" /> 
		<title>sample page</title>
	</head>
	<body>
		<h1>Index2.php!</h1>
		<p>新しく用意したページです。</p>
		<hr>
	</body>
</html>

※関連コンテンツ

「初心者のためのPHPプログラミング入門」に戻る