【问题标题】:mysql query based on checkboxes and input boxes基于复选框和输入框的mysql查询
【发布时间】:2023-03-05 22:17:01
【问题描述】:

所以我试图根据用户的输入创建一个 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 ...;

有人知道怎么做吗?

【问题讨论】:

  • 所以您不能在查询中添加and 字词? o_O
  • 否,因为这样整个字符串都会失败。你会得到: SELECT COUNT(*) FROM testdata AND rd_ki67 = 1 AND rd_myc = 1 AND ...
  • SELECT COUNT(*) FROM testdata WHERE [rd_ki67 = 1 AND] [rd_myc = 1 AND] [rd_field3 = 1][] 中看到一些模式?
  • 谢谢!这行得通,除了最后一部分它会附加一个 AND 并且字符串会失败。对不起!我对编程很陌生!
  • 例如,制作一些substr

标签: php html mysql checkbox input


【解决方案1】:
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';
}

【讨论】:

    猜你喜欢
    • 2014-10-10
    • 1970-01-01
    • 2013-04-25
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    相关资源
    最近更新 更多