2

我正在尝试使用数组将数据从产品页面传递到购物车页面。viewcart.php 将从上一页收到多个属性(价格、链接、标题和零售商)。我想用一个数组来保存它们。对于客户添加到购物车中的每个附加项目,我试图获取一个计数器变量 ($i) 来增加数组 $_SESSION['cart'][$i]['attribute']。我该怎么做呢?

我不确定这是将新产品添加到购物车的正确方法。最后,我想要一种能够使用 for 循环显示购物车中所有产品的方法。到目前为止,这是我在购物车脚本上的开始:

<?php

  // The shopping cart needs sessions, so start one
  session_start();

  @$link = $_GET['link'];
$price = $_GET['price'];
$title = $_GET['title'];
$retailer = $_GET['retailer'];


  if($link) {
    //new item selected
    if(!isset($_SESSION['cart'])) {
      $_SESSION['cart'] = array();
      $_SESSION['items'] = 0;
      $_SESSION['total_price'] ='0.00';
    }

    if(isset($_SESSION['cart'][$link])) {
      $_SESSION['cart'][$link]++;
    } else {
      $_SESSION['cart'][$link] = 1;
    }


  }

  if(($_SESSION['cart']) && (array_count_values($_SESSION['cart']))) {
    echo " in your cart and we're working to display them";
  } 
  else {
    echo "<p>There are no items in your cart</p><hr/>";
  }

?>

这是我认为可以使用的 for 循环。我正在寻找某种方法来显示数组中的所有项目。

for ($x=0; $x<=$i; $i++)
  {
  echo "The price is " . $_SESSION['cart'][$x][price] . "  Retailer is " . $_SESSION['cart'][$x]    [retailer] . "<br>";
  }
4

3 回答 3

0

你可以: 有另一个带有计数器的会话变量,并在每次添加时递增它?

或者

$i= Count($_SESSION['cart'])+1;

或者

根本不指定索引:

$tmp["cart"]["retailer"] = "123"; 等等等等。

$_SESSION['cart'][] = $tmp["cart"];

如果我是你,我会将产品存储到数据库中。

于 2012-02-28T08:13:21.887 回答
0

最简单的方法是在数据库中创建一个 temp_cart 表。您应该在其中存储用户添加到购物车中的项目。然后在结帐页面上。您可以使用选择查询简单地显示它们。这样.. 允许用户在 viewcart.php 页面上编辑他们的购物车会更容易。

于 2012-02-28T08:26:46.267 回答
0

我不喜欢你这样做的方式。会话管理对于购物车来说非常简单。保持会话尽可能精简。在会话中存储价格是非常糟糕的方式,因为它很容易被操纵。

这是您可以使用的简单示例。

if(isset($_SESSION['items'][$_GET['item_id']])) {
    $_SESSION['items'][$_GET['item_id']]++; //add one to the total count
} else {
    $_SESSION['items'][$_GET['item_id']] = 1; //If added for the first time
}

现在处理它

foreach($_SESSION['items'] as $id => $count) {
     echo $id; // product id
     echo $count; // product count
}

PS:记得清理输入。我已经省略了

于 2012-02-28T08:33:17.487 回答