【问题标题】:PHP is not storing $_SESSION array valuesPHP 不存储 $_SESSION 数组值
【发布时间】:2020-09-15 20:08:43
【问题描述】:

我是 php 新手,现在在 $_SESSION 数组中存储数据时遇到问题。我有一个索引页面,它从 XML 文件中检索信息,并在页面中显示 XML 文件中的每个产品,每个产品都有一个添加到购物车的按钮。当按下按钮时,我会发送一个XMLHttpRequest,其中包含我要添加到$_SESSION 数组中的产品ID。

这是主页:

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]
发生的事情是,在我添加产品后,它会在会话数组中删除以前的产品,所以每次我在数组中只有一个产品并且我想存储所有这些产品以便稍后在购物车中显示它们. php 应该向主页返回一个变量来指示产品的可用性,但我稍后会这样做。

$arra 是一个数组,我在其中存储从与从主页发送的 Id 的产品相对应的 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;
}

如果有人可以帮助我,我将不胜感激。 谢谢

【问题讨论】:

  • 我认为您需要制作完整的数组,然后将其放入会话中
  • 我不太确定,但这看起来不太好$_SESSION[$rf][$f]=$arra[$f];

标签: php ajax session


【解决方案1】:

我认为你在你的代码中

1:

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

实际上,您甚至还没有定义会话,并且您正在检查其值是否为空,这将停止执行您的代码本身,首先您需要定义会话变量并检查其值它。

2:

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

因为这意味着

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

这是错误的做法。 更好的方法是先进行所有简化,然后将其分配给 $_SESSION[] 并回显它。

【讨论】:

  • 我在想的是,例如如果是第一个产品,那么$_SESSION[0][1] = "toyota"; $_SESSION[0][2] = "Model2013"; 而对于第二个产品$_SESSION[1][1] = "mazda"; $_SESSION[1][2] = "Model2015"; 是错的吗?谢谢你的回答
  • 只需尝试在代码末尾回显结果会话,看看它会产生什么结果。
  • 在此之前请定义会话变量,您的代码将在那里停止执行
  • 嗨,但是如果我在开始时定义变量$_SESSION['g'],每次我调用php,它都会被重置,不是吗?我需要这个值来知道我存储了多少产品,或者它是否是第一个
  • 然后只需在 for 循环中定义它,您的工作就完成为for(){$_SESSION['$i']}。而不是 g
猜你喜欢
  • 1970-01-01
  • 2022-06-27
  • 2011-03-18
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-10-27
  • 2023-03-19
  • 1970-01-01
相关资源
最近更新 更多