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';
}
所以我正在尝试根据用户的输入创建一个 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';
}