我是php的新手,我遇到了问题。
我有三个下拉菜单来排序结果,但我想这样做,如果他们不选择任何东西,默认是SELECT * FROM餐厅,如果只选择一个下拉菜单只考虑该字段。
<form id="form" name="vicinity" method="post" action="restaurant-list.php">
<select class="form-banner" size="1" id="vicinity" name="vicinity">
<option value=""> Select one </option>
<option value="Back Bay">Back Bay</option>
<option value="Beacon Hill">Beacon Hill</option>
<option value="Chinatown">Chinatown</option>
</select><br><br>
<p class="font-2">Search by Cuisines</p>
<select class="form-banner" size="1" id="cuisine" name="cuisine">
<option value=""> Select one </option>
<option value="American">American</option>
<option value="Chinese">Chinese</option>
<option value="Indian">Indian</option>
</select><br><br>
<p class="font-2">Search by Price</p>
<select class="form-banner" size="1" id="price" name="price">
<option value=""> Select one </option>
<option value="$">$ - Cheap</option>
<option value="$$">$$ - Moderate</option>
<option value="$$$">$$$ - Pricey</option>
</select><br><br>
<input type="submit" id="banner-search" value="Search"/>
</form>
餐厅页面(目前仅在选择所有字段时有效)如果一个空白,则不显示任何内容。
<?php
require ("db.php");
$vicinity = $_POST["vicinity"];
$cuisine = $_POST["cuisine"];
$price = $_POST["price"];
$query = "SELECT * FROM restaurant WHERE vicinity=\"$vicinity\" AND cuisine=\"$cuisine\" AND price=\"$price\"";
$result = mysql_query($query);
?>
任何帮助或想法如何实现这一目标。
答案 0 :(得分:1)
当然,在您的PHP代码中执行此操作:(编辑以显示防止注入的一个步骤)
<?php
require ("db.php");
$vicinity = mysql_real_escape_string($_POST["vicinity"]);
$cuisine = mysql_real_escape_string($_POST["cuisine"]);
$price = mysql_real_escape_string($_POST["price"]);
$query = "SELECT * FROM restaurant WHERE 1=1 ";
if($vicinity) $query .= "AND vicinity=\"$vicinity\" ";
if($cuisine) $query .= "AND cuisine=\"$cuisine\" ";
if($price) $query .= "AND price=\"$price\"";
$result = mysql_query($query);
?>
将1 = 1置于其后的位置,这样您就不必担心测试是否需要在where语句前面使用AND而不会更改查询结果。
答案 1 :(得分:0)
如果您的SQL数据库支持LIKE语句,那么应该这样做。
<?php
require ("db.php");
$vicinity = $_POST["vicinity"];
$cuisine = $_POST["cuisine"];
$price = $_POST["price"];
$query = "SELECT * FROM restaurant WHERE vicinity LIKE \"%$vicinity%\" AND cuisine LIKE \"%$cuisine%\" AND price LIKE \"%$price\%"";
$result = mysql_query($query);
?>
请注意,你很容易受到SQL Injection
的攻击为了防止这种情况,你应该检查你的输入是否有任何数据并构建查询,具体取决于它们是否包含某些值,或者不包含某些SQL Framework(可能是Zend_Db)或者转义变量的值。