我有这个数据库:
+----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ | id | reservedby | date | timestart | duration | endtime | cost | details | status | dateadded | +----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+ | 1 | enerva | 09/29/2013 | 9-10am | 3 | 11-12pm | 1500 | basketball dre! | pending | 0000-00-00 | | 2 | mangkanor | 09/30/2013 | 9-10am | 8 | 5-6pm | 4000 | Sabong Dre! | approved | 0000-00-00 | +----+------------+------------+-----------+----------+---------+------+-----------------+----------+------------+
我在桌子上使用它:
正如您所看到的,9-10am插槽由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的两个索引之间的区别吗?
答案 0 :(得分:0)
从您对我的评论的回答中,它本身不会是一个问题,但您可能必须在不同的列上显示并发预留(在现有代码中处理起来有点棘手)或者只是在同一个{{1 },用<td></td>
分隔。这就是我想要的,有时候有点懒惰:)
针对您的具体问题,只需在<br />
循环中使用数据库中的duration
列,并使用递增计数器:
while
有点过于简单,但它应该可以解决问题。
在您的并发预留问题上,实际上最好更改您的数据库(如果您不想以这种方式工作,则不是'重构'):因为您的所有时段都是1小时,所以只需输入开始时间24小时格式并将您的SQL查询更改为$i = 1;
while ($i <= $row['duration']) {
echo 'Not available';
$i = $i+1;
}
。使用多维数组,您可以将键与开始时间进行比较,并仍然像您一样显示时间段。
修改强> 找到了一种快速帮助的方法。您只需在数据库中以24小时格式输入开始和结束时间,即可使用以下代码。如上所示,我没有时间测试它,但我看不出它会失败的地方。
"SELECT * FROM reservation WHERE date = '$date' ORDER BY timestart;"
答案 1 :(得分:-1)
试试这个
else {
while($row = mysql_fetch_array($result)) {
echo "<h3>Not Available, taken by: $row[reservedby].</h3>";
echo "</td>";
echo "</tr>";
}
}