在现有会话中创建计算

时间:2017-11-06 11:03:41

标签: javascript php angularjs session

我目前正在使用AngularJS,PHP,网络服务以及一些html / css和XML开发购物应用程序。

我目前正在开设购物车会议,我偶然发现了一些问题,无法创建总价,项目总数和增值税计算。

所以会话是用PHP编写的。代码如下:



<?php

session_start();

$product_id = $_REQUEST['product_id'];
$product_name = $_REQUEST['product_name'];
$product_price = round($_REQUEST['product_price'], 2);
$product_size = $_REQUEST['product_size'];
$product_quantity = $_REQUEST['product_quantity'];
$total_product_price = $product_price*$product_quantity;
round($total_product_price, 2);
$total_items = $_SESSION['cart'][$product_quantity];
// Add new item to session
$cartProduct = array(
    "id" => $product_id,
    "name" => $product_name,
    "price" => $product_price,
    "size" => $product_size,
    "quantity" => $product_quantity,
    "total_price" => $total_product_price,
    "total_items" => $total_items
);

/*
 * check if the 'cart' session array was created
 * if it is NOT, create the 'cart' session array
 */
if(!isset($_SESSION['cart'])){
    $_SESSION['cart'] = array();
}

// check if the item is in the array, if it is, do not add
if(array_key_exists($product_id and $product_size, $_SESSION['cart'])){
    // redirect to product list and tell the user it was added to cart
    echo "<script> alert('Dit product staat al in de winkelwagen')</script>])";
}

// else, add the item to the array
else{
    $_SESSION['cart'][$product_id]=$cartProduct;
}
&#13;
&#13;
&#13;

如上面的代码所述,请求提供有关产品的所有信息。然后将product_id等请求的项目设置为array()。经过一些检查后,array()被添加到一个sessoion:$_SESSION['cart'];。我添加和显示购物车没有问题。我遇到的问题是创建显示购物车中的total_items,购物车的total_price和增值税计算所需的计算。

如果需要更多信息,请告知我们。

提前致谢!

1 个答案:

答案 0 :(得分:1)

查看您的代码,这是我看到的问题

$total_items = $_SESSION['cart'][$product_quantity];

由于

  $_SESSION['cart'][$product_id]=$cartProduct;

  $cartProduct =    array(
    "id" => $product_id,
    "name" => $product_name,
    "price" => $product_price,
    "size" => $product_size,
    "quantity" => $product_quantity,
    "total_price" => $total_product_price,
    "total_items" => $total_items
);

因此,如果您有$product_quantity 3,那么您将$product_id'3'拉出来是没有意义的。例如,如果我们$product_id 6$product_quantity 3,那么:

$_SESSION['cart'][6] = array(
    "id" => 6, //$product_id,
    "name" => $product_name,
    "price" => $product_price,
    "size" => $product_size,
    "quantity" => 3, //$product_quantity,
    "total_price" => $total_product_price,
    "total_items" => $total_items
);

那么我们为什么要提取数量而不是产品ID,请按照。

这里唯一可以用来代替$_SESSION['cart'][$product_quantity]的是

$total_items = $_SESSION['cart'][$product_id]['total_items'];

但我认为您可能还有其他问题,因为$product_quantity$total_items之间的目的或区别是什么?总产品不是产品数量。或者是总产品的数量(唯一产品ID的数量),以及一个特定产品的数量(一个产品ID的数量)。如果是这种情况,跟踪每个产品中所有产品的总数是不必要的,并且容易出错。

您还可以在将产品分配到购物车之前访问会话,此处

 $total_items = $_SESSION['cart'][$product_quantity];

这可能也是错误的

 array_key_exists($product_id and $product_size, $_SESSION['cart'])

我在测试类似的东西时得到了这个

  

警告:array_key_exists():第一个参数应该是字符串或整数

这可能是因为$product_id and $product_size通过在那里进行布尔比较来评估true

只是我的评估。