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

PHP周期性预约数据库条目生成无限循环问题求助

无限循环问题排查与修复

问题背景

需要创建按7天周期重复的预约数据库条目(如2024-06-06至2024-06-18,生成6日、12日、18日的记录),每个日期生成1-8小时的对应条目,但当前代码触发无限循环,生成大量无效数据。

核心问题分析

  1. for循环条件错误:
    原代码中for ( $i = $fromform->time; $i = $fromform->timelaptopanzahl; $i++ )使用了赋值运算符=而非比较运算符<=,导致循环条件始终为真,无限执行。
  2. redirect位置错误:
    将跳转代码放在foreach循环内部,第一次循环执行后就会直接跳转,后续日期的记录不会被处理。
  3. DatePeriod结束日期兼容:
    PHP的DatePeriod默认不包含结束日期,若需要包含结束日期,需调整构造参数。

修复后的代码

$startDateTime = new DateTime();
$endDateTime = new DateTime();
$dateInterval = new DateInterval('P7D');

// 调整为包含结束日期(若不需要则移除modify('+1 day'))
$datePeriod = new DatePeriod(
    $startDateTime->setTimestamp($fromform->date),
    $dateInterval,
    $endDateTime->setTimestamp($fromform->reservto)->modify('+1 day')
);

foreach ($datePeriod as $dateTime) {
    // 修正for循环条件:使用<=进行范围判断
    for ($i = $fromform->time; $i <= $fromform->timelaptopanzahl; $i++) {
        $newdate = $dateTime->format("Y-m-d");

        $recordtoinsert = new stdClass();
        $recordtoinsert->datum = $newdate;
        $recordtoinsert->ustd = $i;
        $recordtoinsert->resfuer = $fromform->resfuer;

        if ($fromform->room == 1) {
            $buchungfromform = 'Raum: ' . $fromform->raum . ' durch ' . $fromform->resfuer;
            $bgcolor = 'blue';
        } elseif ($fromform->laptopcheck == 1) {
            $buchungfromform = 'Laptop: ' . $fromform->laptop . '(' . $fromform->timelaptopanzahl . ' Stk.)' . ' durch ' . $fromform->resfuer;
            $bgcolor = 'green';
        }
        $recordtoinsert->buchung = $buchungfromform;
        $recordtoinsert->userid = $fromform->userid;
        $recordtoinsert->bgcolor = $bgcolor;

        $DB->insert_record('bs_steinweg', $recordtoinsert);
    }
}

// 将跳转代码移至所有循环执行完毕后
$getsaved = get_string('saved', 'local_buchungssystem');
redirect($CFG->wwwroot . '/local/buchungssystem/bs_sw.php', $getsaved);

额外说明

  • 若不需要包含结束日期,直接移除modify('+1 day')即可。
  • 确认$fromform->time和$fromform->timelaptopanzahl的数值范围为1-8,避免生成超出需求的小时记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 16:46:18