【问题标题】:Multiple checkbox search query fetching data from database in php多个复选框搜索查询从 php 中的数据库中获取数据
【发布时间】:2017-07-28 16:31:02
【问题描述】:

我有一个从数据库中获取数据的多复选框搜索查询。下面是代码:

HTML 代码:

<form action="search.php" method="post">
<input type="checkbox" name="cloth_color[]" value="Red" /> Red <br>
<input type="checkbox" name="cloth_color[]" value="Yellow" /> Yellow <br>
<input type="checkbox" name="cloth_color[]" value="Blue" /> Blue <br>
<input type="checkbox" name="cloth_color[]" value="Green" /> Green <br>
<input type="checkbox" name="cloth_color[]" value="Magenta" /> Magenta <br>
<input type="checkbox" name="cloth_color[]" value="Black" /> Black <br>
<input type="checkbox" name="cloth_color[]" value="White" /> White <br>
<input type="submit" value="SEARCH">
</form>

PHP 代码:

<?php
$checkbox1 = $_POST['cloth_color'];  
$chk="";  
foreach($checkbox1 as $chk1)  
   {  
      $chk .= $chk1;
   }

if($_POST['cloth_color'] != "") {
$query = "SELECT * FROM clothings WHERE colorofcloth = '$chk'";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$colorofcloth = $row['colorofcloth'];

    echo 'The cloth with ' . $colorofcloth . ' color';
    echo '<br>';

}
}
?>

现在,如果我从搜索选择框中选择一个选项,我会得到查询。但是,如果我选择两种或更多颜色,我不会得到查询。非常感谢您的帮助。

附:我在 Mysql 查询中确实有多个连接,但这是我被卡住的地方,所以在这里尽可能清楚地提出问题。我还打算在启动此代码之前将 mysql 转换为 mysqli。谢谢你:)

【问题讨论】:

  • if($_POST['cloth_color'] != "") 不要使用它,请与isset() 联系。
  • $colorofcloth 分配在哪里?您在这里使用了错误的变量,根本没有使用数组。编辑:此评论根据原帖stackoverflow.com/revisions/45378397/1
  • 您发布的代码也缺少右括号。
  • 我通过编辑问题和缺少的括号以及@Fred 来分配变量。这些是要处理的事情,问题是我如何通过选择多个选项来获得多个查询。
  • 如果有人编辑了您的 html 页面上的某个值,他们可能会擦除您的整个数据库。您应该使用准备好的语句php.net/manual/en/mysqli.quickstart.prepared-statements.php

标签: php mysql checkbox


【解决方案1】:
<?php
$checkbox1 = $_POST['cloth_color'];  
$chk="";  
foreach($checkbox1 as $chk1)  
   {  
      $chk .= $chk1 . ",";
   }

if($_POST['cloth_color'] != "") {
$query = "SELECT * FROM clothings WHERE colorofcloth IN($chk)";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$colorofcloth = $row['colorofcloth'];

    echo 'The cloth with ' . $colorofcloth . ' color';
    echo '<br>';

}
?>

您可以尝试使用 MySQL 的 IN() 的代码,您可以在其中传递多个分隔值。

希望对你有帮助

【讨论】:

  • 如果我选择“红色”和“蓝色”,则它采用“RedBlue”,如果我在 $chk1 处加上逗号。',';它需要作为“红色,蓝色”,
  • 摆脱 foreach 并使用 $chk = join(',', $checkbox1) 代替。您还需要将每个值用一对单引号括起来。
  • @DhavalChheda 我已经通过一些修改回答了我自己的问题。但是您的 IN 子句对此有很大帮助。非常感谢。
  • @Deadron no sir join 无效。我在定义 $checkbox1 时应用了单引号但没有用。我也试过 $chk = join(",", "'".$checkbox1."'") 也没有用。但是我得到了解决方案并发布了我的问题的答案。它正在工作,所以对我来说很好。谢谢你的努力:)
【解决方案2】:

好的,这就是我所做的。首先因为不熟悉 Mysql 中的 IN 函数,所以得到了@Dhaval 和 @Carlos 的大力帮助。

<?php
$checkbox1 = $_POST['cloth_color'];  
$chk="";  
foreach($checkbox1 as $chk1)  
   {  
      $chk .= "'" . $chk1."', ";
      //This is important as it is not the number it is a word so it should have a single quote if in query we are using double quote or vice versa.
   }
$check_e = rtrim($chk,", ");
//Although i havn't checked in real time if mysql query will take last comma or not but it is a good practice to remove the last comma by rtrim.

if($_POST['cloth_color'] != "") {
$query = "SELECT * FROM clothings WHERE colorofcloth IN($check_e)";
$result = mysql_query($query);
while($row = mysql_fetch_array($result)) {
$colorofcloth = $row['colorofcloth'];

    echo 'The cloth with ' . $colorofcloth . ' color';
    echo '<br>';

}
?>

【讨论】:

    【解决方案3】:

    您可能想要使用的是Mysql IN CLause

    对于这个例子,我假设您对 de IN 子句中的元素使用正确的语法。

    如果您选择红色和蓝色,则正确的语法是您需要用逗号分隔的所有值。

    $chk = 'red, blue'
    

    在查询中使用“IN 子句”

    $query = "SELECT * FROM clothings WHERE colorofcloth = '$chk'";
    

    应该转换成这个。

    $query = "SELECT * FROM clothings WHERE colorofcloth IN ('$chk')";
    

    我对 PHP 了解不多,但对于数据库而言,它应该可以工作。

    让我知道它是否有效。

    【讨论】:

    • 不工作,先生。如果我选择“红色”和“蓝色”,则它采用“RedBlue”,如果我在 $chk1 处加上逗号。',';它需要作为“红色,蓝色”,
    • 我已经对我自己的问题进行了一些修改。但是你的 IN 子句在这方面有很大的帮助。非常感谢。
    • 在我的示例中,我假设您的 $chk 正确。但是检查我发布的链接以查看应该有 $chk 的结构。我会更新帖子的值来解决这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2014-06-19
    • 2020-05-02
    • 2013-10-09
    相关资源
    最近更新 更多