0

我正在制作一个房间预订系统,用户可以在其中输入预订时间。输入都是通过单击框完成的,这部分只是一个检查,以确保人们不会篡改 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 预订:没有给出错误。

我究竟做错了什么?

谢谢!

4

1 回答 1

0

你有几个问题:

第一:你有不一致的变量$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是有关重叠日期的更多信息。

于 2013-05-29T23:58:42.717 回答