PHP值在数组中添加两次

时间:2014-01-21 18:21:04

标签: php arrays session

过去几个小时我一直在努力解决这个问题。 基本上,对于学校,我必须使用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'])) {}语句。这解决了我的问题。事情是我后来补充说,问题已经出现了。
由于我不能在我自己的问题上发表回复,并因为我的声誉而将其作为解决方案投票,我必须这样做。

2 个答案:

答案 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;的想法非常实用。