我正在制作一个房间预订系统,用户可以在其中输入预订时间。输入全部通过点击框完成,这部分只是一个检查,以确保人们不会篡改 GET 值来覆盖内容。这是我到目前为止所拥有的:
$Username = mysql_real_escape_string(($_POST['Username']));
$DateBooked = mysql_real_escape_string(($_POST['DateBooked']));
$Room = mysql_real_escape_string(($_POST['Room']));
$StartTime = mysql_real_escape_string(($_POST['StartTime']));
$EndTime = mysql_real_escape_string(($_POST['EndTime']));
$query="SELECT bookingid,StartTime,EndTime
FROM bookings
WHERE DateBooked = '$DateBooked' AND Room='$Room' AND Approved = 1";
$result=mysql_query($query);
$num=mysql_num_rows($result);
$i=1;
while ($i <= $num)
{
$MinValue=mysql_result($result,$i,"StartTime");
$MaxValue=mysql_result($result,$i,"EndTime");
if ((($StartTime >= $MinValue) && ($StartTime <= $maxValue)) ||
(($EndTime >= $MinValue) && ($EndTime <= $maxValue))) {
$overflowed=true;
}
$i++;
}
if ($overflowed)
{
//Error message
}
else
{
//Save to database
}
我的问题如下:
- 14:00-16:00 已保存到数据库
- 尝试预订 13:00-15:00:给出的错误正确。
- 尝试预订 15:00-17:00:未出现错误。
我做错了什么?
谢谢!
最佳答案
您有一些问题:
首先:您的变量 $MaxValue
和 $maxValue
不一致。
第二:mysql_result
的行号从0
开始。
第三:您的比较不正确。
您应该将循环更改为:
$i=0;
while ($i < $num)
{
$MinValue=mysql_result($result,$i,"StartTime");
$MaxValue=mysql_result($result,$i,"EndTime");
if (($StartTime < $MaxValue) && ($MinValue < $EndTime)) {
$overflowed=true;
}
$i++;
}
编辑:您也可以通过其他方式改进代码,例如,一旦确定存在重叠,您就可以停止 while
循环。另外,您可能不想循环遍历当天对给定房间的每个请求。您可以让 SQL 查询返回已批准的请求,其时间与新请求在同一窗口中(允许您删除 while
循环)。
编辑 2:Here有关重叠日期的更多信息。
关于php - 根据数据库中的值检查重叠时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16825251/