我正在製作一個客房預訂系統,用戶輸入預訂時間。輸入全部通過點擊框完成,這部分只是一個檢查,以確保人們不會篡改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'不一致嗎? – rtcherry
如果日期/時間存儲爲實際日期時間或時間戳,則可以輕鬆查詢單個查詢中重疊條目的計數。通過兩個事件A和B,可以發現只有'startA <= endB AND startB <= endA'的重疊。這將檢查全部5個重疊條件。 –