1

PHP と MySQL を利用して、このサイトを複製 (または非常に類似) した練習用サイトをまとめています。現在、私の検索可能なフィールドは次のとおりです: 家賃 (最小-最大)、賃貸の種類 (任意、アパート、一軒家)、寝室の数 (任意、1+、2+、3+、4+)

これまでのところ、コードをまとめるのに問題はありません。スケーリングの問題が心配で、ベスト プラクティスと見なされるものを知りたいだけです。また、私がリンクしたサイト (eBay にも非常によく似たものがあります) にある「サイドバー フィルター検索」を複製する方法についてのアドバイスは素晴らしいでしょう。

ここで分岐点にぶつかりました。MySQL クエリで各フィールド フィルターを個別に処理するか、それともテーブル内のすべての項目を呼び出してから PHP でフィルター処理するかです。

    $sql = "SELECT * FROM properties ";

$properties = Property::find_by_sql($sql);
$matched_properties = array();
foreach($properties as $property):
    if ($min_rent <= $property->rent && $property->rent <= $max_rent) {
        $matched_properties[] = $property;
    }
endforeach;

上記のコードは、MySQL の「プロパティ」テーブルからすべてを取得し、プロパティ クラス (基本 CRUD クラス) 配列を作成します。

ごちゃ混ぜに聞こえるかもしれませんが、私の主な質問は、このサイトまたは eBay.comのようなフィルタリングされた検索を複製するにはどうすればよいですか? そして、私は正しい道を進んでいますか?

ありがとうございました

4

1 に答える 1

0

一般的に言えば、PHP で処理するためにデータベースから取得する必要があるデータが少ないほど、優れています。記述しなければならないコードが減り、結果として生じるバグが減り、ソフトウェア スタックを介して転送するデータが減るなどです。より複雑な SQL クエリを作成する方法を読む必要があるかもしれません。以下は、提供されたコード スニペットのより効率的なバージョンです。

$sql = "SELECT * FROM properties WHERE rent >= $min_rent AND rent <= $max_rent";
$matched_properties = Property::find_by_sql($sql);

ただし、セキュリティのために、実数として検証されて$min_rentいることを確認する必要があります。$max_rent(ヒント: 入力を通過させ、is_numeric()この関数が を返す場合はエラーをスローします。) そうしないと、ハッカーがコード インジェクションfalseとして知られることを実行し、"min_rent" または "max_rent" の代わりに SQL クエリ文字列の他のスニペットを入力してクエリを作成する可能性があります。望ましくないことをたくさんする。

U of Iowa サイトのようなフィルタリング メカニズムを実装するには、クリックするとページが更新されるリンクまたはフォームをサイドバーに配置する必要があります。これにはいくつかの方法があります。おそらく最もクールな方法は、AJAX を使用してメイン コンテンツ ウィンドウを自動的に更新することです。アイオワ大学のサイトはこれを行っていないようです。サイドバーのさまざまなフィルタ リンクをクリックすると、メイン コンテンツ領域だけでなくページ全体が更新されるからです。

jQueryは、最小限のコーディングで AJAX を実行できる非常に便利な JavaScript ライブラリです。見てみな。基本的には、フィルター サイドバーを作成して、リンクがクリックされるたびにサーバーに AJAX クエリを送信し、ユーザーが選択したフィルターに基づいて更新されたデータ セットを取得するようにします。結果が AJAX 呼び出しから返されたら、JavaScript や jQuery メソッドを使用して、必要に応じてページにデータを挿入できます。

幸運を!

于 2011-07-14T07:47:00.743 に答える