0

すべてのフォーム値を設定する必要がある場合にクエリを作成する方法は知っていますが、フォームにはオプションの値もあり、実際にはできませんこれを行う方法を理解してください。

私のフォームに4つの選択があるとしましょう:

<select name="1" id="1">
    <option>Select Value</option>
    <option value="rent">rent</option>
    <option value="buy">buy</option>
</select>

<select name="2" id="2">
    <option>Select Value</option>
    <option value="house">house</option>
    <option value="flat">flat</option>
</select>

<select name="3" id="3">
    <option>Swimming pool</option>
    <option value="any">any</option>
    <option value="yes">yes</option>
    <option value="no">no</option>
</select>

<select name="4" id="4">
    <option>Furniture</option>
    <option value="any">any</option>
    <option value="yes">yes</option>
    <option value="no">no</option>
</select>

選択 1 と 2 は必須ですが、3 と 4 はオプションで、デフォルト値は「any」です。

私のフォーム送信の例は次のようになります。2 = 家 | 3 = 任意 | 4 = 任意

適切な SELECT クエリはどのようになりますか?

私はこれまでに試しました:

$_POST 値を変数に入れてから、値が「任意」の場合は IF でチェックします。

if($swimming_pool == 'any') { $swimming_pool = "? OR 1=1"; }

したがって、最終的なクエリは次のようになります

select id from listings WHERE swimming_pool='$swimming_pool'

? OR 1=1何かを選択する必要があるかどうかわかりませんか?

別の質問でそれを取り上げました。

4

1 に答える 1

1

彼らが「any」を入力した場合、クエリから完全に除外します。基本的に、データベースに渡す前にクエリ文字列を動的に構築します。このようなもの (データベース クエリで使用するためにすべてのデータが既にクリーンアップされていると仮定します):

$where = '1 = 1'

[...]

if ($swimmingpool != 'any')
    $where .= " and swimming_pool = '$swimmingpool'";

if ($furniture != 'any')
    $where .= " and furniture = '$furniture'";

$querystring = "SELECT * FROM some_table WHERE $where ORDER BY whatever";
// Then pass $querystring when querying the database

PDO を使用している場合は、句を動的配列として渡すことができるはずですがwhere、これはボールを転がすのに役立つ非常に単純な例にすぎません。

于 2013-09-06T03:22:09.750 に答える