<form method="post" action="search.php">
<select name="Num[]">
<option value="">Select One</option>
<option value="numofpeople">Number of people</option>
</select>
<select name="op[]">
<option value="">Select One</option>
<option value=">4">>4</option>
<option value=">2">>2</option>
</select>
<br />
<select name="num2[]">
<option value="">Select One</option>
<option value="price">Price</option>
</select>
<select name="op2[]">
<option value="">Select One</option>
<option value="<20000"><20000</option>
<option value="<40000"><40000</option>
</select>
<br />
<div class="input-group-btn">
<button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button>
</div>
</form>
以下是我为用户提供下拉列表的代码。它将充当过滤器,通过mysql生成更具体的结果,并且不会获得组合这些下拉值的逻辑。
我希望有类似的东西:
Select * from hotel where price < 40000;
我将在“Where”之后提供所有关键字。
答案 0 :(得分:0)
选择框名称在html中定义为数组,您的要求是用户可以在选择框中选择单个选项。所以你需要更新选择框的名称。你不需要添加&lt;在选择框值中,这些条件在服务器端使用。我已经更正了HTML。
<form method="post" action="">
<select name="Num">
<option value="">Select One</option>
<option value="numofpeople">Number of people</option>
</select>
<select name="op">
<option value="">Select One</option>
<option value="4">>4</option>
<option value="2">>2</option>
</select>
<br />
<select name="num2">
<option value="">Select One</option>
<option value="price">Price</option>
</select>
<select name="op2">
<option value="">Select One</option>
<option value="20000"><20000</option>
<option value="40000"><40000</option>
</select>
<br />
<div class="input-group-btn">
<button class="btn btn-default" type="submit" name="search_btn"><i class="glyphicon glyphicon-search"></i> Search</button>
</div>
</form>
处理选定值的服务器端代码并添加到查询中。
if(isset($_POST['search_btn'])){
$conditons = array();
if(isset($_POST['Num'])){
$conditons[] = '`people` = "'.$_POST['Num'].'"';
}
if(isset($_POST['op'])){
$conditons[] = '`option` < '.$_POST['op'];
}
if(isset($_POST['price'])){
$conditons[] = '`price` = '.$_POST['price'];
}
if(isset($_POST['op2'])){
$conditons[] = '`op2` < '.$_POST['op2'];
}
$conditons = implode(' & ', $conditons);
echo $query = 'select * from hotel where '.$conditons;
}
您可以在条件中更新您的真实字段名称。添加条件后,结果查询将为 -
select * from hotel where `people` = "numofpeople" & `option` < 4 & `op2` < 20000
答案 1 :(得分:0)
这是一个非常通用的例子,我刚刚放在一起。这段代码没有经过测试,但我之前写过这样的代码。
<?php
// Checks to see if post variables are available
if(isset($_POST)) {
// Creates original command
$query = "SELECT * FROM hotel WHERE "
// gets each value from the post
foreach($_POST as $key => $value) {
$query .= $key . "=" . $value . "AND ";
}
// Removes the trailing "AND "
$query = substr($query, 0, -4);
echo $query;
}
如果你需要根据密钥进行切换,你可以在foreach语句中进行切换,检查密钥值。关键是在您发布的HTML中分配的“名称”attr。
此方法也没有清理,因为我没有得到您正在使用的连接类型的响应,但它不应该那么难。如果你需要我写它,那么我会非常乐意这样做。