首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用具有多个字段的表单查询数据库

使用具有多个字段的表单查询数据库
EN

Stack Overflow用户
提问于 2016-07-29 15:27:37
回答 1查看 34关注 0票数 1

我有一个带有单选按钮的表单,用于从MySQL数据库中的表中获取数据,这是一个表单:

代码语言:javascript
复制
<div class="filter-container">
<p class="filter-title">BTU's</p><div class="filter">
<input type="radio" name="choice-0" id="choice-0" tabindex="0" value="" checked="checked" />
<label for="none">None</label></div><div class="filter">
    <input type="radio" name="choice-0" id="choice-0" tabindex="0" value="100000" />
    <label for="choice-0">100000<span>(10)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-0" id="choice-0" tabindex="0" value="120000" />
    <label for="choice-0">120000<span>(7)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-0" id="choice-0" tabindex="0" value="40000" />
    <label for="choice-0">40000<span>(5)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-0" id="choice-0" tabindex="0" value="60000" />
    <label for="choice-0">60000<span>(11)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-0" id="choice-0" tabindex="0" value="80000" />
    <label for="choice-0">80000<span>(18)</span></label>
    </div></div><div class="filter-container">
<p class="filter-title">Efficiency (AFUE)</p><div class="filter">
<input type="radio" name="choice-1" id="choice-1" tabindex="0" value="" checked="checked" />
<label for="none">None</label></div><div class="filter">
    <input type="radio" name="choice-1" id="choice-1" tabindex="1" value="80%" />
    <label for="choice-1">80%<span>(21)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-1" id="choice-1" tabindex="1" value="92%" />
    <label for="choice-1">92%<span>(8)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-1" id="choice-1" tabindex="1" value="96%" />
    <label for="choice-1">96%<span>(17)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-1" id="choice-1" tabindex="1" value="97%" />
    <label for="choice-1">97%<span>(5)</span></label>
    </div></div><div class="filter-container">
<p class="filter-title">Width</p><div class="filter">
<input type="radio" name="choice-2" id="choice-2" tabindex="0" value="" checked="checked" />
<label for="none">None</label></div><div class="filter">
    <input type="radio" name="choice-2" id="choice-2" tabindex="2" value="14" />
    <label for="choice-2">14<span>(4)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-2" id="choice-2" tabindex="2" value="17.5" />
    <label for="choice-2">17.5<span>(20)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-2" id="choice-2" tabindex="2" value="21" />
    <label for="choice-2">21<span>(19)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-2" id="choice-2" tabindex="2" value="221" />
    <label for="choice-2">221<span>(1)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-2" id="choice-2" tabindex="2" value="24.5" />
    <label for="choice-2">24.5<span>(7)</span></label>
    </div></div><div class="filter-container">
<p class="filter-title">Blower Type</p><div class="filter">
<input type="radio" name="choice-3" id="choice-3" tabindex="0" value="" checked="checked" />
<label for="none">None</label></div><div class="filter">
    <input type="radio" name="choice-3" id="choice-3" tabindex="3" value="Multi-Speed" />
    <label for="choice-3">Multi-Speed<span>(23)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-3" id="choice-3" tabindex="3" value="Multi-Speed ECM" />
    <label for="choice-3">Multi-Speed ECM<span>(7)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-3" id="choice-3" tabindex="3" value="Single Speed" />
    <label for="choice-3">Single Speed<span>(7)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-3" id="choice-3" tabindex="3" value="Variable Speed" />
    <label for="choice-3">Variable Speed<span>(3)</span></label>
    </div><div class="filter">
    <input type="radio" name="choice-3" id="choice-3" tabindex="3" value="Variable Speed ECM" />
    <label for="choice-3">Variable Speed ECM<span>(11)</span></label>
    </div></div>

我需要将任何组合的值与类别常量相匹配。这就是我用来处理表单的方法:

