勾了三个品牌,地址里出现三段同名参数,后端读出来只剩最后一个值,另外两个条件等于白选了。第一次遇到会往复杂处想,其实漏掉的多是个小前提。

brand[]=a&brand[]=b&brand[]=c
$brands = (array) ($_GET['brand'] ?? []);
$brands = array_map('sanitize_text_field', $brands);

参数解析按单值处理,同名参数后一个覆盖前一个,没有按数组接收,前端传多少都只剩一条,表单和接口都会受这个影响。这一点先确认清楚,后面就不用反复试。

「多选筛选参数」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。

改动写完就同步给同事,下一个人踩同一个坑,成本还是你的。

具体做法是,前端参数名统一带上方括号,明确告诉后端这是数组;后端按数组接收下来,再逐个做一遍过滤和清洗;没有传值时给一个空数组默认,避免报类型错误。

改完照着核一遍,三个品牌条件都生效,勾选变化时结果条数跟着变,不会只剩一个。

作者 9823189