2009-10-16 69 views
1

我正在为学校作业构建购物车。除了将商品添加到购物车变量之外,我几乎都有。将项目添加到数组PHP

我建立了我的购物车会话使用:$_SESSION['temp_session'] = array();

,然后,当一个项目被添加到购物车中,这个代码被执行

if (isset($_POST['addtocart'])) { 
      $item_name = $_POST['item_name']; 
      $price = $_POST['price']; 
      $qty = $_POST['qty']; 

      $newItem = $item_name.":".$price.":".$qty; 
      //echo $newItem; 

      if (isset($_SESSION['shop_session'])) { 
       array_push($shop_session, $newItem); 
       //header('Location: cart.php'); 
       print_r($shop_session); 
      } 
      else { 
       array_push($temp_session, $newItem); 
       //header('Location: login.php?notLoggedIn=true'); 
       print_r($temp_session); 
      } 
     } 

这一切似乎使他能工作正常(我可以打印出$newItem,它包含元素),但是当我尝试将$newItem添加到$shop_session$temp_session然后将其打印出来时,数组为空。

这是关于我使用的方式array_push()

感谢

回答

4

是您RegisterGlobals是吗?如果没有,你必须使用

  if (isset($_SESSION['shop_session'])) { 
        array_push($_SESSION['shop_session'], $newItem); 
        //header('Location: cart.php'); 
        print_r($_SESSION); 
      } 
      else { 
       array_push($_SESSION['temp_session'], $newItem); 
        //header('Location: login.php?notLoggedIn=true'); 
        print_r($_SESSION); 
      } 
+1

@Anax如果你不不知道这与'register_globals'有什么关系,那么你从来没有遇到过用它编码过的脚本。 – random

+0

啊,好的,谢谢你们。与print_r($ _ SESSION);我得到:Array([temp_session] => Array([0] => Apocalypso:10.00:2))。所以$ _SESSION是一个数组,并且它内部是另一个名为temp_session的数组?我如何将temp_sessions复制到shop_session?还有,我想foreach($ _SESSION ['shop_session']作为$ item)也不起作用吗? –

+0

@ e.c.ho我最初的印象是,Alexey暗示在register_globals On的时候,每个会话变量都会自动作为独立变量提供,我认为这是不正确的。 – Anax

3

不能键入

$_SESSION['temp_session'] = array(); 

,并期望有一个名为$ temp_session变量。你所拥有的是一个数组($ _SESSION),它包含一个元素(键名为temp_session),它又是一个数组。

为了有你需要一个额外的行预期的效果,如:

$temp_session = $_SESSION['temp_session']; 

,当你更新,然后再返回到您的会话:

$_SESSION['temp_session'] = $temp_session;