我目前正在开发一个用户可以订阅类事件的项目。他们将事件显示在日历中,当他们点击它时,执行了一个mysqli查询:
INSERT INTO conduct_user
(user_id, conduct_id)
VALUES
(?, ?)
订阅用户的类事件。这可以正常工作,没有偏差。
然而......当用户第二次点击该事件时,将执行第二个查询,该查询应取消订阅该事件的用户:
public function unsubscribe_from_class_event($userId, $eventId)
{
return "
DELETE FROM conduct_user
WHERE user_id = " . $userId . " AND conduct_id = " . $eventId . "
";
}
上面的函数返回并赋值变量$ sql:
$sql = unsubscribe_from_class_event($userId, $eventId);
它($ sql)依次从连接对象$ conn:
执行$result = $conn->query($sql);
if($result){
return true;
} else {
return false;
}
奇怪的是,每当我从Chrome的Postman执行此操作时,它都能正常工作而不会有任何偏差。
但是,当我从浏览器执行它时,它不会执行,即使在两种情况下都返回“true”。
以下是该项目的回购: https://github.com/mirchev1977-practical-projects/unity-yoga
及以下是带有注释的文件,用于理解查询的执行方式。列举并描述了这些步骤。请按照链接查找说明,以指导您进入请求流程。 [UPDATE !!!]以下是关于github的注释,从0.1开始,0.2 ...... 它将指导您完成代码: https://github.com/mirchev1977-practical-projects/unity-yoga/commit/153fa9c4d9907fd1e38f6a2d7d34649b14e3c457#diff-ca9644a4bcedb12a5bbbf1fbf744e496
以下是相关代码: file:src / angular / calendar / calendar.js 在这里我调用函数 unsubscribeEvent(userId,eventId):
if (indexEvent == -1) {
eventsSubscribedOn.push(eventId);
event.attendees.length++;
} else {
unsubscribeEvent(userId, eventId);
event.attendees.length--;
var inx = eventsSubscribedOn.indexOf(eventId);
eventsSubscribedOn.splice(inx, 1);
}
在同一个文件中是自己的功能。 file:src / angular / calendar / calendar.js
function unsubscribeEvent(userId, eventId) {
var request = DbRequester.unsubscribeEvent(userId, eventId,
CONFIG.SERVER.CALENDAR_CONTROLLER_PATH,
Helpers.getSessionId(),
Helpers.getUserRole());
request
.done(function(data) {
console.log('success');
console.log(data);
if (data === 'exited') {
Helpers.logout();
return;
}
// Helpers.setLocalStorage(data);
})
.fail(function(data) {
console.log("error");
console.log(data);
// Helpers.logout();
});
}
它调用方法
$dbRequester.unsubscribeEvent = function(userId, eventId, serverPath, sessionId, userRole) {
return $.ajax({
url: serverPath,
type: 'POST',
dataType: 'json',
data: {submit_type: 'unsubscribe_event',
user_id: userId,
event_id: eventId,
session_id: sessionId,
user_role: userRole
}
});
}
来自文件src / angular / db_requester.js。
此方法$ dbRequester.unsubscribeEvent 发送ajax请求到php后端文件: SRC / server_files /控制器/ calendar_controller.php 及其方法:
if ( isset($_POST['submit_type'])
&& $_POST['submit_type'] == 'unsubscribe_event'
&& isset($_POST['user_role'])
&& ($_POST['user_role'] == 'admin'
|| $_POST['user_role'] == 'instructor'
|| $_POST['user_role'] == 'user') ) {
//set session
// $post_session = $_POST['session_id'];
// $sessionIsActive = sessionIsActive($post_session, 'not_as_array');
$sessionIsActive = true;
//set session
if ($sessionIsActive != false) {
$calendar = new CalendarObj(Db::getDb(), new Config());
$calendar->unsubscribeEvent($_POST['user_id'], $_POST['event_id']);
} else {
echo 'exited';
}
}
在它中创建了一个CalendarObj src / server_files / models / calendar / calendar_obj.php及其方法
public function unsubscribeEvent($userId, $eventId)
{
$req = new RequesterCalendar();
//Into the class_conduction
$conn = $this->db;
$sql = $req->unsubscribe_from_class_event($userId, $eventId);
$result = $conn->query($sql);
if($result) {
echo 'true';
}
return null;
}
被召唤。
在其中的对象
$req = new RequesterCalendar();
创建并将其分配给$ req变量。
然后
$req->unsubscribe_from_class_event($userId, $eventId)
被称为: 它的代码如下:
public function unsubscribe_from_class_event($userId, $eventId)
{
return "
DELETE FROM conduct_user
WHERE user_id = " . $userId . " AND conduct_id = " . $eventId . "
";
}
分配$ sql变量并在下一行执行mysqli查询:
$sql = $req->unsubscribe_from_class_event($userId, $eventId);
$result = $conn->query($sql);
每当我向Postman提出此请求时 没问题。
如果我从浏览器本身发出请求 - 它不起作用。