过去几个小时我一直在努力解决这个问题。
基本上,对于学校,我必须使用PHP中的$ _SESSION变量制作购物车。我想要做的是使用$_GET
语句向$ _SESSION ['cart']数组添加一个值,但每次执行此操作时,值都会添加两次。
第一个值立即添加,但我只刷新页面时看到第二个值,或者添加一个新项目。
让我们说我第一次添加奶酪,当我的页面加载时,我看到一个包含一个项目的列表:奶酪
当我添加黄油和我的页面重新加载时,我的列表显示3项:奶酪,奶酪和黄油。
当我重新加载页面(没有GET语句)我的列表显示4项:奶酪,奶酪,黄油和黄油。
我尝试在每一行后添加回声来检查是否发生了两次事情,但我找不到解决方案。
<?php
session_start();
$products = array("Cheese", "Butter");
if(empty($_SESSION['cart'])) {
$_SESSION['cart'] = array();
}
else {
if(isset($_GET['addToCart'])) {
$item = $_GET['addToCart'];
if($item == "c") {
session_destroy();
}
else {
$_SESSION['cart'][] = $item;
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Shop</title>
</head>
<body>
<!-- Create a table with the contents of $products -->
<table>
<tr>
<th>Name</th>
<th>Add</th>
</tr>
<?php
foreach ($products as $product) {
?>
<tr>
<td><?php echo $product ?></td>
<td><a href="?addToCart=<?php echo $product ?>">Add to cart</a></td>
</tr>
<?php
}
?>
</table>
<!-- Create an unordered list to check the contents of $_SESSION['cart'] -->
<ul>
<?php
foreach($_SESSION['cart'] as $cart) {
?>
<li><?php echo $cart ?></li>
<?php
}
?>
</ul>
</body>
</html>
在我的帖子上查看了towr的评论之后,我设法解决了我的问题。我必须在else
之后删除if(empty($_SESSION['cart'])) {}
语句。这解决了我的问题。事情是我后来补充说,问题已经出现了。
由于我不能在我自己的问题上发表回复,并因为我的声誉而将其作为解决方案投票,我必须这样做。
答案 0 :(得分:0)
将该项目用作购物车中的KEY:
$_SESSION['cart'][$item] = true;
通过这种方式,无论你多久(或者说)将奶酪添加到购物车中,你只需要覆盖之前的产品,最后只需要购买一个奶酪。
稍后您将使用以下内容检索项目:
$selected_items = array_keys($_SESSION['cart']); // 'Cheese'
答案 1 :(得分:0)
您可以尝试使用:array_push($_SESSION['cart'],$item);
代替$_SESSION['cart'][] = $item;
。使用它我没有看到你描述的相同行为。
你仍然可以添加多个干酪课程,因此当使用计数器而不是真实时,Marc B使用$_SESSION['cart'][$item] = true;
的想法非常实用。