2016-07-22 108 views
0

請幫忙解決我下面的代碼:間隔日期驗證

$idbo = $_POST['idbo']; $vebo = $_POST['vebo']; 
$title = $_POST['title']; $usbo = $_POST['usbo']; 
$date1 = $_POST['date1']; $date2 = $_POST['date2']; 
$cek = mysql_num_rows(mysql_query("SELECT idbo FROM boca 
     WHERE vebo='$vebo' BETWEEN date1 and date2")); 
if ($cek > 0){ 
    echo "<script>window.alert('Date/Time and venue Already Booked...!!!') 
    window.history.back()</script>"; 

我的問題是: - 如何使(DATE1)開始日期之間肯定預訂,結束日期(DATE2)和室(VEBO)是當範圍date1,date2和房間已經預訂時不會發生衝突...?

例如:

  • 已經預訂:

  • DATE1 = 2016年7月20日8點○○分00秒

  • DATE2 = 2016年7月20日09:00 :00

  • room = Room 1

  • 新的預訂:

  • 日期1 = 2016年7月20日08:30:00

  • 日期2 = 2016年7月20日09:00:00

  • 房=房間1

- 然後警告訊息顯示 「日期/時間和地點已經預定」

回答

0

請檢查以下查詢。 此查詢將檢查用戶的預訂時間是否已用數據庫記錄預訂。

  • 用戶date1 =「2016-07-20 08:30:00」不應該在所有DB日期1和日期2之間。
  • 用戶date2 =「2016-07-20 09:30:00」不應該在所有DB日期1和日期2之間。
    • 所有DB日期1不應該在用戶'2016-07-20 08:30:00'和'2016-07-20 09:30:00'之間。
    • 所有DB日期2不應該在用戶'2016-07-20 08:30:00'和'2016-07-20 09:30:00'之間。

如果用戶DATE1和date2將匹配上面的房間的所有條件,然後只允許預訂的那個房間。

SELECT idbo FROM boca WHERE vebo='$vebo' ('2016-07-20 08:30:00' NOT BETWEEN date1 AND date2) and ('2016-07-20 09:00:00' NOT BETWEEN date1 AND date2) and (date1 NOT BETWEEN '2016-07-20 08:30:00' AND '2016-07-20 09:00:00') and (date2 NOT BETWEEN '2016-07-20 08:30:00' AND '2016-07-20 09:00:00') 
+0

謝謝拉胡爾,但是當我嘗試,仍然衝突.. –

+0

它允許爲同一房間的已預訂日期時間預訂?或者它會引發mysql錯誤?像語法錯誤? –

0

還有如果同一地點有新的一個年底前開始和新的開始後結束記錄的衝突。

換句話說,如果一個在另一個的結束之後開始或者一個在另一個的開始之前結束,則不是衝突。

所以這個查詢返回所有的衝突:

SELECT idbo 
FROM boca 
WHERE vebo = :vebo AND date1 <= :date2 AND date2 >= :date1 

您可以添加LIMIT 1如果你沒有興趣接受所有衝突。

+0

感謝您的建議Amir R,完成您的代碼.. !!! –

+0

@BooSnow如果它工作,請接受答案:) –