1

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 にするのは面倒なようです。

他の提案は、変更されていないクエリ (たとえば、ブログ投稿の読み込み) に対してのみ実際に機能するように見えました。

4

0 に答える 0