Приращение переменной на 1 изменяет значение переменной на 1 в php

Как указано в заголовке, у меня, похоже, возникла проблема с увеличением переменной в моем файле .php-файла, она изменяет значение в базе данных acc_points на 1 после того, как я увеличиваю acc_points на один в переменной выше. Что делает код, это отправить ajax-запрос на php, который затем обновляет данные в базе данных mysql, а затем возвращает данные в js, после чего js будет уведомлять данные.

Приращение каким-то образом изменяет значение acc_points с 5 на 1. Я также подумал, что проблема связана с сеансами. Я просмотрел информацию, но не смог найти решение. Хотелось бы узнать истинную причину этой проблемы. Благодаря!

Вот коды:

.php-файл

<?php

    require 'dbcon.php';

    session_start();

    $acc_points = $_SESSION["acc_points"];
    $acc_id = $_SESSION["acc_id"];

    if(isset($acc_points))
    {
      $acc_points++;
    }

    $result = $con->prepare(" UPDATE `points` SET `acc_points` = ?  WHERE `acc_id` = ? ");
    $result->bind_param("ii", $acc_points, $acc_id);
    $result->execute();

    if($acc_points != null)
      {
          $response = $acc_points;
          echo $_GET['callback'] . '(' . json_encode($response) . ')';
      }
      else
      {
          $response = "'Failed. Please try again.'";
          echo $_GET['callback'] . '(' . json_encode($response) . ')';
      }  
        //connection closed
        mysqli_close ($con);

    ?>

js-файл

$(document).ready(function() {

    $("#qrtest").click(function() {

        {
            $.ajax({
                    type: "GET",
                    url: "http://127.0.0.1/MP/appqrcode.php?callback=?",
                    dataType: 'JSONP',
                    async: false,
                    jsonp : "callback",
                    jsonpCallback: "jsonpcallback",

                    success: function jsonpcallback(response) 
                    {

                        alert(response.acc_points);

                    }
            })
        }
    });
});

javascript,php,mysql,

2

Ответов: 1


2 принят

Первая проблема заключается в том, что вы проверяете значение $ acc_points в приведенном ниже коде, но вы выполняете запрос независимо от того, является ли он нулевым или недействительным

if(isset($acc_points))
{
     $acc_points++;
} // if condition ends here. Insert command will always be executed.

Затем, после того, как команда была выполнена, вы снова проверяете значение

if($acc_points != null)  /// insert has already happend.
{
}

Поэтому вы должны перестроить свой код, но, тем не менее, вам совсем не нужен этот подход. Почему не просто?

 $result = $con->prepare(" UPDATE `points` SET `acc_points` = acc_points+1  WHERE `acc_id` = ? ");

Это увеличивает значение уже в базе данных.

JavaScript, PHP, MySQL,
Похожие вопросы