Необходимо динамически обновлять значение в PHP ассоциативном массиве, используя AJAX без обновления других значений - PullRequest
0 голосов
/ 06 апреля 2020

Я создаю страницу корзины, используя PHP. Мне удалось сохранить элементы, которые человек хочет купить, в переменной сеанса, в которой хранится ассоциативный массив, в котором в качестве ключа указан идентификатор элемента, а в качестве значения - количество элементов:

if (isset($_POST["btnSubmit"])){
        $_SESSION["cart"][$isbn] += 1;
    header("Location:cart.php");
}

Мне также удалось вывести эти товары в корзину, используя foreach l oop и запрос:

            <?php
            $total;
            foreach($_SESSION["cart"] as $product=>$quantity){
                $query = mysqli_query($con,"SELECT * FROM BOOKS WHERE $product LIKE isbn");
                $data = mysqli_fetch_array($query, MYSQLI_ASSOC);
                $title = $data["title"];
                $price = $data["price"];
                $image = $data["image"];
                $author = $data["author"];
                $isbn = $data["isbn"];
                print 
                "<a href='product.php?product=".$isbn."' class='list-group-item list-group-item-action>
                    <img src='".$image.">
                    <h5>".$title."</h5>
                    <h5>£".$price."</h5>
                </a>
                <select name='quant' id='quant'>
                    <option value=''>".$quantity."</option>
                    <option value='1'>1</option>
                    <option value='2'>2</option>
                    <option value='3'>3</option>
                    <option value='4'>4</option>
                    <option value='5'>5</option>
                    <option value='6'>6</option>
                    <option value='7'>7</option>
                    <option value='8'>8</option>
                    <option value='9'>9</option>
                    <option value='10'>10</option>
                </select>";

                $total += $price*$quantity;
            }
            ?>

Как видите, есть раскрывающийся список, который я хочу использовать для изменения номера из предметов, купленных. Мне нужен этот список, чтобы обновить значение указанного ключа c в переменной $ _SESSION ['cart'], а затем динамически умножить это количество на цену для отображения итогового значения. Для этого я использую jQuery.

   <script>
        $(document).ready(function(){
            $("#quant").change(function(){
                $.get('ajax/getTotal.php',{quant:$(this).val()},function(data){
                    $('#total').load(data);
                });
            });
        });
    </script>

Мне нужно знать две вещи:

  1. Как обновить значения в переменной SESSION, не влияя на другие значения ?
  2. Как правильно использовать jQuery для динамического обновления итогов после обновления значений в переменной SESSION?

Я очень ценю вашу помощь. Я действительно новичок в AJAX и я очень потерян.

1 Ответ

0 голосов
/ 07 апреля 2020

Если я правильно вас понял, то, что вы пытаетесь, невозможно. PHP запускается на серверах, создающих HTML. После того, как страница передана клиенту / браузеру, вы больше не можете манипулировать переменной PHP. Вы можете манипулировать HTML с помощью JS, например, чтобы изменить значение элемента DOM, чтобы отобразить общее количество. Однако это будет эффективно только на стороне клиента. Использование jQuery: https://www.w3schools.com/jquery/jquery_dom_set.asp

Для того, чтобы такое изменение вступило в силу на стороне сервера / сеанса (который также обрабатывается на сервере), вам также нужно будет отправить POST запрос к вашему серверу.

Самый простой способ для этого - обернуть ваш isbn и количество в нормальное <form method="POST" action="/pathToSessionUpdatingScript">. Например, используя поле <input> для isbn и <select> для количества. Если вы не хотите нажимать кнопку, вы можете отправить форму, используя JS / JQuery, используя событие изменения, как вы делали выше.

На стороне сервера вы просто обновляете сеанс с помощью другого php сценария

После этого вы можете перенаправить на исходную страницу.

Надеюсь, это поможет!

...