php
  • mysql
  • date
  • 2017-02-07 80 views 0 likes 
    0

    我正在嘗試制定預訂系統,並且遇到了一個錯誤。 我有一個開始日期和結束日期,如果我輸入一個日期開始en結束之間的預訂已經使系統說是不可能的,但是如果我輸入一個已經佔用期間之前和之後系統接受預訂看看是否有periode

    這個我現在該怎麼檢查

    `$db_check_result1 = mysql_query("SELECT * FROM ms_bookings WHERE ms_bookings_calid = '$propertyId' AND '$convertedstartdate' BETWEEN ms_bookings_startdate AND ms_bookings_enddate") or die(mysql_error()); 
    

    如果結果大於0,則預訂日期是不可能的,我做的與出發日期SAMEN

    $db_check_result2 = mysql_query("SELECT * FROM ms_bookings WHERE ms_bookings_calid = '$propertyId' AND '$convertedenddate' BETWEEN ms_bookings_startdate AND ms_bookings_enddate") or die(mysql_error()); 
    

    再次,如果結果是更大的N 0則預定是不可能

    如果新的請求屬於它的工作原理罰款已經進入預定範圍內,但是當arrivaldate和出發日期之前和現有的日期後的系統接受

    我怎麼能解決這個問題 - 所有的反饋歡迎

    +0

    請閱讀[我可以問哪些主題](http://stackoverflow.com/help/on-topic) 和[如何提出一個好問題](http://stackoverflow.com/help/how - 問) 和[完美的問題](http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) 以及如何創建[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve) ** SO不是免費的編碼或代碼轉換或調試或教程或庫查找服務 ___我們嘗試修復您的代碼,我們不寫code___ – RiggsFolly

    回答

    0

    把它弄出來的方式:

    • 不要在任何新代碼使用mysql_*功能。 mysql擴展已從當前的PHP版本中刪除(從PHP 7.0開始)。使用mysqli(請注意「我」)或pdo_mysql。
    • 請勿將任何用戶數據直接放入您的查詢中。這導致未來的安全問題(SQL注入)。改用佔位符。

    這就是說,第三檢查你想要的是

    SELECT * FROM ms_bookings 
        WHERE ms_bookings_calid = :propertyId 
        AND (ms_bookings_startdate BETWEEN :convertedstartdate AND :convertedenddate 
         OR ms_bookings_enddate BETWEEN :convertedstartdate AND :convertedenddate) 
    

    但是,可以將所有的檢查合併成一個簡單的查詢:

    SELECT * FROM ms_bookings 
        WHERE ms_bookings_calid = :propertyId 
        AND :convertedstartdate <= ms_bookings_enddate 
        AND :convertedenddate >= ms_bookings_startdate 
    

    爲了不重疊,新預訂必須要麼現有訂票結束(:convertedstartdate <= ms_bookings_enddate將是假的話),要麼必須在之前結束現有預訂開始(:convertedenddate >= ms_booking_startdate爲假)。

    +0

    謝謝 - 現在開始 – Marc

    +0

    如果他們對您有幫助,請接受答案。請參閱http://stackoverflow.com/help/accepted-answer – aferber

    相關問題