PHP で書かれたかなり基本的な CRUD アプリ (R を強調) があります。ODBC経由で OpenEdge データベースに接続します。アプリの各ページは、基本的にデータベース クエリの結果を返し、テーブルに表示します。各ページの上部には、ユーザーがページのクエリのパラメーターを指定できるようにするフォームがあります。フォームは同じページをロードしますが、ユーザー パラメータを GET 変数として渡します。
ユーザーが新しいパラメーターを指定しない限り、ページが同じコンテンツをロードする (データベースから新しいデータをフェッチしない) 限り、後続のページのロードでも (たとえば、ユーザーは別のページにアクセスして、同じデータを表示するために戻ってくる可能性があります)。私たちの理由は、ユーザーが紙のレポートと同じようにデータを分析できるようにすることです (データベースが更新された場合に分析の途中で変更されないようにするため)。
私が現在これを行っている方法は、SESSION 変数を使用することです。入力パラメーターと結果の両方をセッションに保存するページがあります。ページが次に読み込まれると、SESSION 変数と GET 変数が設定されているかどうかがチェックされ、それらが同じかどうかが比較されます。それらが同じでない場合、GET 変数を使用してデータベースを再度照会します。それらが同じ場合、キャッシュされたデータが使用されます。
このアプローチの問題点は、コードが非常にぎこちなくなり、入力変数の数にうまく対応できないことです。
1 つの変数だけのコードpart
とその結果の例part_orders
:
if (isset($_GET['part']) && isset($_SESSION['part'])){
if(($_GET['part'] == $_SESSION['part']) && isset($_SESSION['part_orders'])){
$part_orders = $_SESSION['part_orders'];
$part = $_SESSION['part'];
}
else{
$part = $_GET['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
}
elseif(!isset($_GET['part']) && isset($_SESSION['part'])){
if(isset($_SESSION['part_orders'])){
$partial_part_no = $_SESSION['part'];
$part_orders = $_SESSION['part_orders'];
$part = '';
}
else{
$part = $_SESSION['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
}
elseif(isset($_GET['part']) && !isset($_SESSION['part'])){
$part = $_GET['part'];
$part_orders = get_new_part_order_list($part, $query);
$_SESSION['part_orders'] = $part_orders;
$_SESSION['part'] = $part;
}
これを行うより良い方法はありますか?ここで他のいくつかの質問を見ると、結果をファイルに書き込むことについて話しましたが、すべてのユーザーのすべてのページのファイルを aa にするのは面倒なようです。
他の提案は、変更されていないクエリ (たとえば、ブログ投稿の読み込み) に対してのみ実際に機能するように見えました。