Foreach循环不在PHP中执行

Foreach循环不在PHP中执行,php,mysql,foreach,Php,Mysql,Foreach,我试图从数据库中提取数据,以在一个看起来像周历的表中显示预订。保留的时间应参加“保留”课程。出于某种原因,我的foreach循环似乎没有执行。按照现在编写代码的方式,表应该只读取每个数据项的“test” $schedule = mysql_query ("SELECT * FROM reservation WHERE location_id = '$reserve' AND year = '$year' AND quarter = '$quarter' AND date_note = 'Quar

我试图从数据库中提取数据,以在一个看起来像周历的表中显示预订。保留的时间应参加“保留”课程。出于某种原因,我的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>";
                }
            }
        }
    }
}
$schedule=mysql\u query(“从预订中选择*,其中位置\u id='$reserve'和年份='$year'和季度='$quarty'和日期\u note='季度'按小时排序\u start ASC”);
foreach($时间为$小时){
$endhour=$hour+30;
foreach($周为$日){
而($sched\u table=mysql\u fetch\u数组($schedule)){
如果($sched_table['day_of_week']==$day){
如果($sched_table['hour_start']==“”){
回声“测试”;
}elseif($sched_table['hour_start']>=$hour&&$sched_table['hour_start']<$endhour){
回声“测试”;
}否则{
回声“测试”;
}
}
}
}
}
上述所有变量均在前面定义为:

$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);
}
$reserve=$\u POST['reserve'];
$year=2013年;
$quarter=“秋季”;
$week=数组(“星期日”、“星期一”、“星期二”、“星期三”、“星期四”、“星期五”、“星期六”);
$time=array();
对于($x=800;$x<2001;$x+=100){
$y=$x+30;
数组推送($time,$x,$y);
}
一些简短的注释--我意识到在foreach循环之前没有设置。我想在确定每行的开始和结束位置之前确保循环正在运行,所以我只放了一个echo“”;和echo“;在整个语句的开头和结尾。这本应该是一个长长的“测试”列表,但什么都没有显示

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


感谢您的帮助。

您应该测试的内容:

  • 确保在输入第一个foreach之前填写了
    $time
    (在该foreach之前添加
  • 确保在输入第二个foreach之前填写了
    $week
    (在该foreach之前添加
  • 确保您的查询返回任何内容。(打印生成的查询字符串,并使用一些数据库软件(如phpmyadmin)执行。)

如果您已经执行了这3个步骤,那么您已经找到了问题,并且可以解决它。

在第一次通过内部foreach循环
mysql\u fetch\u array($schedule)
之后,将始终返回false。如果数据库没有任何星期天8:00的时间表,那么看起来没有运行任何循环


尝试使用
mysql\u data\u seek($schedule,0)
()

PSA重置结果指针:
mysql\u*
函数是可用的。不建议编写新代码,因为这样会阻止您将来升级。取而代之的是,使用或和。每当有人被告知不要使用mysql时,我都会得到一枚五分镍币。。。我越来越富有了!不打印(时间);给你看一个好看的数组?
如果你要回显“:”$小时。":"; 第一次旅行后,你会得到什么?你得到了:800:或::?我希望每次我说这句话时都能得到一分钱。通过使用外部变量构建SQL语句,你将自己完全暴露在SQL注入攻击面前。此外,任何带有单引号的输入数据,如“O'Malley”的名称,都会破坏您的SQL查询。请了解如何使用参数化查询(最好是PDO模块)来保护您的web应用程序。有很多例子可以让你开始,还有很多详细的例子。我希望我能投票给你,但是我没有足够的声誉。我把while环移到前面,把foreach放在里面,它工作得很好。