【问题标题】:Multiple Checkbox Values多个复选框值
【发布时间】:2014-01-07 22:58:35
【问题描述】:

我正在修改别人的代码,但遇到了一个我似乎无法解决的问题。在数据库中,我们有商店位置和销售的五种产品。如果某个位置销售产品,则数据库值为“X”。如果不是,则数据库值为空。我正在修改的应用程序有一个搜索框,其中包含一个城市、邮编和五个产品的复选框(这是刚刚添加的部分。)理想情况下,您只能输入一个参数,它会根据您输入/检查的内容,或者您​​可以输入/检查多个参数。 city/zip 位工作正常,但结果仅显示销售所有 5 种产品的位置 - 它无法识别空值。这是我的搜索表单提交功能:

<script type="text/javascript">
    $(function() {
        $(".form #searchBtn").click(function() {
            var searchParameters = "";
            if ($(".form #city").val() != "") {
                if (searchParameters != "") {
                    searchParameters += "&";
                }
                searchParameters += "city=" + $(".form #city").val();
            }
            if ($(".form #zip").val() != "") {
                if (searchParameters != "") {
                    searchParameters += "&";
                }
                searchParameters += "zip=" + $(".form #zip").val();
            }

            if ($(".form #product1").is(':checked')) {
                        if (searchParameters != "") {
                            searchParameters += "&";
                        }
                        searchParameters += "product1=" + "X";
            }
            if ($(".form #product2").is(':checked')) {
                        if (searchParameters != "") {
                            searchParameters += "&";
                        }
                        searchParameters += "product2=" + "X";
            }
            if ($(".form #product3").is(':checked')) {
                                if (searchParameters != "") {
                                    searchParameters += "&";
                                }
                                searchParameters += "product3=" + "X";
            }
            if ($(".form #product4").is(':checked')) {
                                if (searchParameters != "") {
                                    searchParameters += "&";
                                }
                                searchParameters += "product4=" + "X";
            }
            if ($(".form #product5").is(':checked')) {
                                if (searchParameters != "") {
                                    searchParameters += "&";
                                }
                                searchParameters += "product5=" + "X";
            }
    searchParameters = searchParameters.replace(" ","%20");
            $.fn.colorbox({ href: 'locations.aspx?' + searchParameters });
        });
    });
</script>

此代码正在生成一个带有搜索参数的 URL,locations.aspx?city=blah&otherParamsHere。任何想法将不胜感激。

编辑

为了回答你的问题,代码都在前端。以下是生成结果的位置的查询的样子。

<asp:SqlDataSource ID="locations" runat="server" 

        SelectCommand="SELECT * FROM [locations] WHERE (([city] LIKE '%' + @city + '%') AND ([zip] LIKE '%' + @zip + '%') AND ([product1] LIKE '%' + @product1 + '%')  AND ([product2] LIKE '%' + @product2 + '%')  AND ([product3] LIKE '%' + @product3 + '%')  AND ([product4] LIKE '%' + @product4 + '%')  AND ([product5] LIKE '%' + @product5 + '%')) ORDER BY [retailer_name]">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="%" Name="city" 
                QueryStringField="city" Type="String" />
            <asp:QueryStringParameter DefaultValue="%" Name="zip" 
                QueryStringField="zip" Type="String" />
            <asp:QueryStringParameter DefaultValue="%" Name="product1" 
                QueryStringField="product1" Type="String" />  
            <asp:QueryStringParameter DefaultValue="%" Name="product2" 
                QueryStringField="product2" Type="String" />
            <asp:QueryStringParameter DefaultValue="%" Name="product3" 
                QueryStringField="product3" Type="String" />
            <asp:QueryStringParameter DefaultValue="%" Name="product4" 
                QueryStringField="product4" Type="String" />
            <asp:QueryStringParameter DefaultValue="%" Name="product5" 
                QueryStringField="product5" Type="String" />    
        </SelectParameters>
    </asp:SqlDataSource>

编辑

再次修改以包含表格。

                <input type="text" id="city" size="20" />
                <input type="text" id="zip" maxlength="5" size="5" />
                <input type="checkbox" id="product1" value="" />
        <input type="checkbox" id="product2" value="" />
                <input type="checkbox" id="product3" value="" />
                <input type="checkbox" id="product4" value="" />
                <input type="checkbox" id="product5" value="" />
                <input type="button" value="Search" id="searchBtn"/>

【问题讨论】:

  • 可能问题出在您在locations.aspx.cs 中的后端代码中。你能在你的代码后面附加一些包含搜索方法的部分吗?
  • 见上文...如果还有什么我可以告诉你的,请告诉我。
  • 在下面查看我对新 Sql 语句的建议。

标签: c# javascript asp.net tsql sqldatasource


【解决方案1】:

您应该在您的 select 语句 where 子句中在您的产品之间使用 OR,我认为您可以跳过一些括号。您只需要 OR:s 周围的括号,而不需要 AND:s 周围的括号试试这个

SELECT * FROM [locations] 
WHERE [city] LIKE '%' + @city + '%' AND 
      [zip] LIKE '%' + @zip + '%' AND 
      ( [product1] LIKE '%' + @product1 + '%' OR 
        [product2] LIKE '%' + @product2 + '%' OR
        [product3] LIKE '%' + @product3 + '%' OR 
        [product4] LIKE '%' + @product4 + '%' OR 
        [product5] LIKE '%' + @product5 + '%'
      ) 
ORDER BY [retailer_name]

【讨论】:

  • 好些了,但还是不行。它现在所做的是尊重您输入的城市或邮政编码,并返回与这些匹配的任何内容,但不尊重产品框是否被选中。如果您选中一个,但不输入城市或邮编,它会返回整个数据库。
  • 一定要用LIKE比较吗?尝试将其更改为 =(相等比较)。
  • 澄清一下,如果您输入邮政编码并检查产品,它会返回该邮政编码内的所有位置,无论该产品是否已售出。就好像它完全忽略了产品。
  • 使用 = 而不是 LIKE 会使每个查询都不返回任何结果。
  • 好的,请尝试我最后一次尝试更正 where 子句。我认为您应该能够避免 LIKE 比较并改用 = (equal)。
【解决方案2】:

我也会尝试相等的比较。试试这个:

SELECT * FROM [locations] 
WHERE ([city] = @city OR @city = '%') AND 
      ([zip] = @zip OR @zip = '%') AND 
      ( 
          [product1] = @product1 OR @product1 = '%' OR 
          [product2] = @product2 OR @product2 = '%' OR
          [product3] = @product3 OR @product3 = '%' OR 
          [product4] = @product4 OR @product4 = '%' OR 
          [product5] = @product5 OR @product5 = '%'  
      ) 
ORDER BY [retailer_name]

【讨论】:

    【解决方案3】:

    你非常接近!因为你,我才能够戳到它,直到我把它弄对为止。这是我最终的 SQL 语句,它按照我的意图执行:

    SELECT * FROM [locations] 
            WHERE ([city] = @city OR @city = '%') 
            AND ([zip] = @zip OR @zip = '%') 
            AND 
            (
            ([product1] = @product1 OR @product1 = '%') 
            AND ([product2] = @product2 OR @product2 = '%')  
            AND ([product3] = @product3 OR @product3 = '%')  
            AND ([product4] = @product4 OR @product4 = '%')  
            AND ([product5] = @product5 OR @product5 = '%'
            )) 
            ORDER BY [retailer_name]
    

    【讨论】:

      猜你喜欢
      • 2015-02-04
      • 2014-03-28
      • 2020-03-02
      • 2021-10-13
      • 2012-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多