php
  • mysql
  • date
  • 2017-02-07 53 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

    相关问题