2012-07-26 17 views
0

我是新来的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); 
?> 

任何帮助或想法我怎么能做到这一点。

+2

我知道你只是一个初学者,但你也可以正确地开始。不要在你的代码中编写你的sql代码。您将很容易受到http://en.wikipedia.org/wiki/SQL_injection的影响。你需要的是一个存储过程 – 2012-07-26 21:19:04

回答

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的地方只是让后让你不用担心测试看看你是否需要AND或不在你的where语句之前,它不会改变你的查询结果。

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框架(Zend_Db也许)或逃避你的变量的值。