所以我设置了购物车,以便使用GET功能接收有关添加的每个项目的具体信息。但是,在读取数据库的实现中,如果添加其他项,则值将变为相同。 如果我添加椅子1,然后再添加椅子1,它会增加椅子1的总数,说有2把椅子1。但是,如果我然后添加主席2,将会有一个新的条目,但具有主席1的所有值。
数组输出
Array ( [0] => Array ( [item_id] => 2 [quantity] => 1 ) [1] => Array ( [item_id] => 4 [quantity] => 7 ) )
购买物品区域
数据库:
<?php
include_once('config/database.php');
include_once('object/chair.php');
$database = new Database();
$conn = $database->getConnection();
$chair = new Chair($conn);
$chair->id = $_GET['detailsid'];
$stmt = $chair->readDetails();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
?>
加入购物车:
<div class="addtocart">
<!--<div class="button">
Add to cart
</div>-->
<div class="button">
<form id="form1" name="form1" method="post" action="cart.php?detailsid=<?php echo $row['ID'];?>">
<input type="hidden" name="pid" id="pid" value="<?php echo $row['ID'];?>"/>
<input type="submit" name="button" id="button" value="Add to Shooping Cart"/>
</form>
购物车功能:
<?php
session_start();
error_reporting(E_ALL);
ini_set('display_errrors', '1');
include_once 'includes/db_conx.php';
if (isset($_POST['pid']))
{
$pid = $_POST['pid'];
$wasFound = false;
$i = 0;
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
{
$_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1));
}
else
{
foreach ($_SESSION["cart_array"] as $each_item)
{
$i++;
while (list($key, $value) = each($each_item))
{
if ($key == "item_id" && $value == $pid)
{
array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1)));
$wasFound = true;
}
}
}
if ($wasFound == false)
{
array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
}
}
}
if (isset($_GET['cmd']) && $_GET['cmd'] == "emptycart")
{
unset($_SESSION["cart_array"]);
}
//render cart
$cartOutput = "";
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
{
$cartOutput = "<h2 align=center'>Your shopping cart is empty</h2>";
}
else
{
$i = 0;
foreach ($_SESSION["cart_array"] as $each_item)
{
$i++;
$item_id = $each_item['item_id'];
include_once('config/database.php');
include_once('object/chair.php');
$database = new Database();
$conn = $database->getConnection();
$chair = new Chair($conn);
$chair->id = $_GET['detailsid'];
$stmt = $chair->readDetails();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$product_name = $row['chair_name'];
$price = $row['PRICE'];
}
$pricetotal = $price * $each_item['quantity'];
$cartOutput .="<tr>";
$cartOutput .= "<td>" . $product_name . "</td>";
$cartOutput .= "<td>" . $price . "</td>";
$cartOutput .= "<td>" . $each_item['quantity'] . "</td>";
$cartOutput .= "<td>" . $pricetotal . "</td>";
$cartOutput .= "<td>X</td>";
$cartOutput .="</tr>";
}
}
答案 0 :(得分:1)
更新
可能的解决方法是将详细信息ID添加到会话数组中,如下所示:
if (!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1)
{
$_SESSION["cart_array"] = array(1 => array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid']));
}
else
{
foreach ($_SESSION["cart_array"] as $each_item)
{
$i++;
while (list($key, $value) = each($each_item))
{
if ($key == "item_id" && $value == $pid)
{
array_splice($_SESSION["cart_array"], $i - 1, 1, array(array("item_id" => $pid, "quantity" => $each_item['quantity'] + 1, "details_id" => $_GET['detailsid'])));
$wasFound = true;
}
}
}
if ($wasFound == false)
{
array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1, "details_id" => $_GET['detailsid']));
}
}
然后在显示购物车时使用值而不是$_GET
一个:
$chair = new Chair($conn);
$chair->id = $each_item['details_id'];
$stmt = $chair->readDetails();
您正在使用$_GET['detailsid']
获取主席详细信息 - 每个循环的ID始终相同:
$chair = new Chair($conn);
$chair->id = $_GET['detailsid'];
$stmt = $chair->readDetails();
这应该是$item_id
,以便您获取正确椅子的详细信息吗?