首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多个下拉菜单查询结果留空时

多个下拉菜单查询结果留空时
EN

Stack Overflow用户
提问于 2012-07-27 05:09:07
回答 2查看 658关注 0票数 0

我是php的新手,我遇到了一个问题。

我有三个下拉菜单来排序结果,但我想让它,如果他们没有选择任何东西,默认值是SELECT * FROM餐厅,如果只选择了一个下拉菜单来只考虑该字段。

代码语言:javascript
复制
<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页面(当前仅在选择所有字段时有效),如果将其中一个字段留空,则不会显示任何内容。

代码语言:javascript
复制
<?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);
?>

任何帮助或想法,我如何才能做到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-27 05:19:00

确保在您的PHP代码中这样做:(编辑以显示防止注入的一个步骤)

代码语言:javascript
复制
<?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或不需要,而且它也不会更改查询结果。

票数 1
EN

Stack Overflow用户

发布于 2012-07-27 05:17:32

如果您的SQL数据库支持like语句,则应该执行类似的操作。

代码语言:javascript
复制
<?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)或转义你的变量值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11678083

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档