代码语言:javascript
复制
<?php
if('POST' == htmlspecialchars($_SERVER['REQUEST_METHOD']) ){

    $cat_id = 4001;

    if ( isset($_POST['choice-0']) ) {
        $choice0 = $_POST['choice-0'];
    }

    if ( isset($_POST['choice-1']) ) {
        $choice1 = $_POST['choice-1'];
    }

    if ( isset($_POST['choice-2']) ) {
        $choice2 = $_POST['choice-2'];
    }

    if ( isset($_POST['choice-3']) ) {
        $choice3 = $_POST['choice-3'];
    }

    if ( isset($_POST['choice-4']) ) {
        $choice4 = $_POST['choice-4'];
    }

    if ( isset($_POST['choice-5']) ) {
        $choice5 = $_POST['choice-5'];
    }

    if ( isset($_POST['choice-6']) ) {
        $choice6 = $_POST['choice-6'];
    }

    $query = $connect->query( "SELECT * FROM PRODUCTS WHERE PR_ProductCategory='$cat_id' AND (PR_UDSearch0='$choice0' OR PR_UDSearch1='$choice1' OR PR_UDSearch2='$choice2' OR PR_UDSearch3='$choice3' OR PR_UDSearch4='$choice4' OR PR_UDSearch5='$choice5' OR PR_UDSearch6='$choice6')" );

    var_dump($query);

}

?>

我做了各种各样的SELECT语句来获得没有运气的数据(包括上面的那个)。我不想要火柴的组合。为了我的需要,我需要一个或另一个火柴,而不是两者。换句话说,我需要使用cat_id作为常量,然后匹配从单选按钮中获得的任何其他组合(选择1,或选择1和2,选择2和4,或选择3等等)。我一定是把它设置错了查询或其他什么东西。我在谷歌上搜索了好几天,还没搞清楚。谢谢!!

更新:我现在正在尝试根据以下选项创建SELECT语句:

代码语言:javascript
复制
$cat_id = 4001;
                    $query_str = "SELECT * FROM PRODUCTS WHERE PR_ProductCategory='$cat_id' AND (";

                    if ( isset($_POST['choice-0'] ) ) {
                        $choice0 = $_POST['choice-0'];
                        $query_str .= "PR_UDSearch0='$choice0'";
                    }

                    if ( isset($_POST['choice-1'] ) ) {
                        $choice1 = $_POST['choice-1'];
                        $query_str .= "OR PR_UDSearch0='$choice1'";
                    }

                    if ( isset($_POST['choice-2'] ) ) {
                        $choice2 = $_POST['choice-2'];
                        $query_str .= "OR PR_UDSearch0='$choice2'";
                    }

                    if ( isset($_POST['choice-3'] ) ) {
                        $choice3 = $_POST['choice-3'];
                        $query_str .= "OR PR_UDSearch0='$choice3'";
                    }

                    if ( isset($_POST['choice-4'] ) ) {
                        $choice4 = $_POST['choice-4'];
                        $query_str .= "OR PR_UDSearch0='$choice4'";
                    }

                    if ( isset($_POST['choice-5'] ) ) {
                        $choice5 = $_POST['choice-5'];
                        $query_str .= "OR PR_UDSearch0='$choice5'";
                    }

                    if ( isset($_POST['choice-6'] ) ) {
                        $choice6 = $_POST['choice-6'];
                        $query_str .= "OR PR_UDSearch0='$choice6'";
                    }

                    $query_str .= ")";
                    $query = $connect->query( $query_str );

我认为它更接近,但如果没有选择某些内容,则为空。

上一次更新:我得到了一些帮助。我构建了基于选择的SELECT语句,并使用它来获得结果。这是我的全部解决方案:

