0

我正在尝试从数据库中提取数据以在看起来像周历的表中显示预订。保留时间应采取“保留”类。出于某种原因,我的 foreach 循环似乎没有执行。现在编写代码的方式,表应该只是读取每个数据条目的“测试”。

$schedule = mysql_query ("SELECT * FROM reservation WHERE location_id = '$reserve' AND year = '$year' AND quarter = '$quarter' AND date_note = 'Quarter' ORDER BY hour_start ASC");

foreach ($time as $hour) {
    $endhour = $hour + 30;
    foreach ($week as $day) {
        while ($sched_table = mysql_fetch_array($schedule)) {
            if ($sched_table['day_of_week'] == $day) {
                if ($sched_table['hour_start'] == "") {
                    echo "<td>test</td>";
                } elseif ($sched_table['hour_start'] >= $hour && $sched_table['hour_start'] < $endhour) {
                    echo "<td class='reserve'>test</td>";
                } else {
                    echo "<td>test</td>";
                }
            }
        }
    }
}

上面的所有变量都在前面定义为:

$reserve = $_POST['reserve'];
$year = 2013;
$quarter = "Fall";

$week = array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
$time = array();
for ($x = 800; $x < 2001; $x += 100) {
    $y = $x + 30;
    array_push($time, $x, $y);
}

一些快速说明——我意识到在 foreach 循环之前还没有设置。我想在确定每一行的开始和结束位置之前确保循环正在运行,所以我只放了一个 echo ""; 并回显“”;在整个语句的开头和结尾。这应该列出一长串“测试”,但没有显示任何内容。

数据库将开始时间存储为“0900”而不是“900”。这能解释为什么循环没有执行吗?如果是这种情况,我是否必须重新定义 $time 以便它们作为字符串存在,或者我是否能够将它们作为一个值使用。

谢谢您的帮助。

4

2 回答 2

0

你应该测试的东西:

  • 确保$time在进入第一个 foreach 之前填充(<?echo count($time);?>在该 foreach 之前添加)
  • 确保$week在进入第二个 foreach 之前填充(<?echo count($week);?>在该 foreach 之前添加)
  • 确保您的查询返回任何内容。(将生成的查询字符串打印出来,用phpmyadmin等数据库软件执行。)

如果您执行了这 3 个步骤,您就发现了问题,并且可以解决它。

于 2013-09-10T18:56:18.737 回答
0

第一次通过内部 foreach 循环mysql_fetch_array($schedule)后将始终返回 false。如果数据库没有周日 8:00 的任何时间表,那么看起来好像没有运行任何循环。

尝试使用mysql_data_seek($schedule, 0)mysql_data_seek 文档)重置结果指针

于 2013-09-10T19:05:55.397 回答