0

我有这个数据库:

+----+------------+------------+------------+------ ----+----------+------+------+---------- +------------+
| 编号 | 保留者 | 日期 | 时间开始 | 持续时间 | 结束时间 | 成本 | 详情 | 状态 | 添加日期 |
+----+------------+------------+------------+------ ----+----------+------+------+---------- +------------+
| 1 | 能量 | 2013 年 9 月 29 日 | 上午 9 点至 10 点 | 3 | 晚上 11 点至 12 点 | 1500 | 篮球服!| 待定 | 0000-00-00 |
| 2 | 芒卡诺| 2013 年 9 月 30 日 | 上午 9 点至 10 点 | 8 | 下午 5 点至 6 点 | 4000 | 萨邦德雷!| 批准| 0000-00-00 |
+----+------------+------------+------------+------ ----+----------+------+------+---------- +------------+

我在我的桌子上使用它:

如您所见,上午 9 点到 10 点的时段是由 enerva 预留的;该小时的持续时间为 3,即“3 小时”,因此结束时间为晚上 11 点至 12 点。但是,在我的表中,我不能在上午 10 点到 11 点和晚上 11 点到 12 点合并'Not Available, taken by: enerva'字符串。

这是我的代码:

<?php 
if (isset($_GET['checkdate'])) {
    $date = urldecode($_GET['date']);
    echo "<br/><br/><h3>Reservations</h3>";
    echo $date;
    $timearray =  array("8-9am","9-10am","10-11am","11-12pm","12-1pm","1-2pm","2-3pm","3-4pm","4-5pm","5-6pm","6-7pm","7-8pm","8-9pm","9-10pm","10-11pm");
    $tablecolor = 1;
    echo "<table style='width: 90%;'>";
    echo "<tr>";
        echo "<th>";
            echo "Time";
        echo "</th>";
        echo "<th>";
            echo "Status";
        echo "</th>";

    echo "</tr>";
    foreach ($timearray as $timearrays) {
        if($tablecolor %2 == 0) {
            echo "<tr>";
        }
        else {
            echo "<tr style='background-color: rgb(0,100,255); background: rgb(0,100,255);'>";
        }

            echo "<th>";
            echo "<h3>$timearrays</h3>";
            echo "</th>";
            echo "<td>";
            $sql = "SELECT * FROM reservation WHERE date = '$date' AND timestart = '$timearrays'";
            $result = mysql_query($sql);
            if(mysql_num_rows($result) == 0){
                echo "<a href='#'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>";
            }
            else {
                while($row = mysql_fetch_array($result)) {
                    $reservedby = $row['reservedby'];
            }
                echo "<h3>Not Available, taken by: $reservedby.</h3>";
            }
            echo "</td>";
        echo "</tr>";
        $tablecolor++;
    }
    echo "</table>";
}
?>

我猜我必须在持续时间内使用一个计数器,并在循环的每次迭代中将其递减到零。虽然计数器不为零,但表格将显示'not available, reserved by: enerva'字符串;一旦达到零,它将显示'reserve'链接。但我找不到办法做到这一点。

有什么办法吗,或者有其他办法吗?我应该查看indexof数组并找出 starttime 和 endtime 的 2 个索引之间的区别吗?

4

2 回答 2

0

从您对我的评论的回答来看,这本身不是问题,但您可能必须在不同的列上显示并发预订(在现有代码中处理有点棘手)或在同<td></td>一个<br />. 这就是我想要的,有时有点懒惰:)

对于您的特定问题,只需在带有增量计数器duration的循环中使用数据库中的列:while

$i = 1;
while ($i <= $row['duration']) {
  echo 'Not available';
  $i = $i+1;
}

有点过于简单了,但它应该可以解决问题。

在您的并发预订问题上,实际上最好更改您的数据库(如果您不想以这种方式工作,则不要“重构”):因为您所有的时间段都是 1 小时长,只需输入 24 小时内的开始时间格式化并将您的 sql 查询更改为"SELECT * FROM reservation WHERE date = '$date' ORDER BY timestart;". 使用多维数组,您就可以将密钥与开始时间进行比较,并且仍然像您一样显示时间段。

编辑: 找到了一种更快的帮助方式。您只需要在数据库中以 24 小时格式输入开始和结束时间,下面的代码就可以工作。如前所述,我没有时间测试它,但我看不出它会在哪里失败。

<?php 
if (isset($_GET['checkdate'])) {
    $date = urldecode($_GET['date']);
    echo "<br/><br/><h3>Reservations</h3>";
    echo $date;
    $timearray =  array(8,9,10,11,12,13,14,15,16,17,18,19,20,21,22);
    $tablecolor = 1;
    echo "<table style='width: 90%;'>";
    echo "<tr>";
        echo "<th>";
            echo "Time";
        echo "</th>";
        echo "<th>";
            echo "Status";
        echo "</th>";

    echo "</tr>";
    foreach ($timearray as $timearrays) {
        if($tablecolor %2 == 0) {
            echo "<tr>";
        }
        else {
            echo "<tr style='background-color: rgb(0,100,255); background: rgb(0,100,255);'>";
        }

            echo "<th>";
            if ($timearrays == 8) {echo "<h3>8-9am</h3>";}
            //Develop your timeslots here to display as required
            echo "</th>";
            echo "<td>";
            $sql = "SELECT * FROM reservation WHERE date = '$date' AND timestart >= $timearrays AND endtime <= $timearrays;";
            $result = mysql_query($sql);
            if (mysql_num_rows($result) == 0) {
                echo "<a href='#'><h3 style='color: rgb(255,0,0);'>Reserve</h3></a>";
            } else {
                echo "<h3>Not Available, taken by: $reservedby.</h3>";
                while($row = mysql_fetch_array($result)) {
                    echo "<br />" . $row['reservedby'];
                }
            }
            echo "</td>";
        echo "</tr>";
        $tablecolor++;
    }
    echo "</table>";
}
?>
于 2013-09-29T13:45:27.233 回答
-1

尝试这个

else {
    while($row = mysql_fetch_array($result)) {
        echo "<h3>Not Available, taken by: $row[reservedby].</h3>";
        echo "</td>";
        echo "</tr>";
    }            
}
于 2013-09-29T12:47:31.747 回答