首页 > 解决方案 > 带复选框的 PHP MySQL 高级搜索

问题描述

我正在尝试构建使用多个表单字段并相应地调整 MySQL 搜索的搜索逻辑。我的主要问题是处理多个复选框时。下面的内容让我很接近,但由于某种原因,最后我得到了多个“或”。下面以我(nema = '1' OR OR nema = '12' OR OR nema = '4' OR OR )为例。为每个复选框添加了更多 OR。我错过了什么或做得不对?

$rating = mysqli_real_escape_string($db, implode(',', $_POST['rating']));

$q = "SELECT * FROM lekker WHERE height BETWEEN 20 AND 30 ";

if (!empty($rating)) {
    
        $var = explode(',',$rating);
        $rating_count = count($var);

        if($rating_count > 1) {   
            $q .= "AND (";
           foreach($var as $test) {
                $q .= "nema = '$test'";
                for($i=0;$i<$rating_count;$i++) {
                    if($i!=$rating_count-1) {
                        $q .= " OR ";
                    }
                }
            }
            $q .= " )";

        } else {
                $q .= "nema = '$rating'";
        }

}

$q .= " ORDER BY `part` ASC";

这是我想要实现的选择:

SELECT * FROM lekker WHERE height BETWEEN 20 AND 22 AND (nema = '1' OR nema = '12') ORDER BY part ASC

标签: phpmysql

解决方案


不必担心是否需要添加 OR,只需foreach在完成foreach.

if ($rating_count > 1) {
   $q .= "AND (";
   foreach($var as $test) {
        $q .= "nema = '$test' OR ";
   }
   $q .= rtrim($q,' OR ') . ' )';
} else {
        $q .= "nema = '$rating'";
}

推荐阅读