我正在试图找出如何基于我的表单构建一个正确的查询,我知道如何在必须设置所有表单值时构建查询,但我的表单也有可选值,我可以我真的想弄清楚如何做到这一点。
假设我的表单有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
是否应该选择任何内容?
我在另一个问题中选择了这个。
答案 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
子句作为动态数组传递,但这只是一个非常简单的示例,可以帮助您实现这一目标。