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

如何用JavaScript根据数据库同值预约计数隐藏特定时段选项

时段预约限流功能实现方案

你当前写的前端JS中直接操作MySQL的代码是Node.js服务端语法,无法在浏览器环境运行,需要通过「前端传选中日期给PHP接口→PHP查询数据库返回满额时段→前端隐藏对应时段选项」的逻辑实现需求,具体代码修改如下:

1. 新建PHP后端接口(get_blocked_time.php)

<?php
// 数据库连接配置,改成你自己的实际配置
$host = 'LOCALHOST';
$user = 'root';
$password = '';
$database = 'data';
$conn = new mysqli($host, $user, $password, $database);
if ($conn->connect_error) {
    die(json_encode(['code' => 1, 'msg' => '数据库连接失败']));
}
// 接收前端传的日期参数
$selectDate = $_POST['select_date'] ?? '';
if (empty($selectDate)) {
    die(json_encode(['code' => 1, 'msg' => '日期参数为空']));
}
// 预处理查询防止SQL注入,统计每个时段的预约数
$blockedTimes = [];
$maxCount = 5; // 单时段最大预约数,可自行调整
$stmt = $conn->prepare("SELECT time, COUNT(*) as count FROM tbl_reservations WHERE date = ? GROUP BY time HAVING count >= ?");
$stmt->bind_param("si", $selectDate, $maxCount);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    $blockedTimes[] = $row['time']; // 把满额的时段存入数组
}
$stmt->close();
$conn->close();
// 返回满额时段数据
echo json_encode(['code' => 0, 'data' => $blockedTimes]);
?>

2. 替换前端原有代码

删掉你之前写的那段操作MySQL的JS代码,替换剩余的JS和表单部分为以下内容:

<div class="form-field col-lg-6 ">
    <div class='input-group date' id='datetimepicker1'>
        <span class="input-group-addon">
            <input type='text' class="form-control input-text js-input" id="date" name="date" onchange="return getDate()"/>
        </span>
    </div>
    <label class="label" for="date"></label>
</div>
<div class="form-field col-lg-6">
    <select id="time" style="color:rgb(255,255,255,0.8)" class="input-text js-input" required>
        <option style="display:none" selected>Time</option>
        <option class="time-option" value="16">16:00</option>
        <option class="time-option" value="17">17:00</option>
        <option class="time-option" value="18">18:00</option>
        <option class="time-option" value="19">19:00</option>
        <option class="time-option" value="20">20:00</option>
        <option class="time-option" value="21">21:00</option>
    </select>
</div>
<script>
function getDate(){
    // 获取用户选中的日期
    var selectDate = document.getElementById('date').value;
    if(!selectDate) return;
    // 先重置所有时段为可见状态
    document.querySelectorAll('.time-option').forEach(option => {
        option.style.display = 'block';
    });
    // 发送AJAX请求给PHP接口拿满额时段,复用你之前引入的jQuery依赖
    $.ajax({
        url: 'get_blocked_time.php', // 对应你刚才新建的PHP文件的实际路径
        type: 'POST',
        data: {select_date: selectDate},
        dataType: 'json',
        success: function(res){
            if(res.code !== 0) return;
            // 隐藏满额的时段
            res.data.forEach(blockedTime => {
                document.querySelector('.time-option[value="'+blockedTime+'"]').style.display = 'none';
            });
            // 自动选中第一个可见的时段
            var firstAvailable = document.querySelector('.time-option:not([style*="display: none"])');
            if(firstAvailable) firstAvailable.selected = true;
        }
    })
}
</script>

注意事项

  • 如果你用的是第三方日期选择组件,也可以把触发事件绑定到组件的日期选择回调上,效果一致
  • 后续如果要调整单时段最大预约数,直接修改PHP文件里的$maxCount参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:04