如何在mysql查询中组合几个下拉列表值?

时间:2016-11-27 03:24:37

标签: php mysql

   <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”之后提供所有关键字。

2 个答案:

答案 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。

此方法也没有清理,因为我没有得到您正在使用的连接类型的响应,但它不应该那么难。如果你需要我写它,那么我会非常乐意这样做。