好吧,所以我安静的新编码和我试图做一个汽车租赁系统,我停留在主页上,其中有搜索按钮,这是一个简单的日期选择器,在另一边,我有一个数据库,其中包含了X开始日期和X结束日期的X汽车的其他客户的当前预订。现在这里是棘手的部分。我收集了搜索开始日期&从输入字段中返回日期,并从预订数据库中收集开始和结束日期,我将它们进行比较,以检查输入日期是否大于/小于或等于预订日期,因此我跳过它,因为客户正在输入的搜索日期中查找汽车,如果日期等于或介于两者之间,则跳过此汽车。
现在,假设我认为我已经正确检查了日期,在预订表中,我保存了所选汽车的汽车ID,我想做的是显示输入日期可用汽车的详细信息,现在的问题是,预订和汽车是2个不同的表,我也不知道如何比较或检查,如果选择的汽车是在汽车列表上,它是采取了所有日期输入或它免费。这是我目前卡住的部分。
总的来说,如果我不够清楚,我想做什么。
搜索开始/返回日期-显示在输入日期可用的汽车-如果没有,则不显示。
这是我的代码
<!--Car Cover-->
<?php
if(isset($_POST['submit']))
{
$startDate = $_POST['pickupDate'];
$returnDate = $_POST['returnDate'];
$startDate = new DateTime($startDate);
$returnDate = new DateTime($returnDate);
$startDate = $startDate->format("m-d");
$returnDate = $returnDate->format("m-d");
if(empty($startDate))
{
$_SESSION['ErrorMessage'] = "Pickup Date can't be empty";
TakeTo("index");
}
elseif(empty($returnDate))
{
$_SESSION['ErrorMessage'] = "Return Date can't be empty";
TakeTo("index");
}
elseif($startDate == $returnDate)
{
$_SESSION['ErrorMessage'] = "Cars can only be rented for 1 or more days";
TakeTo("index");
}
elseif($returnDate <= $startDate)
{
$_SESSION['ErrorMessage'] = "Return date cannot be before Pickup Date";
TakeTo("index");
}
echo "Search Start Date : $startDate - Search End Date : $returnDate <br>";
$sql = "SELECT * FROM reservations";
$stmt = $con->query($sql);
$sql2 = "SELECT * FROM cars";
$stmt2 = $con->query($sql2);
while($info = $stmt->fetch())
{
$Start = new DateTime($info['start_date']);
$End = new DateTime($info['end_date']);
$Start = $Start->format("m-d");
$End = $End->format("m-d");
$selectedCar = $info['selected_car'];
while($carInfo = $stmt2->fetch())
{
if($carID == $selectedCar)
{
continue;
}
$carID = $carInfo['id'];
$carName = $carInfo['car_name'];
$product_year = $carInfo['production_year'];
$engine = $carInfo['engine'];
// print( "Start is :$Start - End is :$End - StartDate is :$startDate - Return Date is :$returnDate<br>");
echo "Car Name : $carName - product_year : $product_year - engine : $engine - Start Date : $Start - End : $End - Car ID : $carID<br>";
}
if($Start == $startDate || $End == $returnDate ||$startDate >= $Start && $startDate <= $End || $startDate <= $Start && $startDate <= $End)
{
continue;
}
}
}
?>
1条答案
按热度按时间kmpatx3s1#
假设车辆只能在返回后的第二天提取,您需要:
(传递所需的开始日期和结束日期,格式为YYYY-MM-DD)。
请注意,您无法仅通过分别比较结束和开始来检测两个时间范围的重叠;你将错过一个范围完全在另一个范围内的情况。
左连接查找每辆车的预订,这将使它不可用;where条件排除存在这种预订的汽车。