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

PHP中如何编写条件判断指定医生的预约时段是否可用

预约时段校验逻辑不生效修复方案

核心问题清单

  • 大小写拼写错误:代码中定义医生ID时用的是大写$patient_obj->docId,但参数绑定处写成了小写$patient_obj->docid,PHP对象属性大小写敏感,此处会传入空值,无法查询到对应医生的已有预约记录,导致冲突判断永远不触发。
  • 仅校验单条预约记录:使用fetch()方法只会读取该医生的第一条预约记录,就算该医生存在多段已预约时段,也无法检测到和其他时段的冲突。
  • 未处理空查询结果:如果对应医生暂无任何预约记录,$data为布尔值false,直接执行extract($data)会抛出PHP警告,后续变量也未定义。
  • 时间比较效率低:将时间戳转回字符串再比较,不如直接用时间戳整型比较高效,也能避免日期格式不统一导致的判断异常。

修复后代码

if($_POST){  
    $patient_obj->docId = $_POST['selectDr'];
    $patient_obj->appStart = $_POST['appStart'];
    $patient_obj->appEnd = $_POST['appEnd'];
    $patient_obj->patientId = $_POST['patientId'];

    // 直接转时间戳做比较,不用转回字符串
    $startInputTimestamp = strtotime($patient_obj->appStart);
    $endInputTimestamp = strtotime($patient_obj->appEnd);

    $conflictFlag = false;
    $sql = "SELECT AppStart,AppEnd FROM appointments WHERE docID=?";
    $stmt = $conn->prepare($sql);
    // 修正大小写,用正确的属性名docId
    $stmt->bindParam(1, $patient_obj->docId);
    $stmt->execute();
    // 遍历该医生所有已有预约记录,逐个校验冲突
    while($data = $stmt->fetch(PDO::FETCH_ASSOC)){
        $startDbTimestamp = strtotime($data['AppStart']);
        $endDbTimestamp = strtotime($data['AppEnd']);
        // 时段冲突判断:新时段和已有时段存在重叠就算冲突
        if(($startInputTimestamp >= $startDbTimestamp && $startInputTimestamp < $endDbTimestamp) 
            || ($endInputTimestamp > $startDbTimestamp && $endInputTimestamp <= $endDbTimestamp) 
            || ($startInputTimestamp <= $startDbTimestamp && $endInputTimestamp >= $endDbTimestamp)) {
            $conflictFlag = true;
            break; // 检测到冲突直接跳出循环
        }
    }

    if($conflictFlag){
        echo '<script>alert("change the appointment")</script>';
    }else{
        $patient_obj->addAppointment();
    }
}

补充说明

冲突判断逻辑本身是正确的,覆盖了三种重叠场景:新时段开头落在已有时段内、新时段结尾落在已有时段内、新时段完全包含已有时段,修复上述问题后即可正常触发校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 19:54:06