gpt4 book ai didi

php - 查看一段时间是否可用

转载 作者:行者123 更新时间:2023-11-29 19:26:27 25 4
gpt4 key购买 nike

我正在尝试制作一个预订系统,但遇到了一个错误。我有一个开始日期和一个结束日期,如果我输入的开始日期和结束日期介于已进行的预订之间,系统会说这是不可能的,但是如果我在已占用的时间段之前和之后输入,系统会接受预订

这是我现在检查的方式

    `$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,则无法预订日期,我对出发日期也这样做

$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());

同样,如果结果大于 0,则无法预订

如果新请求属于已输入的预订,但当到达日期和出发日期早于或晚于系统接受的现有日期时,它可以正常工作

我该如何解决这个问题?

最佳答案

要摆脱它:

  • 请勿使用mysql_*任何新代码中的函数。 mysql 扩展已从当前 PHP 版本中删除(从 PHP 7.0 开始)。请改用 mysqli(注意“i”)或 pdo_mysql。
  • 请勿将任何用户数据直接放入查询中。这将会导致 future 的安全问题(SQL注入(inject))。请改用占位符。

也就是说,您想要的第三个检查是

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 将为 false),或者必须在之前结束> 现有预订开始( :convertedenddate >= ms_booking_startdate 为 false)。

关于php - 查看一段时间是否可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com