【发布时间】:2015-05-27 08:36:20
【问题描述】:
我已经建立了一个预订系统,用户可以在其中选择时间段输入开始和结束时间并将这些值保存到 MySql 中。现在我发现了一个问题,用户 A 预订了 3-4 的时间段。现在用户 B 想要预订时间段 2.30-4.30。目前它允许用户 B 选择我不想要的时间段。尝试为它编写代码但没有得到想要的结果。 请帮忙!
<?php
session_start();
$host="localhost"; // Host name
$username="root"; // Mysql username
$password=""; // Mysql password
$db_name="testmra"; // Database name
// Connect to server and select databse.
$conn=mysqli_connect($host,$username,$password) or die("cannot connect");
mysqli_select_db($conn,$db_name);
$sname=$_SESSION['usr_name'];
$room = mysqli_real_escape_string($conn, $_POST['txtrname']);
$name = mysqli_real_escape_string($conn, $_POST['txtname']);
$purpose = mysqli_real_escape_string($conn, $_POST['txtpurpose']);
$attendee = mysqli_real_escape_string($conn, $_POST['attendee']);
$date = mysqli_real_escape_string($conn, $_POST['txtdate']);
$btime = mysqli_real_escape_string($conn, $_POST['btime']);
$etime = mysqli_real_escape_string($conn, $_POST['etime']);
$query="SELECT starttime,endtime FROM bookingdetails WHERE date = '$date' AND room='$room' ";
$result=mysqli_query($query);
$num=mysqli_num_rows($result);
$i=0;
while ($i <= $num)
{
$MinValue=mysqli_result($result,$i,"starttime");
$MaxValue=mysqli_result($result,$i,"endtime");
if (($btime < $MaxValue) && ($MinValue < $etime)) {
$overflowed=true;
}
$i++;
}
if ($overflowed)
{
//Error message
header("location:karma.php");
echo '<script language="javascript">';
echo 'alert(" Time Slot is overlapping.Change the time slot")';
echo '</script>';
}
else
{
//Save to database
$sql="INSERT INTO bookingdetails (room,name,purpose,attendee,date,starttime,endtime,status_id)VALUES('$room','$name','$purpose','$attendee','$date','$btime','$etime','2')";
}
if (mysqli_query($conn,$sql))
{
echo "Record added";
}
else
{
die('Error: ' . mysqli_error());
}
?>
【问题讨论】:
-
您可以执行单个 sql 请求来检查您的时隙是否与其他时隙重叠:检查此答案stackoverflow.com/questions/2545947/…
-
@MrShibby。感谢您的链接,但我尝试的逻辑是正确的?
-
好吧,您可以执行单个请求来计算重叠预订,而不是执行您的请求然后循环遍历结果。如果您发现超过 0 则用户需要更改他的时间段。