如何根据表单选择构建正确的查询?

时间:2013-09-06 03:05:28

标签: php mysql

我正在试图找出如何基于我的表单构建一个正确的查询,我知道如何在必须设置所有表单值时构建查询,但我的表单也有可选值,我可以我真的想弄清楚如何做到这一点。

假设我的表单有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&amp;需要2个,而3&amp; 4是可选的,默认值为“any”。

我的示例表单提交将是:1 =租金| 2 =房子| 3 =任何| 4 =任何

正确的SELECT查询是什么样的?

我到目前为止尝试过:

将$ _POST值放入变量然后用IF检查,如果值为“any”,我就这样做了:

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

所以最终查询看起来像

select id from listings WHERE swimming_pool='$swimming_pool'

哪个不起作用,不确定? OR 1=1是否应该选择任何内容?

我在另一个问题中选择了这个。

1 个答案:

答案 0 :(得分: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子句作为动态数组传递,但这只是一个非常简单的示例,可以帮助您实现这一目标。