我在php中有这个页面,用户可以点击时间段预订房间。现在我发现的问题是假设一个用户1从4到6预订房间。然后另一个用户2来了&从3.30到5请求房间。它接受不应该被允许的请求。请求被发送到管理员并保存在数据库中,即MySQL。
担心的是,如果管理员拒绝user1的请求,那么应该允许user2。但是如果管理员接受user1请求,那么应该给user2一个错误消息或某些东西来停止预订相同的时间段。真的很困惑如何制止这一点。
<?php session_start(); if(isset($_GET[ 'selecteddate'])) { $selecteddate=$_GET[ 'selecteddate']; } else { $selecteddate=date( "Y-m-d"); } ?>
<html>
<head>
<title>MRA</title>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.11.3/themes/smoothness/jquery-ui.css">
<style>
#heading {
text-align: right;
font-size: 25px;
float: right;
margin: 50px 20px;
}
a:hover {
color: #BEBEBC;
}
a {
color: black;
}
#img {
margin: 10px 10px;
}
#td {
border-radius: 15px;
border-style: dotted solid;
}
.name-error,
.meeting-error {
color: red;
margin: 0 10px;
}
#plan {
position: fixed;
left: 50%;
margin-left: -239px;
top: 50%;
margin-top: -150px;
z-index: 10;
background-color: #fff;
padding: 10px;
}
#plan-bg {
width: 100%;
height: 100%;
position: fixed;
background: #000;
opacity: 0.8;
top: 0;
display: none;
z-index: 5;
}
.close {
position: absolute;
top: 5px;
right: 10px;
cursor: pointer;
}
.close:hover {
text-decoration: underline;
}
#datepicker {
width: 40%;
float: left;
}
.calender-date {
padding: 0 10px;
}
#time-slot-msg,
#alert-msg {
position: fixed;
top: 50%;
left: 50%;
background: #fff;
font-size: 25px;
padding: 10px 20px;
margin: -50px 0 0 -184.5px;
display: none;
z-index: 10;
border-radius: 5px;
}
#time-slot-msg p,
#alert-msg p {
font-weight: bold;
}
#time-slot-msg .close,
#alert-msg .close {
font-size: 15px;
right: 20px;
}
</style>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min.js"></script>
<script>
$(document).ready(function() {
var $index;
var systemdate = new Date();
$('.meeting-error').hide();
$(".meeting-timetable tr > td + td").click(function(e) {
if ($(this).hasClass('active')) {
e.preventDefault();
alert('The selected time slot has already been assigned');
} else {
var $thisVal = $(this).prevAll('td:first-child').text();
var hour = $thisVal.substr(0, 2);
var min = $thisVal.substr(3, 3);
var d = new Date("<?php print $selecteddate; ?>");
var n = d.getFullYear();
var m = d.getDate();
var k = d.getMonth();
var userdate = new Date(n, k, m, hour, min, 0);
if (systemdate > userdate) {
alert("Select Time Slot greater than the Current Time");
return;
}
$index = $(this).index();
// Start time.
$(".start-time option").each(function() {
if (($(this).text() === $thisVal)) {
$(this).attr('selected', 'selected');
$(this).prevAll().attr('disabled', 'disabled');
}
});
// Change end time.
$(".end-time option").each(function() {
if (($(this).text() === $thisVal)) {
$(this).next().attr('selected', 'selected');
$(this).attr('disabled', 'disabled');
$(this).prevAll().attr('disabled', 'disabled');
}
});
// Date input select.
var $date = $('.meeting-timetable tr:first-child th').text();
var dateFormat = $.datepicker.formatDate('yy-mm-dd', new Date($date));
$('.date').val(dateFormat);
$('#meeting').val('');
$('.meeting-error').hide();
// Show dialog box.
var _cellIndex = $(this)[0].cellIndex;
var _rowIndex = $(this).closest('tr')[0].sectionRowIndex;
var total_row = $('.meeting-timetable tr').length - 1;
if (_rowIndex == total_row && _cellIndex == 1) {
alert('You cannot select this time slot');
} else $('#plan, #plan-bg').fadeIn();
}
});
// On submit click change background color.
$('.submit-button').click(function(e) {
e.preventDefault();
var selectedValue = $(".start-time option:selected").text(),
selectedEndValue = $(".end-time option:selected").text(),
$name = $('input[name=txtname]').val();
if ($('#meeting').val()) {
$(".meeting-timetable tr > td").each(function() {
if ($(this).text() === selectedValue) {
$(this).parent('tr').addClass('active');
}
if ($(this).text() === selectedEndValue) {
var $parent = $(this).parent('tr').prevUntil('tr.active').addClass('active');
}
// Prev all td selected.
$($parent).each(function() {});
});
}
// Form validation.
if ($('#meeting').val() === '') {
$('.meeting-error').fadeIn();
}
// Grab form values
var formData = {
'txtrname': $('input[name=txtrname]').val(),
'txtname': $('input[name=txtname]').val(),
'txtpurpose': $('input[name=txtpurpose]').val(),
'attendee': $('select[name=attendee]').val(),
'txtdate': $('input[name=txtdate]').val(),
'btime': $('select[name=btime]').val(),
'etime': $('select[name=etime]').val()
};
if ($('#meeting').val().trim()) {
// Ajax form submit.
$.ajax({
type: "POST",
url: "insertkarma.php",
data: formData,
success: function() {
$('#alert-msg').fadeIn();
$('#plan').fadeOut();
}
});
} else {
alert('Please enter the purpose of meeting');
}
});
// on focus function
$('#meeting').focus(function() {
$('.meeting-error').fadeOut();
}).blur(function() {
if (!$(this).val()) {
$('.meeting-error').fadeIn();
}
});
$(".close").click(function() {
$('.pop-up').fadeOut();
});
// Adding calender.
$("#datepicker").datepicker({
minDate: 0,
dateFormat: "yy-mm-dd",
onSelect: function(date) {
var url = "karma.php?selecteddate=" + date;
window.location.assign(url);
}
});
});
</script>
</head>
<body background="a6.jpg">
<a href="homepage.php"><img id="img" src="HITECHLOGO.jpg" width="150px" height="100px"></a>
<h1 align="center" style="position:absolute;top:30px; left:600px;">KARMA<br> (3-SEATER)</h1>
<div id="heading"><a href="homepage.php" style="text-decoration:none;">Home</a>
<?php echo ucwords($_SESSION[ 'usr_name']); ?>
</font> <a href="logout.php" style="text-decoration:none;">Logout</a> <a href="UserManual.pdf" target="_blank" style="text-decoration:none;">Help</a>
</div>
<hr width="100%">
<?php $host="localhost" ; $username="root" ; $password="" ; $db_name="testing" ; $conn=mysqli_connect($host,$username,$password) or die( "cannot connect"); mysqli_select_db($conn,$db_name); $i=0 ; $dateEntry="SELECT `starttime` , `status_id` , `name` , floor(( time_to_sec(`endtime`)-time_to_sec(`starttime`) )/1800) as testing FROM `details` WHERE `date` = '$selecteddate' order by starttime" ; if ($result=mysqli_query($conn,$dateEntry)) { while ($obj=mysqli_fetch_object($result)) { $starttime[$i]=$ obj->starttime; $status[$i] = $obj->status_id; $name[$i] = $obj->name; $testing[$i] = $obj->testing; $i++; } } mysqli_close($conn); ?>
<table border="1" align="right" width="60%" style="border:black;">
<tr>
<td id="td" colspan="3" align="center">
<h1>Click to Book a Time Slot</h1></td>
</tr>
<tr>
<td bgcolor="red" align="center" id="td">Booked</td>
<td id="td" align="center" bgcolor="orange">Requested</td>
<td align="center" id="td">Available</td>
</td>
</tr>
<tr>
<td id="td" colspan="3">| <a href="karma.php"> Today </a> |</td>
</tr>
</table>
<table class="meeting-timetable" border="1" align="right" width="60%" style="border:black;">
<tr>
<th id="td" colspan="2" class="calender-date" align="center">
<?php print $selecteddate; ?>
</th>
</tr>
<tr>
<td id="08:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; " width="10%">08:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="08:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">08:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="09:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">09:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="09:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">09:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="10:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">10:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="10:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">10:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="11:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">11:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="11:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">11:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="12:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">12:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="12:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">12:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="13:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">13:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="13:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">13:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="14:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">14:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="14:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">14:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="15:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">15:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="15:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">15:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="16:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">16:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="16:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">16:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="17:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">17:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="17:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">17:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="18:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">18:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="18:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">18:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="19:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">19:00</td>
<td id="td"></td>
</tr>
<tr>
<td id="19:30:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">19:30</td>
<td id="td"></td>
</tr>
<tr>
<td id="20:00:00" align="center" style="border-radius: 15px;border-style: dotted solid; ">20:00</td>
<td id="td" class="showAlert"></td>
</tr>
</table>
<div id="plan" class="pop-up" style="display :none ">
<span class="close">Close</span>
<form align="center" method="post" id="inform">
<h1 align="center">Meeting Details</h1>
<table>
<tr>
<td><b>Room : </td><td><input type="text" name="txtrname" value="Karma" readonly></td></tr>
<tr><td><b>Name :</td><td><input type="text" name="txtname" readonly value="<?php echo ucwords($_SESSION['usr_name']); ?>" ></td></tr>
<tr><td><b>Purpose of Meeting :</td><td> <input id="meeting" type="text" name="txtpurpose"><span class="meeting-error">Enter the purpose of meeting</span></td></tr>
<tr><td><b>No. of Attendee :</td><td><select name="attendee"><option value="1">1</option><option value="2">2</option><option value="3">3</option></select></td></tr>
<tr><td><b>Date :</td><td> <input class="date" type="text" name="txtdate" readonly value="yyyy/mm/dd"></td></tr>
<tr><td><b>Time : </td><td>Start Time <select class="start-time" name="btime">
<option value="08:00:00">08:00</option>
<option value="08:30:00">08:30</option>
<option value="09:00:00">09:00</option>
<option value="09:30:00">09:30</option>
<option value="10:00:00">10:00</option>
<option value="10:30:00">10:30</option>
<option value="11:00:00">11:00</option>
<option value="11:30:00">11:30</option>
<option value="12:00:00">12:00</option>
<option value="12:30:00">12:30</option>
<option value="13:00:00">13:00</option>
<option value="13:30:00">13:30</option>
<option value="14:00:00">14:00</option>
<option value="14:30:00">14:30</option>
<option value="15:00:00">15:00</option>
<option value="15:30:00">15:30</option>
<option value="16:00:00">16:00</option>
<option value="16:30:00">16:30</option>
<option value="17:00:00">17:00</option>
<option value="17:30:00">17:30</option>
<option value="18:00:00">18:00</option>
<option value="18:30:00">18:30</option>
<option value="19:00:00">19:00</option>
<option value="19:30:00">19:30</option>
<option value="20:00:00" disabled>20:00</option>
</select>
- End Time <select class="end-time" name="etime">
<option value="08:00:00">08:00</option>
<option value="08:30:00">08:30</option>
<option value="09:00:00">09:00</option>
<option value="09:30:00">09:30</option>
<option value="10:00:00">10:00</option>
<option value="10:30:00">10:30</option>
<option value="11:00:00">11:00</option>
<option value="11:30:00">11:30</option>
<option value="12:00:00">12:00</option>
<option value="12:30:00">12:30</option>
<option value="13:00:00">13:00</option>
<option value="13:30:00">13:30</option>
<option value="14:00:00">14:00</option>
<option value="14:30:00">14:30</option>
<option value="15:00:00">15:00</option>
<option value="15:30:00">15:30</option>
<option value="16:00:00">16:00</option>
<option value="16:30:00">16:30</option>
<option value="17:00:00">17:00</option>
<option value="17:30:00">17:30</option>
<option value="18:00:00">18:00</option>
<option value="18:30:00">18:30</option>
<option value="19:00:00">19:00</option>
<option value="19:30:00">19:30</option>
<option value="20:00:00">20:00</option>
</select>
</td></tr>
<tr></tr>
<tr><td></td><td><input class="submit-button" type="submit" value="Submit" </td></tr></table></form></div>
<div id="plan-bg" class="pop-up"></div>
<div id="alert-msg" class="pop-up"><span class="close" onclick="window.location.reload();">Close</span><p>Your request has been sent to admin.</p></div>
<div id="time-slot-msg" class="pop-up"><span class="close">Close</span><p>This time slot is already booked.</p></div>
<div id="datepicker"></div>
<script type="text/javascript">
var jqueryarray = [];
jqueryarray = <?php echo json_encode($starttime); ?>;
var statusarray=[];
statusarray = <?php echo json_encode($status); ?>;
var namearray=[];
namearray = <?php echo json_encode($name); ?>;
var countarray = [];
countarray = <?php echo json_encode($testing); ?>;
var arr = [];
for(i = 0; i < <?php echo $i; ?>; i++)
{
arr[i] = jqueryarray[i];
}
var brr = [];
for(i = 0; i < <?php echo $i; ?>; i++)
{
brr[i] = statusarray[i];
}
var crr=[];
for(i=0; i< <?php echo $i; ?>; i++)
{
crr[i] = namearray[i];
}
var drr=[];
for(i=0; i< <?php echo $i; ?>; i++)
{
drr[i] = countarray[i];
}
var j = 0;
var k=1;
var currentrow;
$('.meeting-timetable tr').each(function() {
if(arr[j] == $(this).find('td').attr('id'))
{
if(brr[j]==1)
{
currentrow=$(this);
for(k=1;k<=parseInt(countarray[j]);k++)
{
currentrow.find('td').next().css('background-color','orange').addClass('active').attr("title",namearray[j]);
currentrow=currentrow.next('tr');
}
}
if(brr[j]==2)
{
currentrow=$(this);
for(k=1;k<=parseInt(countarray[j]);k++)
{
currentrow.find('td').next().css('background-color','red').addClass('active').attr("title",namearray[j]);
currentrow=currentrow.next('tr');
}
}
if(brr[j]==3)
{
$(this).find('td').next().css('background-color', '');
}
if(brr[j]==4)
{
$(this).find('td').next().css('background-color', '');
}
j++;
}
});
</script>
</body>
</html>
答案 0 :(得分:0)
我会这样做:
如果我们不想或不能使用完整的时间戳和日期和时间,
将HH:MM:SS格式转换为秒(链接:Convert time in HH:MM:SS format to seconds only?)
为预订设置数据库表,例如 - id,user_id,start,end,approved_satus
将这些值写入此表
您可以使用基本的数字比较操作来检查某个值是否在范围内,因为我们以秒为单位存储开始和结束时间
你可以使用的东西,而不是在这里编写完整的代码。