代码语言:javascript
复制
    if('POST' == htmlspecialchars($_SERVER['REQUEST_METHOD']) ){

$cat_id = 4001;
$query_str = "SELECT * FROM PRODUCTS WHERE PR_ProductCategory='$cat_id' ";

if ( isset($_POST['choice-0']) ) {
    $choice0 = $_POST['choice-0'];

    if ( $choice0 ) {
        $query_str .= "AND PR_UDSearch0='$choice0'";
    }
}

if ( isset($_POST['choice-1']) ) {
    $choice1 = $_POST['choice-1'];

    if ( $choice1 ) {
        $query_str .= " AND PR_UDSearch1='$choice1'";
    }
}

if ( isset($_POST['choice-2']) ) {
    $choice2 = $_POST['choice-2'];

    if ( $choice2 ) {
        $query_str .= " AND PR_UDSearch2='$choice2'";
    }
}

if ( isset($_POST['choice-3']) ) {
    $choice3 = $_POST['choice-3'];

    if ( $choice3 ) {
        $query_str .= " AND PR_UDSearch3='$choice3'";
    }
}

if ( isset($_POST['choice-4']) ) {
    $choice4 = $_POST['choice-4'];

    if ( $choice4 ) {
        $query_str .= " AND PR_UDSearch4='$choice4'";
    }
}

if ( isset($_POST['choice-5']) ) {
    $choice5 = $_POST['choice-5'];

    if ( $choice5 ) {
        $query_str .= " AND PR_UDSearch5='$choice5'";
    }
}

if ( isset($_POST['choice-6']) ) {
    $choice6 = $_POST['choice-6'];

    if ( $choice6 ) {
        $query_str .= " AND PR_UDSearch6='$choice6'";
    }
}

$query_str .= "";
$query = $connect->query( $query_str );

while ($row = mysqli_fetch_array($query)) {

$sku    = $row[PR_SKU];
$img    = $row[PR_URLofThumb];
$desc   = $row[PR_Description];
$price  = $row[PR_UnitPrice];

echo '<div class="box">
<div class="box-image">
<a href="/cgi-bin/commerce.cgi?preadd=action&key=' . $sku . '"><img src="' . $img . '" /></a>
</div>
<p>Price:' .  $price . '</p>
<a href="/cgi-bin/commerce.cgi?preadd=action&key=' . $sku . '">' . $desc . '</a>
</div>';

 }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-29 18:03:49

看来,您可能必须根据选择构建查询语句。这个代码就能做到这一点。

代码语言:javascript
复制
$cat_id = 4001;
$choices = [];

if(!empty($_POST['choice-0']))
{
  $choices[] = "PR_UDSearch0='{$_POST['choice-0']}'";
}
if(!empty($_POST['choice-1']))
{
  $choices[] = "PR_UDSearch1='{$_POST['choice-1']}'";
}
if(!empty($_POST['choice-2']))
{
  $choices[] = "PR_UDSearch2='{$_POST['choice-2']}'";
}
if(!empty($_POST['choice-3']))
{
  $choices[] = "PR_UDSearch3='{$_POST['choice-3']}'";
}
if(!empty($_POST['choice-4']))
{
  $choices[] = "PR_UDSearch4='{$_POST['choice-4']}'";
}
if(!empty($_POST['choice-5']))
{
  $choices[] = "PR_UDSearch5='{$_POST['choice-5']}'";
}
if(!empty($_POST['choice-6']))
{
  $choices[] = "PR_UDSearch6='{$_POST['choice-5']}'";
}

$additional_where = "";
$count = count($choices);

if($count > 0)
{
  if($count > 1)
  {
    $i = 0;
    $additional_where = " AND (";
    foreach($choices as $choice)
    {
      $or = ++$i < $count ? " OR " : ""; //adding OR where needed
      $additional_where .= $choice.$or;
    }
    $additional_where .= ")";
  }
  else
  {
    $additional_where = " AND $choices[0]";
  }
}
$sql = "SELECT * FROM PRODUCTS WHERE PR_ProductCategory='$cat_id'".$additional_where;

var_dump($sql);
//$query = $connect->query($sql);
//var_dump($query);

通过使用!empty($_POST[...,您可以确认设置了$_POST项,它不是NULL,而不是一次都是空字符串。

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

https://stackoverflow.com/questions/38662441

复制
相关文章

相似问题

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