You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP多选月份查询仅返回单月结果的代码问题排查

问题原因

代码存在两处核心错误,直接导致多选月份后仅返回单月结果:

  • 表单复选框命名不符合PHP多值接收规则:所有月份复选框均使用name="month",同名单名称的复选框提交时,PHP只会保留最后一个被选中的月份值,其余选中值会被直接丢弃。
  • 后端判断逻辑仅适配单值场景:代码使用$_POST['month'] != 月份值的单值不等判断,即便接收到多值数据也无法完成正确匹配。
修复方案

1. 调整表单复选框name属性

给所有月份复选框的name值增加[]后缀,告知PHP该字段需要接收数组格式的多值,修改后的表单代码如下:

<form action="" method="post">
    <input type="checkbox" id="01" name="month[]" value="01"> Jaanuar<br>
    <input type="checkbox" id="02" name="month[]" value="02"> Veebruar<br>
    <input type="checkbox" id="03" name="month[]" value="03"> Märts<br>
    <input type="checkbox" id="04" name="month[]" value="04"> Aprill<br>
    <input type="checkbox" id="05" name="month[]" value="05"> Mai<br>
    <input type="checkbox" id="06" name="month[]" value="06"> Juuni<br>
    <input type="checkbox" id="07" name="month[]" value="07"> Juuli<br>
    <input type="checkbox" id="08" name="month[]" value="08"> August<br>
    <input type="checkbox" id="09" name="month[]" value="09"> September<br>
    <input type="checkbox" id="10" name="month[]" value="10"> Oktoober<br>
    <input type="checkbox" id="11" name="month[]" value="11"> November<br>
    <input type="checkbox" id="12" name="month[]" value="12"> Detsember<br>
    <input type="submit" value="Otsi" name="submitbutton" >
</form>

2. 重写后端月份匹配逻辑

将原有的单值相等判断替换为适配数组的in_array()判断,同时兼容默认展示当月数据的初始逻辑,补充空值校验避免日期函数报错,修改后的业务代码如下:

for($i=1;$i<=30;$i++){
    $place_of_counselling=get_field('noustamise_koht'.$i.'',$post->ID);
    $date_raw = get_field('noustamise_kuupaev'.$i.'',$post->ID);
    // 空日期字段直接跳过,避免函数报错
    if(empty($date_raw)) continue;
    $date=date_create($date_raw);
    $record_month = date_format($date,"m");
    // 未提交查询时默认展示当月数据
    if(!isset($_POST['month'])){
        if(date('m') != $record_month){
            continue;
        }
    }else{
        // 提交查询时,校验当前记录月份是否在选中的月份列表中
        $selected_months = $_POST['month'];
        if(!in_array($record_month, $selected_months)){
            continue;
        }
    }
    // 后续编写符合条件数据的输出逻辑即可
}

修改完成后,多选月份提交时$_POST['month']会得到类似['01','03','05']的数组格式,循环时只要记录月份在选中数组内就会被保留展示,不会再出现仅返回单月结果的问题。

内容的提问来源于stack exchange,提问作者Margus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:54:18