Foreach循环不在PHP中执行

时间:2013-09-10 18:15:10

标签: php mysql foreach

我正在尝试从数据库中提取数据,以便在看起来像每周日历的表格中显示预订。预约时间应该是“预备”课程。出于某种原因,看起来我的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,以便它们以字符串形式存在,或者我能够将它们作为值使用。

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

你应该测试的东西:

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

如果您执行了这3个步骤,则表明您已找到问题并可以解决问题。

答案 1 :(得分:0)

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

尝试使用mysql_data_seek($schedule, 0)mysql_data_seek Documentation

重置结果指针