PHP не сохраняет значения массива $ _SESSION - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в php, и сейчас у меня проблема при хранении данных в массиве $_SESSION. У меня есть индексная страница, которая извлекает информацию из файла XML и отображает каждый продукт из файла XML на странице, каждый с кнопкой для добавления в корзину. При нажатии кнопки я отправляю XMLHttpRequest с идентификатором продукта, который хочу добавить в массив $_SESSION.

Это главная страница:

function check_avi(id){
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
      var available = this.responseText;
      if (available == "True") {
      alert("Add to the cart successfully.");
    } else {
      alert("Sorry, the car is not available now. Please try other cars.");
    }
  }
};
xhttp.open("GET", "add_delete_session.php?action=add&id="+id, true);
xhttp.send();

В php я открываю xml, извлекаю информацию и сохраняю ее в массив, затем я копирую информацию в $_SESSION[#number of product]
Что происходит, так это то, что после добавления продукта он удаляется в session массив предыдущих продуктов, поэтому каждый раз у меня есть только один продукт в массиве, и я хочу сохранить их все, чтобы потом показывать их в корзине для покупок. php должен возвращать переменную на главную страницу, указывающую на доступность продукта, но я сделаю это позже.

$ Arra - это массив, в котором я сохраняю значения, полученные из XML файл, соответствующий продукту с идентификатором, отправленным с главной страницы, например, цена или название. $ rf - это переменная, которая подсчитывает количество хранимых продуктов и выполняет ту же функцию, что и $ _SESSION ['g']

Это мой PHP:

<?php
session_start();
$id = $_GET[id];
$action = $_GET[action];
if (empty($_SESSION['g'])) {
  $_SESSION['g'] = 0;
}
switch($action){
  case "add" :
    $xmlDoc = new DOMDocument();
    $xmlDoc = simplexml_load_file("cars.xml");
    for ($e = 0; $e < 10; $e++) {
      $cont = 0;
      unset($arra);
      foreach ($xmlDoc->carrito[$e]->children() as $child) {
        $arra[$cont] = $child;
        $cont = $cont + 1;
      }
      if ($arra[0] == $id) {
        for ($f = 0; $f < 10; $f++) {
          $rf = $_SESSION['g'];
          $_SESSION[$rf][$f] = $arra[$f];
        }
        $_SESSION['g'] = $_SESSION['g'] + 1;
      }
    }
    break;
  case "delete":
    break;
}

Если бы кто-нибудь мог помогите мне, я буду так благодарен. Спасибо

1 Ответ

0 голосов
/ 28 мая 2020

Я думаю, что вы в своем коде

1:

if (empty($_SESSION['g'])) {
  $_SESSION['g'] = 0;
}

На самом деле здесь вы даже не определили сеанс вообще, и вы проверяете его значение, если оно пустое или нет, которое остановит выполнение вашего кода там само, сначала вам нужно определить переменную сеанса и проверить значение для нее.

2:

$rf = $_SESSION['g'];
$_SESSION[$rf][$f] = $arra[$f];

Потому что это означает

$_SESSION[$_SESSION['g']][$f] =  $arra[$f];

Это неправильный подход. Лучше сначала сделать все упрощения, а затем назначить его $_SESSION[] и повторить его.

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