LOGO
外贸网站建设,让业务全球可达
0%
新闻中心 网络推广 网站建设 服务器相关 优化推广 首页>新闻>网站建设

PBOOT筛选逻辑上是模糊筛选,在特定条件下出现的BUG

时间:2026-01-19   访问量:0

问题是这样的,在做一个网站筛选的时候,客户的筛选项中是包括:床,床头柜

PBOOT筛选逻辑上是模糊筛选,在特定条件下出现的BUG

由于筛选是模糊匹配的,所以在选择床之后,产品床头柜的产品也会被筛选出来。

通过查询代码发现,在:ParserController.php中的筛选代码中,parserSelectSonRowsLabel的函数方法是:

$where1[] = $filter[0] . " like '%" . escape_string($value) . "%'";

$where2[] = "FIND_IN_SET('" . escape_string($value) . "', a.tags)";

以及

 // 扩展字段数据筛选
                    foreach ($_GET as $key => $value) {
                        if (preg_match('/^ext_[\w\-]+$/', $key)) { // 其他字段不加入
                            $isselect = true;                            
                            if (strpos(get($key, 'vars'), ',') !== false) {
                                $selects = explode(',', get($key, 'vars'));
                                $selects_where = [];
                                foreach ($selects as $key2 => $value2) {
                                    $selects_where[] = FIND_IN_SET_AUTO($value2, "e.".$key);
                                }
                                $where3[] = "(" . implode(' OR ' , $selects_where) . ")";
                            } else {
                                $where3[$key] = get($key, 'vars');
                            }
                        }
                    }


所以我们需要将其修改成精确匹配:

 $where1[] = "FIND_IN_SET('" . escape_string($value) . "', " . $filter[0] . ")";
 $where2[] = "FIND_IN_SET('" . escape_string($value) . "', a.tags)";


以及:

foreach ($_GET as $key => $value) {
    if (preg_match('/^ext_[\w\-]+$/', $key)) {
        $isselect = true;
        $vars = get($key, 'vars');
        if (strpos($vars, ',') !== false) {
            $selects = explode(',', $vars);
            $selects_where = [];
            foreach ($selects as $value2) {
                $selects_where[] = "FIND_IN_SET('" . escape_string($value2) . "', e.".$key.")";
            }
            $where3[] = "(" . implode(' OR ', $selects_where) . ")";
        } else {
            $where3[] = "FIND_IN_SET('" . escape_string($vars) . "', e.".$key.")";
        }
    }
}


修改之后就可以了。

服务咨询
1对1咨询,专业客服为您解疑答惑
联系销售
15899750475
在线咨询
联系在线客服,为您解答所有的疑问
ARE YOU INTERESTED IN ?
感兴趣吗?

有关我们服务的更多信息,请联系项目经理

15899750475 杨先生