我使用 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;
}