Php SQL查询仅显示第一个结果,而不显示阵列数据

Php SQL查询仅显示第一个结果,而不显示阵列数据,php,mysql,Php,Mysql,基本上,我正在构建一个日历页面,显示从我的数据库中提取的月份和月份的日期,然后开始日期-结束日期变量中的任何日期都会以不同的单元格背景颜色显示,而没有指定开始日期或结束日期,我有它的工作在一定程度上,但它只是显示每个月最早的记录,而不是所有的结果 即 而不是像这样展示 `1 2 [3 4 5 6 7 8 9 10] 11 [12 13 14 15 16] 17 18 19 20 ...` 它只是显示[3-10]记录,这是我当前的代码 <table width="100%" cellsp

基本上,我正在构建一个日历页面,显示从我的数据库中提取的月份和月份的日期,然后开始日期-结束日期变量中的任何日期都会以不同的单元格背景颜色显示,而没有指定开始日期或结束日期,我有它的工作在一定程度上,但它只是显示每个月最早的记录,而不是所有的结果

而不是像这样展示

`1 2 [3 4 5 6 7 8 9 10] 11 [12 13 14 15 16] 17 18 19 20 ...` 
它只是显示[3-10]记录,这是我当前的代码

<table width="100%" cellspacing="0">
 <?php
 $cmonth = date('F'); 
 $cyear = date('Y');

 $sql = "SELECT * FROM calendar WHERE year = '$cyear' ORDER BY m_order ASC";
$res = mysql_query($sql);
while ($rows = mysql_fetch_array($res)) {
$month_end = $rows['days_in_month'];
$month_name = $rows['month_name'];
$m_order = $rows['m_order'];

 $sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 $row = mysql_fetch_assoc($res2);

 $stdate = $row['start_date'];
 $s = date_parse_from_format("Y-m-d", $stdate);

 $endate = $row['end_date'];
 $e = date_parse_from_format("Y-m-d", $endate);

 $start = $s['day'];
 $end = $e['day'];

 ?>
 <tr>
 <td width="80px"><?php echo $month_name; ?></td>
 <?php

 foreach(range(1, $month_end) as $days) 
 {
 if(in_array($days, range($start, $end)))
 {
 echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
 }
 else
 echo "<td align=\"center\">" . $days . "</td>";
 }
 ?>
 </tr>

 <?php } ?>
 </table>
我也意识到不使用mysqli的危险,但我只是在本地机器上学习这一点,并计划在函数运行后研究更新的策略,这样我就能知道我的函数是否损坏或编码是否正确


谢谢

您仅从trips表中获取一行结果集。你需要这样的东西才能得到第二个

while ( $row = mysql_fetch_assoc($res2) ) {
    /* process each row */
}
对于其他结果集,您正在正确地执行此操作。请看下面的示例:

您需要遍历结果集行并累积热天,然后只渲染一次热天。大概是这样的:

$sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 while ($row = mysql_fetch_assoc($res2)) {
    $stdate = $row['start_date'];
    $s = date_parse_from_format("Y-m-d", $stdate);

    $endate = $row['end_date'];
    $e = date_parse_from_format("Y-m-d", $endate);

    $start = $s['day'];
    $end = $e['day'];
    $hot_days = array();
    foreach(range(1, $month_end) as $days)  {
        $hot_days[$days] = 0;
        if(in_array($days, range($start, $end))) {
            $hot_days[$days] ++;
        }
    }
}
/* now you have a $hot_days array with nonzero values for interesting days */
?>
<tr>
  <td width="80px"><?php echo $month_name; ?></td>
   <?php
      foreach(range(1, $month_end) as $day)  {
          if($hot_days[$day] > 0) {
              echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
          } 
          else {
              echo "<td align=\"center\">" . $days . "</td>";
          }
      }
     ?>
     </tr>

恕我直言,我没有时间调试这个

尝试使用公共函数从表中读取数据
谢谢,我刚刚做了更改,但现在它不再显示同一个月的两组日期,而是显示两次该月。。感谢您的回复,它修复了月份的显示问题,但不再显示开始-结束数组中日期的显示。
$sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 while ($row = mysql_fetch_assoc($res2)) {
    $stdate = $row['start_date'];
    $s = date_parse_from_format("Y-m-d", $stdate);

    $endate = $row['end_date'];
    $e = date_parse_from_format("Y-m-d", $endate);

    $start = $s['day'];
    $end = $e['day'];
    $hot_days = array();
    foreach(range(1, $month_end) as $days)  {
        $hot_days[$days] = 0;
        if(in_array($days, range($start, $end))) {
            $hot_days[$days] ++;
        }
    }
}
/* now you have a $hot_days array with nonzero values for interesting days */
?>
<tr>
  <td width="80px"><?php echo $month_name; ?></td>
   <?php
      foreach(range(1, $month_end) as $day)  {
          if($hot_days[$day] > 0) {
              echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
          } 
          else {
              echo "<td align=\"center\">" . $days . "</td>";
          }
      }
     ?>
     </tr>
 function db_set_recordset($sql) {
        $qry = mysql_query($sql);
        $row= array();
        while($out = mysql_fetch_assoc($qry)) {

                $row[] = $out;

        }
        return $row;
} 
 $cmonth = date('F'); 
 $cyear = date('Y');

 $sql = "SELECT * FROM calendar WHERE year = '$cyear' ORDER BY m_order ASC";
$res = mysql_query($sql);
while ($rows = mysql_fetch_array($res)) {
$month_end = $rows['days_in_month'];
$month_name = $rows['month_name'];
$m_order = $rows['m_order'];

 $sql2 = "SELECT * FROM trips WHERE start_date LIKE '____-0$m_order-__'      ORDER BY start_date ASC";
 $res2 = mysql_query($sql2);
 $row = db_set_recordset($res2);

 $stdate = $row['start_date'];
 $s = date_parse_from_format("Y-m-d", $stdate);

 $endate = $row['end_date'];
 $e = date_parse_from_format("Y-m-d", $endate);

 $start = $s['day'];
 $end = $e['day'];

 ?>
 <tr>
 <td width="80px"><?php echo $month_name; ?></td>
 <?php

 foreach(range(1, $month_end) as $days) 
 {
 if(in_array($days, range($start, $end)))
 {
 echo "<td style=\"background-color: #ccc;\" align=\"center\">" . $days .    "    </td>";
 }
 else
 echo "<td align=\"center\">" . $days . "</td>";
 }
 ?>
 </tr>

 <?php } ?>
 </table>