为什么我的pdo mysqli查询在浏览器中没有正常工作,但Postman的行为是否正确?

时间:2017-01-13 16:09:33

标签: php ajax mysqli pdo

我目前正在开发一个用户可以订阅类事件的项目。他们将事件显示在日历中,当他们点击它时,执行了一个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提出此请求时 没问题。

如果我从浏览器本身发出请求 - 它不起作用。

0 个答案:

没有答案