我是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>restaurants页面(当前仅在选择所有字段时有效),如果将其中一个字段留空,则不会显示任何内容。
<?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);
?>任何帮助或想法,我如何才能做到这一点。
发布于 2012-07-27 05:19:00
确保在您的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之后就可以了,这样您就不必担心测试是否需要在where语句前使用AND或不需要,而且它也不会更改查询结果。
发布于 2012-07-27 05:17:32
如果您的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)或转义你的变量值。
https://stackoverflow.com/questions/11678083
复制相似问题