フラッシュメッセージ?
フラッシュメッセージというのは、一度だけ警告が出てリロードすると消えてるっていうアレです。ログインミスやエラーメッセージ等によく使われます。 有名所の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)に格納して、すぐにセッションからフラッシュデータを消しているだけです。
すると、変数に格納した初回だけ、テンプレートにフラッシュメッセージを表示することができます。そして次回はフラッシュデータは空っぽなので、変数にも取り込まれません。つまり次回からは何も表示されません。
構成はシンプルですが、イチから考え出すとちょっと混乱するので、是非参考にしてみてください。