0

SQL、php、Javascript/Jquery を使用して簡単な予約システムを構築しました。私もAJAXを使用しています。利用可能なタイムスロットのリストがユーザーに表示され、ユーザーが選択したタイムスロットを選択すると、選択したタイムスロットが自動的に非表示になり (利用可能なタイムスロットが AJAX を介して再度リロードされ)、それ以降のユーザーが利用できなくなるという考え方です。各タイムスロットは、ハイパーリンクの属性としてタイムスロット「id」(データベースに設定) を格納するリンクを含む html td 要素として出力されます。タイムスロットをクリックすると、タイムスロット ID が AJAX を使用して以下の php 関数に送信されます。タイムスロットは、データベースに格納されている可視性列が 0 か 1 かに応じて表示されます。

私は非常に多くのユーザー グループでこれをテストしていますが、時々 (おそらく 20 ~ 30 回の予約ごとに) タイムスロットの可用性の値を 0 に更新する 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;

    }
4

0 に答える 0