勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

バニラPHPでフラッシュデータ(フラッシュメッセージ)機能を実装する方法

  PHP

PHPフレームワークのCodeIgniterを勉強していた際にページ遷移好みに表示され、リロードしても表示されないというフラッシュデータ機能が便利だなと思った。同じ機能を実装できるライブラリもあるが、今回はバニラPHPにてこの機能を実装してみたい。以下に実装方法をメモ。

 

やりたいこと

  • 何らかの処理後に当該処理の成否を元にフラッシュデータを作成し、処理完了ページに遷移
  • 処理完了ページでフラッシュデータを表示

 

ソースコード

何らかの処理ページ

<?php
session_start();

//何らかの処理をした後に$flgに成否をboolで格納
$flg = false;

//$flgによってclassとメッセージを変更
$class = ($flg) ? 'success' : 'error';
$msg = ($flg) ? '処理成功しました。' : 'エラーが発生しました。';

//セッションにデータを格納
$_SESSION['flash'][$class] = $msg;

//ページ遷移
header('Location: ./complete.php');
exit;

処理完了ページ

<?php
session_start();

//変数にセッションを格納
$flash = isset($_SESSION['flash']) ? $_SESSION['flash'] : array();

//セッションを削除
unset($_SESSION['flash']);

//フラッシュメッセージが存在する場合は出力
if( !empty($flash) ){
    foreach( (array)$flash as $key => $val ){
        echo '<div class="' . $key . '">' . $val . '</div>';
    }
}

ブラウザから実行すると以下のような形で出力される筈。

<div class="error">エラーが発生しました。</div>

 

所感

先日メモしたjQueryプラグインの「Toastr」と相性が良さそう。

尚、PHPでのフラッシュデータライブラリだと「flasher」と「simple-flash」あたりを試してみたいところ。

 

参考サイト

https://kantaro-cgi.com/blog/php/simple-flash-message.html

 - PHP

  関連記事

PHPでmysqli関数使用時のプリペアドステートメントの利用方法

PHPでMySQLを扱う際はmysqli関数を、エスケープの際はreal_esc ...

PHPのセッションでログイン、ログアウトの管理。あとセッションが保存されない場合の対処。

セッションはほとんど使ったことがなく、 色々つまづいたのでメモ。 やりたかった事 ...

MySQLでIPを整数値としてカラムに格納する

MySQLでIPを整数値としてカラムに格納しているケースがあった。今までIPが必 ...

CodeIgniter4で独自の404ページを表示する方法

CodeIgniter4にて存在しないページをブラウザから開くと、デフォルトの状 ...

$_SERVER['PHP_SELF']に脆弱性あり

formのaction属性とかページングのリンクとかで、 <form ac ...