如何阻止用户发送同一时段的请求?

时间:2015-04-28 03:50:15

标签: php mysql

我在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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
        <?php echo ucwords($_SESSION[ 'usr_name']); ?>
        </font>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="logout.php" style="text-decoration:none;">Logout</a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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>

1 个答案:

答案 0 :(得分:0)

我会这样做:

如果我们不想或不能使用完整的时间戳和日期和时间,

  • 将HH:MM:SS格式转换为秒(链接:Convert time in HH:MM:SS format to seconds only?

  • 为预订设置数据库表,例如 - id,user_id,start,end,approved_satus

  • 将这些值写入此表

  • 您可以使用基本的数字比较操作来检查某个值是否在范围内,因为我们以秒为单位存储开始和结束时间

你可以使用的东西,而不是在这里编写完整的代码。