SQL更新查询无法更新某些时间-PHP预订系统

SQL更新查询无法更新某些时间-PHP预订系统,php,jquery,sql,ajax,Php,Jquery,Sql,Ajax,我使用SQL、php和Javascript/Jquery构建了一个简单的预订系统。我也在使用AJAX。其思想是,向用户显示一个可用时隙列表,当用户选择一个时,所选时隙将自动消失(可用时隙将通过AJAX重新加载),从而对其他用户不可用。每个时隙输出为一个html td元素,其中包含一个链接,该链接将时隙“id”(在数据库中设置)存储为该超链接的属性。单击时隙时,使用AJAX将时隙id发送到下面的php函数。时间段根据其可见性列是零还是存储在数据库中的一来显示 我正在对大量用户进行测试,我注意到,负

我使用SQL、php和Javascript/Jquery构建了一个简单的预订系统。我也在使用AJAX。其思想是,向用户显示一个可用时隙列表,当用户选择一个时,所选时隙将自动消失(可用时隙将通过AJAX重新加载),从而对其他用户不可用。每个时隙输出为一个html td元素,其中包含一个链接,该链接将时隙“id”(在数据库中设置)存储为该超链接的属性。单击时隙时,使用AJAX将时隙id发送到下面的php函数。时间段根据其可见性列是零还是存储在数据库中的一来显示

我正在对大量用户进行测试,我注意到,负责将时隙可用性值更新为零的SQL UPDATE查询经常(可能每二十或三十次预订一次)似乎没有做它应该做的事情,并且该值保持在1,因此偶尔会导致双重预订

否则,一切都会正常工作——我已经尽可能多地与同事测试了应用程序,我无法复制问题,但两次预订显然不是一个选择。有人知道会出什么问题吗

提前感谢您的建议/帮助

    public function makebooking($user, $timeslotUID, $timeslot, $edits) {        

        $username = $user->username;
        $user_fn = $user->displayname;      
        $plgID = $user->plg;    //The 'PLG' is the person who the user is booking an appointment with   

        $user = $edits['user'];
        $currentDate = $edits['date'];

        $json = new JSON();     
        $json->user = stripslashes($user);
        $json->currentDate = $currentDate;

                   //Problem seems to occur here..
        $q1 = " UPDATE plg_timeslots
        SET visible = 0
        WHERE id= '$timeslotUID';" ;

        $res1 = $this->dbcon->query($q1);


        //If the user already has a booking they are rearranging
        $currentBooking =  $this->getBookings($username, 'STU');

        if($currentBooking) {   

                //Reinstate previous timeslot
                $q2 = "UPDATE plg_timeslots
                       SET visible = 1
                WHERE id= '$timeslotUID';" ;        

                $res2 = $this->dbcon->query($q2);

                //Update current booking
                $q3 = "UPDATE bookings 
                            SET timeslot_id = '$timeslotUID',
                            timeslot = '$timeslot',
                            edited_by = '$user',
                            edited_when = '$currentDate'
                            WHERE user_id = '$username' ;";     

                $res3 = $this->dbcon->query($q3);

            } else {   //If no booking is present, make a new booking

                    $q4 = "INSERT INTO bookings (plg_id, user_id, timeslot_id, timeslot, 
                                 edited_by, user_fn, edited_when)
                                 VALUES ('$plgId', '$username' ,'$timeslotUID', 
                                 '$timeslot', '$user', '$user_fn', 
                                 '$currentDate');";   

                    $res4 = $this->dbcon->query($q4);
            } 


            return $json;

    }

SET visible=SET visible=0
此代码有点奇怪虽然这可能不是解决方案,但我是否可以建议您在更新选定的$timeslotUID之前对其执行选择?这是为了确保当用户点击submit按钮时,时间段实际上仍然可用。因为当用户第一次加载页面时,它可能是可用的,但在点击提交按钮之前,他们可能会让它做其他事情。对不起,Magus-我一定是在中复制代码时出错了。我已经在上面修改过了。谢谢你的建议,艾罗,我知道你是从哪里来的,当然值得一试。