【问题标题】:serialize and unserialize $_session['cart']序列化和反序列化 $_session['cart']
【发布时间】:2012-12-11 20:16:12
【问题描述】:

我有一个购物车,我想保存 $_SESSION['cart'],其中包含用户选择的产品的 $product_id => $quantity。 例如:

[cart] => Array
    (
        [366] => 2000
        [215] => 456
    )

首先我序列化 $_SESSION['cart'],然后再将它插入到我的数据库中。

<?php
if($_SESSION['cart']) 
{
    $pedido= serialize($_SESSION['cart']);
}
?>

$sql1="insert into pedido(orden) values ('$pedido')";

现在我想在另一个页面中查看 $_SESSION['cart']。所以我使用:

$sql2 = "SELECT orden FROM pedido where id_pedido = '$ID'";
$rs2 = mysql_query($sql2, $conexio) or die("Error al consultar: ".mysql_error()); 
$row2 = mysql_fetch_row($rs2);
$id_usuario=$row2[0];
$_SESSION['cartguardado']= unserialize($id_usuario);

我知道在最后一步我做错了。任何机构都可以帮助我并帮助我找出错误?

【问题讨论】:

  • 警告您的代码容易受到 sql 注入攻击。
  • 您打算以这种方式命名 $_SESSION['cartguardado'] 还是仍应命名为 $_SESSION['cart']?
  • 您看到错误了吗?如果没有,你看到了什么是你不期待的?你知道use of the mysql extension is discouraged吗?
  • 你能找出错误在哪里吗?我们不知道您的所有变量是如何设置/命名的,如果我们不知道是代码错误还是先前设置的变量错误,我们将无法帮助您...
  • 你真的得到了结果集中返回的任何行吗?你怎么知道$ID 使用什么?

标签: php mysql


【解决方案1】:

尝试输出$row2

$sql2 = "SELECT orden FROM pedido where id_pedido = '$ID'";
$rs2 = mysql_query($sql2, $conexio) or die("Error al consultar: ".mysql_error()); 
$row2 = mysql_fetch_row($rs2);
print_r($row2);
$id_usuario=$row2[0];
$_SESSION['cartguardado']= unserialize($id_usuario);

如果 $row2[0] 为空,那么您的数据有问题

【讨论】:

  • 当我做 print_r($row2) 我得到: Array ( [0] => Array [orden] => Array )
  • print("SELECT orden FROM pedido where id_pedido = '$ID'");
【解决方案2】:

我注意到您序列化了会话代码,但没有以可用于 Php 程序的方式呈现它,即

if($_SESSION['cart']) 
{
    $pedido= serialize($_SESSION['cart']);
}

根据我的小经验,我认为您需要先反序列化代码,以便您可以使用它,即

if($_SESSION['cart']) 
{
    $pedido = unserialize(serialize($_SESSION['cart']));
}

【讨论】:

    猜你喜欢
    • 2012-03-17
    • 2013-04-19
    • 2018-12-05
    • 2013-01-08
    • 2015-03-17
    • 2015-08-28
    相关资源
    最近更新 更多