0

ページネーション リンクを使用してナビゲートするときに、クエリ結果を保持するのに問題があります。

検索フォーム内で選択されたオプションに基づいて mysql クエリを作成するコードを作成しました。$_POST の結果を変数に配置してクエリを作成する自己送信フォームは、次のコードです。

<?php

    if (isset($_POST)) {

    $find = array();
    $area = array();

    if (isset($_POST ['location']) && !($_POST ['location'] == "000")) {

        $find [] = $_POST ['location'];         
        $area [] = "location";
    }


    if (isset($_POST ['sector']) && !($_POST ['sector'] == "000")) {

        $find [] = $_POST ['sector']; 
        $area [] = "sector";
    }   

    if (isset($_POST ['hours']) && !($_POST ['hours'] == "000")) {

        $find [] = $_POST ['hours'];    
        $area [] = "hours";
    }   

    while ((list($key1, $val1) = each($find)) && (list($key2, $val2) = each($area))) {
        if ($key1 == 0) {
            $result =  " WHERE " .  strtolower($val2)  . "= " .  "'" . strtolower($val1) .  "'" . " " ;     
        }
        if ($key1 >= 1) {
            $result .=  "AND " . strtolower($val2) . "= " .  "'" . strtolower($val1) .  "'" . " " ;     
        }

    }


}   else {
        $result = NULL ;    
}

?> 

これに関する問題は、ページネーション リンクの 1 つを選択するとページが更新されることです。これにより、元の SQL クエリが削除され、検索に基づく結果ではなく、テーブル内のすべてのレコードが取得されます。

これまでのところ、Cookie を使用して、検索フォームによって生成された変数を保持し、ユーザーが別の検索を送信したときに Cookie の設定を解除しようとしました。これはある程度機能しますが、ページネーション リンクを 2 回選択すると、何らかの理由で Cookie が消えます。

Cookie を設定するために追加したコードは次のとおりです。if ステートメントの下部に編集があります。

<?php

    if (isset($_POST)) {


    $find = array();
    $area = array();

    if (isset($_POST ['location']) && !($_POST ['location'] == "000")) {

        $find [] = $_POST ['location'];         
        $area [] = "location";
    }


    if (isset($_POST ['sector']) && !($_POST ['sector'] == "000")) {

        $find [] = $_POST ['sector']; 
        $area [] = "sector";
    }   

    if (isset($_POST ['hours']) && !($_POST ['hours'] == "000")) {

        $find [] = $_POST ['hours'];    
        $area [] = "hours";
    }   

    while ((list($key1, $val1) = each($find)) && (list($key2, $val2) =      each($area))) {
        if ($key1 == 0) {
            $result =  " WHERE " .  strtolower($val2)  . "= " .  "'" . strtolower($val1) .  "'" . " " ;     
        }
        if ($key1 >= 1) {
            $result .=  "AND " . strtolower($val2) . "= " .  "'" . strtolower($val1) .  "'" . " " ;     
        }

    }

    setcookie("testcookie", "$result", time()-36000);
    setcookie("testcookie", $result);

}   else {
        $result = NULL ;    
}

?> 

対応するコードの残りの部分は次のとおりです。

Cookie を変数に割り当てました。

$ret_result = str_replace('\', '', $_COOKIE["testcookie"]);

次に、クエリを実行しました。

    $sql = "SELECT * FROM posting $ret_result ";

フォームを初めて送信したときに生成されるクエリにも問題があります。クエリが変数に割り当てられる前に、フォームを 2 回送信する必要があります。これは、Cookie を削除しようとする場合にも当てはまります。

私はここで途方に暮れているので、どんな指針も大歓迎です。

ありがとう

4

1 に答える 1

1

非表示のフォーム フィールドを使用して、以前に $_POST[] から受け取った値をそこに保存します。これにより、ページネーション リンクの 1 つをクリックして「送信」したときに、それらの値が保持されます。

于 2011-06-21T20:10:51.780 に答える