phpで画面遷移する方法と注意する事
はじめに
この『お小遣い稼ぎ奮闘ブログ』では、お小遣い制の会社員が、ブログを運営する事で少しでも毎月のお小遣いを増やせないかあれこれやってみた事をメインに記事を書いています。
(関係の無い事もたくさん書いている雑多ブログではありますが・・・)
ブログサイトを運営するだけであれば、『HTML』の知識を身に付ければブログサイトを作成する事が可能です。
私のこのブログサイトも初めは『HTML』と『javascript』のみで作成していましたが、常に同じものを表示する『静的』なページだけでなく、状況によって表示内容を変える『動的』な表示領域も作りたくなり、『php』というプログラミングの勉強も始めました。
全く何もわからない状況から、インターネットで調べながらコツコツと勉強し、『php』を使って今では以下のようなものを作成しています。
問合せ画面
ログイン画面
カテゴリ情報登録画面
記事情報登録画面
カテゴリ内の記事一覧表示画面
最新記事表示領域
カテゴリ一覧表示領域
よく、他の方のブログを見ると、『最新記事』といった表示領域がありますが、HTMLのみで記述した『静的』なページの場合、新しい記事を更新する度に、『最新記事』の表示領域を更新しなければならなくなってしまいます。
もちろん、『最新記事』の表示領域を『共通ファイル化』すれば、全記事を修正せずとも1つのファイルを更新すれば良いのですが、ファイルを更新せずDBに登録した内容を引っ張ってくるようにしたいと思ったのがきっかけです。
『動的』に表示するためには、このようにデータベース(DB)を使って登録した内容を用いる事も多いため、データベースの勉強も必要となり、『HTML』からは随分と難易度が上がってしまいますが、何もわからない状態から始め、聞く事ができる人が誰もいない状態でも最終的には作りたいものを作る事ができたため、難しそうと思う方も是非チャレンジしてもらえればと思います。
ネットで調べれば色々な情報が出て来ますが、プログラマー向けの内容が多く、完全な初心者には情報が省略されており、戸惑う事も多いため、私が悩んだ箇所を中心に丁寧に書いていければと思います。
画面遷移の手段
今回の記事では、『画面遷移』する方法について書いていきたいと思います。
01『リンク』を使って画面遷移する方法
HTMLで記述している方も、『外部リンク』や『内部リンク』などリンクを貼る機会は多いと思います。
文字や画像に対してリンクを作成する事ができ、ブログサイトなどでは非常に利用頻度が高いかと思います。
基本的には『固定リンク』のため、動的にリンク先を変える事はできません。
例えば、このページのトップへというリンクを作成する場合、
<a href="遷移先のURL">アンカ-テキスト</a>
といった具合に記述しますが、これはもうご存知で使われている方が多いかと思います。
画像をリンクにする際は、
<a href="遷移先のURL"><img src="画像のURL" alt="画像の説明" /></a>
といった具合に記述します。
また、ページを別ウィンドウで開きたい場合は、
<a href="遷移先のURL" target="_blank">アンカ-テキスト</a>
『target="_blank"』の記述を追加します。
02『javascript』を使って画面遷移する方法
『javascript』を使うと、先ほどの『リンク』に比べできる事が増えます。
『Node.js』など一部『サーバー側』で動作する場合もありますが、基本的には、『javascript』はHTMLに記述して動くクライアント側で動くプログラムです。
【プログラム内で遷移する場合】
<script language="javascript" type="text/javascript">
window.location = '遷移先URL';
</script>
といった記述で遷移させる事が可能です。
他にも
【ボタンクリックで遷移する場合】
といった具合のボタンリンクを作る際は、
<input type="button" value="TOPへ遷移" onclick="location.href='遷移先URL'">
といった記述で作成する事ができます。
また、画面遷移時にメッセージを表示したい場合は、
<script language="javascript" type="text/javascript">
alert('ここにメッセージ内容を表示');
window.location = '遷移先URL';
</script>
と記述するなど、プログラミング言語を利用する事で、出来る事の幅がかなり広がっていきます。
03『php』を使って画面遷移する方法
前置きが長くなってしまいましたが、『php』で画面遷移をする際は、
<?php
header("Location:遷移先URL");
?>
といった記述をする事で画面遷移をする事が可能です。
『php』は先ほどの『リンク』や『javascript』とは異なり、サーバー側で動くプログラムです。
そのため、ブラウザ上にページが表示される前の動作を操作できるため、表示内容を動的に変える事が可能です。
header()関数で画面遷移する際に注意する事
先ほどご紹介したheader()関数を使う事で、『php』で画面遷移を行う事が可能ですが、注意して欲しい事があります。
私は知らずに見事にバグを仕込んでしまいました。
header()関数後の処理も走る
例えば、
<?php
if($isError == 1)
{
header("Location:遷移先URL");
}
$_SESSION["sample"] = "0";
?>
というプログラムがあった場合、header関数で画面遷移する行で、別ページへ遷移すると思いがちですが(私だけ?)、その後のセッション変数への数値代入コードも実行されてしまいます。
特にプログラムの途中で場合分けなどして画面遷移する際は十分に注意して下さい。
exit()で回避
先ほどの例で、セッション変数への数値代入処理を実行しない動作が正しい場合は、
<?php
if($isError == 1)
{
header("Location:遷移先URL");
exit();
}
$_SESSION["sample"] = "0";
?>
『exit();』の記述をheader関数の後に記述します。
そうする事で、『$_SESSION["sample"] = "0";』の部分は実行されなくなります。
header関数前で出力NG
基本的にheader関数の前で『出力』してはいけません。
例えば、
<?php
echo 'TEST';
header("Location:遷移先URL");
exit();
?>
と記述すると、エラーとなってしまう場合があります。
header関数の前にクライアント側に出力していた場合、header関数を実行するとエラーとなります。
ただし、出力するコンテンツはすぐにクライアント側に行くわけでは無く、バッファーを溜め込んでいくため、設定によってはエラーにならない場合もあります。
しかし、header関数を呼び出す可能性がある際は、header関数前の出力には十分に注意しましょう。
『<?php』タグの前に誤ってスペースが入っているだけでもエラーになってしまう可能性があります。
私が体験したもので、もっとも解決までに時間がかかったのが、『BOM』です。
文字化けを防ぐために、WEB関連のファイルは、『UTF-8』という文字コードで保存される事が多いのですが、この『UTF-8』には『BOM付』と『BOM無』があります。
『BOM付』はファイルの先頭に『このファイルはUTF-8で書かれているよ』というコードが付いています。
そのコードがphpのソースに付いてしまうと、『出力』となってしまい、そのファイル内でheader関数を使うとエラーになってしまいます。
このBOMコードはテキストエディタなどで見ると見えないため非常に厄介です。
原因不明でエラーとなる際は、このBOMコードを疑ってみるのも良いかもしれません。
最後に
今回は、『php』で画面遷移をする方法を記載しました。
もの凄く基本的な事で、『php 画面遷移方法』といったキーワードで検索すると、簡単にheader関数が出て来るため、すぐに画面遷移のやり方はわかるのですが、私が調べたページには『exit()』の説明はありませんでした。
おそらく、記載するまでもなく常識的な事なのでしょうが、初心者にはそういった事はわかりません。
そのため、あらゆる事を想定したテストが非常に重要になってきます。
『HTML』で記述している際は、表示的な問題に限定される事が多く、十分なテストを行わずとも問題無かった方も多いかもしれませんが、プログラムの場合は違います。
1つのミスであっても、結果が異なり大きな問題となる可能性があるため、十分に注意しましょう。