【问题标题】:PHP unserialization of 2D array element does not work as expected二维数组元素的 PHP 反序列化无法按预期工作
【发布时间】:2019-07-31 22:12:58
【问题描述】:

我知道这里有一些类似的问题,但在我看来,它们都不是我的问题所在,或者理解它们需要比我拥有的更高级的知识。

我想做什么:

  • 将 $_POST 值存储在数组中
  • 序列化该数组
  • 将数组存储在包含三个相似数组的二维 $_SESSION 中
  • 直接在其他页面上从 $_SESSION 数组中检索数据

我的尝试如下所述

if ($_SERVER["REQUEST_METHOD"] === 'POST') {

    $name = $_POST['name'];
    $surname = $_POST['surname'];
    $age = $_POST['age'];

    $assocArray = ['name' => $_POST['name'], 'surname' => $surname, 'age' => $age];

    $assocArraySerialized = serialize($assocArray);

    $_SESSION += ['etap1' => $assocArraySerialized];

    echo unserialize($_SESSION['etap1']['name']);
}

当我尝试回显收到的项目时:

  • 警告:非法字符串偏移 'name'
  • unserialize(): 特定本地主机路径中 1 个字节的偏移量 0 处出错...

我检查了 $_POST 是否有效,当我回显 $_POST['name'] 时,我可以看到所需的值。当我对 $_SESSION 进行 var_dump 时,我可以看到它已正确序列化。

如何从 $_SESSION 获得相同的恢复数据?

【问题讨论】:

  • 你在 $_SESSION["etap1"] 中存储了一个字符串,但是在 unserialize() 中你尝试访问一个不是它的数组。
  • 感谢 Natha 的建议!

标签: php serialization multidimensional-array


【解决方案1】:

代替这个echo unserialize($_SESSION['etap1']['name']);试试

$var = unserialize($_SESSION['etap1']);
echo $var['name'];

【讨论】:

  • 没错。我首先以错误的方式将数组存储在 $_SESSION 中。这解决了我的问题。谢谢!
猜你喜欢
  • 2017-05-05
  • 1970-01-01
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多