php - 检查多行 - PHP 和 MySQL

标签 php html mysql sql

我使用 PHP 循环浏览 HTML 表格中的单元格,为特定单元格着色。 我想为返回 true 的单元格着色:

if ($currentCell >= $reservationStartDayOfMonth && $currentCell <= $reservationEndDayOfMonth) {
    make red
} else {
    make normal color
}

这不是确切的说法,而是它的想法。 我从MySQL 服务器获取reservationEndDayOfMonth 和reservationStartDayOfMonth。 对于 SQL Server 中的每一行,都有一个带有开始日期和结束日期的新预留。连同 id (1...2...3...)

基本上我这个月就得到了预订。当我仅使用一个预订中的数据循环遍历单元格时,它就可以工作。但我的数据库中有很多预订。我需要检查当前单元格是否对应于我拥有的众多预订中的任何一个。

我的代码又长又庞大。它基本上只是一个包含所有检查器和参数的表格。给你:

<table border="1" id="calendar">


<?php

$dk_database = array("Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December");
$dk_month = $dk_database[(int)date("m")-1];

ECHO '<caption><h1 style="color:#554100;">' . $dk_month . '</h1></caption>';



$sqldateStart = sqlRequest("SELECT res_datestart FROM spottrup_reservations WHERE res_id = 1");
$dateStartRaw = mysql_fetch_array($sqldateStart);
$dateStartArray = explode("-", $dateStartRaw[0]);
$dateStartDay = (int)$dateStartArray[2];
$dateStartMonth = (int)$dateStartArray[1];
$dateStartYear = (int)$dateStartArray[0];

$sqldateEnd = sqlRequest("SELECT res_dateend FROM spottrup_reservations WHERE res_id = 1");
$dateEndRaw = mysql_fetch_array($sqldateEnd);
$dateEndArray = explode("-", $dateEndRaw[0]);
$dateEndDay = (int)$dateEndArray[2];
$dateEndMonth = (int)$dateEndArray[1];
$dateEndYear = (int)$dateEndArray[0];

$currentYear = (int)date("y")+2000;
$currentDate = (int)date("d");
$currentMonth = (int)date("m");
$columnsInRow = 7;
$daysInMonth = date("t");

$currentDay = 1;
for ($i=0 ; $i < $daysInMonth ; $i++) {
    ECHO '<tr class="cal">';
    for ($j=0 ; $j < $columnsInRow && $currentDay <= $daysInMonth ; $j++) {
        if($currentDate==$currentDay) {
            if($currentDay>=$dateStartDay && $currentDay<=$dateEndDay && $currentMonth==$dateStartMonth && $currentYear==$dateStartYear) {
                ECHO '<div style="background:blue;height:100%;width:100%text-decoration:none;"><td class="cal"><a href="date_info.php?currentDay=' . $currentDay . '"><h2 style="color:red;">' . $currentDay . '</h2></a></td></div>';
            }else{
                ECHO '<div style="background:#D4BB6A;height:100%;width:100%text-decoration:none;"><td class="cal"><a href="date_info.php?currentDay=' . $currentDay . '"><h2 style="color:red;">' . $currentDay . '</h2></a></td></div>';
            }
        }else{
            if($currentDay>=$dateStartDay && $currentDay<=$dateEndDay && $currentMonth==$dateStartMonth && $currentYear==$dateStartYear) {
                ECHO '<div style="background-color:blue;height:100%;width:100%text-decoration:none;"><td class="cal" style="background-color:#FF8080;"><a href="date_info.php?currentDay=' . $currentDay . '"><h2 style="color:#554100;">' . $currentDay . '</h2></a></td></div>';
            }else{
                ECHO '<div style="background-color:#D4BB6A;height:100%;width:100%text-decoration:none;"><td class="cal"><a href="date_info.php?currentDay=' . $currentDay . '"><h2 style="color:#554100;">' . $currentDay . '</h2></a></td></div>';
            }
        }
        $currentDay++;
    }
    ECHO '</tr>';
}
?>

sqlRequest(字符串);调用一个函数,该函数返回您给出的查询的结果。

最佳答案

这不是最有效的方法,因为有大量查询,但它确实减少了 for 循环,但您可以每天运行一个查询来查看是否有预订。易于实现。

for ($i=0 ; $i < $daysInMonth ; $i++) 
{
   ...
  $query = "Select * from table where currentDate >= startDate and currentDate <= endDate"
   ...
}

关于php - 检查多行 - PHP 和 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26161284/

相关文章:

javascript - HTML文本溢出省略号检测

mysql - 我们可以将电子邮件作为mysql中的唯一键吗?

JavaScript 验证 - document.getElementById 在 Bootstrap 模式中不起作用

php - 使用 anchor 指定链接加载位置

php - 匹配 n 个数字字符以及 1 或 2 个非数字字符的正则表达式

javascript - 遍历元素时在数组中向前移动

javascript - php jquery ajax增量输出

javascript - JavaScript cookie 是在函数内部创建的还是只能在脚本本身内部创建?

php - Mysql 事务,在第二个和第三个查询中都使用 LAST_INSERT_ID()?

MySQL Join 表,如果不满足条件仍然返回 null