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

咨询表单下拉框联动问题:按医生出诊日禁用不符日期选项

修正后的fetch.php代码
<?php
// 建立数据库连接,采用面向对象方式更易维护
$koneksi = new mysqli('localhost', 'root', '', 'simklinik');

// 检查数据库连接状态
if ($koneksi->connect_error) {
    die("连接失败: " . $koneksi->connect_error);
}

// 处理POST参数,避免未定义索引错误
$id = isset($_POST['id']) ? intval($_POST['id']) : 0;

// 使用预处理语句防范SQL注入
$sql = "SELECT hari_praktek FROM jadwal_praktek WHERE dokter_id = ?";
$stmt = $koneksi->prepare($sql);
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();

// 将医生的出诊日存入数组,统一为英文星期格式(匹配date('l')输出)
$availableDays = [];
while ($row = $result->fetch_assoc()) {
    $availableDays[] = $row['hari_praktek'];
}

$out = '';
// 生成未来21天的日期选项
for ($day = 0; $day < 21; $day++) {
    $timestamp = strtotime("+$day days");
    $currentDate = date('Y-m-d', $timestamp); // 表单提交时的实际日期值
    $displayDate = date('l d F Y', $timestamp); // 展示给用户的日期格式
    $currentDay = date('l', $timestamp); // 当前日期对应的星期

    // 判断当前日期是否在医生出诊范围内
    $isDisabled = !in_array($currentDay, $availableDays) ? 'disabled="disabled"' : '';

    // 拼接option标签,确保引号使用正确
    $out .= "<option value='$currentDate' $isDisabled>$displayDate</option>";
}

echo $out;

// 关闭预处理语句和数据库连接
$stmt->close();
$koneksi->close();
?>
关键修正点说明
  • 正确获取出诊日列表:原代码直接操作查询结果集,需通过循环将所有出诊日存入数组,才能用in_array判断日期是否匹配。
  • 修复语法错误:原代码中$date = date('l', $day)缺少分号,导致PHP解析失败。
  • 修正字符串拼接:原代码的HTML标签拼接存在引号混乱问题,调整后确保option标签的属性和值输出正确。
  • 防范SQL注入:替换直接拼接SQL的写法,使用mysqli预处理语句,避免恶意参数攻击。
  • 优化日期存储:将option的value改为Y-m-d格式的具体日期,而非星期几,方便后续表单提交后处理实际日期。
  • 增加错误处理:添加数据库连接检查,避免连接失败导致的白屏;处理$_POST['id']未定义的情况。
额外适配提示

如果数据库中hari_praktek字段存储的是印尼语星期(如Senin对应Monday),需要添加星期转换逻辑,示例:

$dayMap = [
    'Senin' => 'Monday',
    'Selasa' => 'Tuesday',
    'Rabu' => 'Wednesday',
    'Kamis' => 'Thursday',
    'Jumat' => 'Friday',
    'Sabtu' => 'Saturday',
    'Minggu' => 'Sunday'
];
$availableDays[] = $dayMap[$row['hari_praktek']];

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:05:26