我正在尝试从数据库中提取数据,以便在看起来像每周日历的表格中显示预订。预约时间应该是“预备”课程。出于某种原因,看起来我的foreach循环没有执行。现在编写代码的方式,表格应该只读取每个数据条目的“test”。
$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循环之前没有设置。我想确定循环在我找到从哪里开始和结束每一行之前都在运行,所以我只是放了一个回声“”;和回声“”;在整个陈述的开头和结尾。这应该是一个很长的“测试”列表,但没有任何显示。
数据库将开始时间存储为“0900”而不是“900”。这会解释为什么循环没有执行?如果是这种情况,我是否必须重新定义$ time,以便它们以字符串形式存在,或者我能够将它们作为值使用。
感谢您的帮助。
答案 0 :(得分:0)
你应该测试的东西:
$time
(在该foreach之前添加<?echo count($time);?>
)$week
(在该foreach之前添加<?echo count($week);?>
)如果您执行了这3个步骤,则表明您已找到问题并可以解决问题。
答案 1 :(得分:0)
第一次通过内部foreach循环后mysql_fetch_array($schedule)
将始终返回false。如果数据库周日8:00没有任何计划,那么看起来没有任何循环运行。
尝试使用mysql_data_seek($schedule, 0)
(mysql_data_seek Documentation)