フラッシュメッセージ?
フラッシュメッセージというのは、一度だけ警告が出てリロードすると消えてるっていうアレです。ログインミスやエラーメッセージ等によく使われます。 有名所のPHPフレームワークなどでは一機能として実装されていたりしますが、生のPHPでも比較的簡単に実装できます。
PHPセッションを利用
PHPのセッション機能を利用した実装を以下に掲載します。(メッセージタイプを指定してスタイルを分けられる仕様になっています)
<?php @session_start(); $flash = isset($_SESSION['flash']) ? $_SESSION['flash'] : array(); unset($_SESSION['flash']); ...
<?php /** * flashメッセージセット * * @param string $type タイプ * @param string $message メッセージ * @return void * @example flash('error', 'エラーです'); */ function flash($type, $message) { global $flash; $_SESSION['flash'][$type] = $message; $flash[$type] = $message; } ...
<?php foreach(array('default', 'error', 'warning') as $key) { if(strlen(@$flash[$key])){ ?> <div class="flash flash-<?php echo $key ?>"> <?php echo $flash[$key] ?> </div> <?php } } ...
実際の使い方は、プログラム中で flash()
を呼び出し、その後リロードするだけです。
<?php if(!$login) { flash('error', 'ログインエラーですね! もう一度お試しください。'); header('Locatione: /login/'); exit; } ...
また、メッセージタイプはテンプレートいじればいくらでも増やせます。(上記例は default
error
warning
だけです)
仕組みとしては非常に単純で、フラッシュメッセージをセッションに書き込んでGETリロードしたら、保存されているフラッシュメッセージを変数(上記の $flash
)に格納して、すぐにセッションからフラッシュデータを消しているだけです。
すると、変数に格納した初回だけ、テンプレートにフラッシュメッセージを表示することができます。そして次回はフラッシュデータは空っぽなので、変数にも取り込まれません。つまり次回からは何も表示されません。
構成はシンプルですが、イチから考え出すとちょっと混乱するので、是非参考にしてみてください。