mysql 基于复选框和输入框的查询

mysql query based on checkboxes and input boxes

所以我正在尝试根据用户的输入创建一个 MySQL 查询。我有很多复选框(大约 50 个),所以我不想一个一个地做。这只是我的几个复选框:

<input type="checkbox" name="check_list[]" value="ki67" />  ki67<br><br>
<input type="checkbox" name="check_list[]" value="myc" />  myc<br><br>
<input type="checkbox" name="check_list[]" value="mta1" />  mta1<br><br>
<input type="checkbox" name="check_list[]" value="mvd/cd34" />  mvd/cd34<br><br>

然后我运行他们通过PHP告诉用户已经检查了什么:

if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
        echo $check . "<br>";
    }
}

现在我想 运行 它们通过一个 MySQL 过程来显示已选择了多少行。这是我的那部分代码:

<?php 
//perform database query
$query = "SELECT COUNT(*) ";
$query .= "FROM testdata ";

if(!empty($_POST['check_list'])) {
    foreach($_POST['check_list'] as $check) {
        $query .= "WHERE rd_$check = 1";
    }
}

然后:

$result = mysqli_query($link, $query);
if (!$result) {
    die("Database query failed.");
}

当我尝试选中多个框时出现问题。我不知道如何将更多内容连接到 $query。该命令必须类似于:

SELECT COUNT(*) FROM testdata WHERE rd_ki67 = 1 AND rd_myc = 1 AND ...;

有人知道怎么做吗?

if(!empty($_POST['check_list'])) {
  foreach($_POST['check_list'] as $check) {
    $query .= "WHERE rd_$check = 1";
  }
}

这会导致查询字符串包含多个 WHERE 子句 (WHERE <i>condition</i> WHERE <i>condition</i> WHERE ...) 这是不正确的。

一个解决方案是让 PHP 的 implode() 函数将子表达式粘合在一起:

if(!empty($_POST['check_list'])) {
  $wheres = array();
  foreach($_POST['check_list'] as $check) {
    $wheres[] = "rd_$check = 1";
  }
  $query .= 'WHERE ' . implode (' AND ', $wheres);
}

另一种结束 AND 链的方法是在末尾添加一个始终为真的表达式:

if(!empty($_POST['check_list'])) {
  $query .= 'WHERE ';
  foreach($_POST['check_list'] as $check) {
    $query .= "rd_$check = 1 AND ";
  }
  $query .= '1';
}