Запускайте запрос INSERT только в том случае, если число из вызова AJAX больше, чем существующее в БД - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь выполнить запрос SQL INSERT, только если pageID (номер), который был получен с помощью вызова AJAX, больше, чем тот, который уже есть в БД. Пользователь по существу нажимает на следующую кнопку, которая показывает правильное содержимое страницы, затем вызывает запрос AJAX POST, который запускает оператор SQL. Буду признателен за любые указания в отношении заявления проверки, если я ударился о кирпичную стену.

Код следующей кнопки:

<a id="next" onclick="savePgID(1,2)">Next</a>

AJAX Звоните:

function savePgID(moduleID, pageID){
    $.ajax({  
        url: "pageAJAX.php",  
        method: "POST",   
        data: {moduleID:moduleID, pageID:pageID},
        dataType: 'json',
      });
  }

страница AJAX:

<?php

session_start();
require 'scripts/db.php';
$studentID = $_SESSION['studentID'];

if(isset($_POST['pageID'])) {
    $moduleID = $_POST['moduleID'];
    $pageID = $_POST['pageID'];

    if() {
        // Here is where I want to check whether using the moduleID and 
        // pageID to check if the pageID in the db is less than the page 
        // user is on. Only if the pageID user is currently on, is 
        // greater than what they have in db, THEN run the below insert.
    } else {
        // INSERT Query into DB, this will update the pageID when user clicks next on module
        $stmt = $conn->prepare ("UPDATE `studentTakingModule` 
                        SET `pageID` = ? 
                        WHERE `studentTakingModule`.`studentID` = ? 
                        AND `studentTakingModule`.`moduleID` = ? ");    

        $stmt->bind_param("iii", $pageID, $studentID, $moduleID);
        $stmt->execute();
        $result = $stmt->get_result();
    }

}
?>

ПРИМЕЧАНИЕ *** После получения ответа Я обновил код до приведенного ниже, который теперь никогда не запускает новый номер pageID INSERT в мою БД (хотя текущий pageID больше, чем номер pageID в базе данных):

<?php
session_start();
    require 'scripts/db.php';
        $studentID = $_SESSION['studentID'];

        if(isset($_POST['pageID']))
        {
            $pageID = $_POST['pageID'];
            $moduleID = $_POST['moduleID'];

            $stmt = $conn->prepare ("SELECT MAX(pageID) as `pageID`, `moduleID` FROM `studentTakingModule` WHERE `studentTakingModule`.`studentID` = ? AND `studentTakingModule`.`moduleID` = ? ");
            $stmt->bind_param("ii", $studentID, $moduleID);
            $stmt->execute();
            $result = $stmt->get_result();

            if(!empty($result)) {
                $dbPageID = $result[0]['pageID']; 
                //$dbPageID2 = $row['pageID']; 

                if($pageID > $dbPageID) {
                    echo "You have reached the update statement";
                    // INSERT Query into DB, this will update the pageID when user clicks next on module
                    $stmt = $conn->prepare ("UPDATE `studentTakingModule` SET `pageID` = ? WHERE `studentTakingModule`.`studentID` = ? AND `studentTakingModule`.`moduleID` = ? ");    
                    $stmt->bind_param("iii", $pageID, $studentID, $moduleID);
                    $stmt->execute();
                    $result = $stmt->get_result();
                }
            }
        }
?>

Ответы [ 2 ]

1 голос
/ 08 апреля 2020

запрашивает и сохраняет последний идентификатор страницы в скрытом элементе ввода

<input id="stored_page_id" type="hidden" value="$pageId">

или

лучше хранить идентификатор страницы в сеансе .

Теперь получите значение этого скрытого ввода и вызовите метод savePgID, только если pageID > stored_page_id, таким образом, вы не будете в конечном итоге вызывать Ajax безо всякой причины, поскольку вы уже поставили проверку.

в противном случае вы будете без необходимости звонить на Ajax запрос, лучше поставить чек на стороне клиента.

1 голос
/ 08 апреля 2020

Я добавил пример проверки состояния, используя следующий код

<?php
.........
// Get the current maximum pageID value for the selected student and module ID 
$stmt = $conn->prepare ("SELECT MAX(pageID) as pageID FROM studentTakingModule
        WHERE `studentTakingModule`.`studentID` = ? 
        AND `studentTakingModule`.`moduleID` = ? ");    

$stmt->bind_param( $studentID, $moduleID);
$stmt->execute();
$result = $stmt->get_result();

if(!empty($result)){
    $pageID = $result[0]['pageID'];

    // If the new pageID is greater than the largest pageId value in DB
    if($pageID < $_POST['pageID']){ 

    }else{

    }
} else { // You can Insert without checking the max pageID value, Since it is a new one

}
.......
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...