PHP购物车无法正常工作


PHP shopping cart does not work right

我的购物车无法正常工作。

如果我在购物车中添加一个项目,它会相应地工作,但当我添加第二个或多个项目时,购物车的行为似乎很奇怪。。。

添加第二项时,第二项的数量从2开始。

新添加项目的数量从购物车中按下的项目数量开始。它还会随着购物车中物品的数量而增加。

添加第三个项目后,该项目显示的次数与购物车中的项目数量一样多。。。

如果购物车中已有商品,如何将其更改为添加单个商品并仅增加一个?

提前感谢!

<?php
    require "core.inc.php";
    require "connect.inc.php";
?>
<html>
<head>
<meta charset="UTF-8">
<title>Winkelwagen</title>
<link rel="stylesheet" type="text/css" href="winkelwagen.css" />
<link rel="stylesheet" type="text/css" href="topAndMenuHeader.css" />
</head>
<body bgcolor="#8A8B93">
<div id="container">
<?php include "topAndMenuHeader.php"; ?>
<div id="content">
    <p class="opmaakTitel">Winkelwagen</p>
    <?php
        if ( isset($_GET['itemID']) ) {
            $itemID = $_GET['itemID'];
            $sql = "SELECT * FROM items WHERE id=$itemID";
            if ( $query = mysql_query($sql) ) {
                $numRows = mysql_num_rows($query);
                if ( $numRows == 1 ) {
                    $artID = mysql_result($query, 0, 'id');
                    $artNaam = mysql_result($query, 0, 'artNaam');
                    $artPrijs = mysql_result($query, 0, 'artPrijs');
            $artAfbeelding = mysql_result($query, 0, 'artAfbeelding');            
                    $artAantal = 1;
                    $index = -1;
                    if ( isset($_SESSION['cart']) ) {
                        unserialize(serialize($_SESSION['cart']));
                        for ( $i = 0; $i < count($_SESSION['cart']); $i++ ) 
                        {
                            if ( $_SESSION['cart'][$i]['id'] ==      
                        $_GET['itemID'] ) {
                                $index = $i;
                            } 
                            if ( $index == -1 ) {
                                array_push($_SESSION['cart'], 
            array('id'=>$artID, 'naam'=>$artNaam, 'prijs'=>$artPrijs, 
            'afbeelding'=>$artAfbeelding, 'aantal'=>$artAantal));
                            } else {
                                $_SESSION['cart'][$index]['aantal']++;
                            }
                        }
    } else {
      $_SESSION['cart']  []=array('id'=>$artID,
      'naam'=>$artNaam,'prijs'=>$artPrijs,
      'afbeelding'=>$artAfbeelding,'aantal'=>$artAantal);
                }
            }
        }
    }
    foreach ( $_SESSION['cart'] as $cart ) {
    echo '<div id="artikelSpace">';
    echo    '<div id="artikel">';
    echo        '<div id="afbeelding">';
    echo'<imgsrc="data:image/jpeg;base64,'
    .base64_encode($cart['afbeelding']).'" />';
    echo        '</div>';
    echo        '<div id="naam">';
    echo            '<p>'.$cart['naam'].'</p>';
    echo        '</div>';
    echo        '<div id="aantal">';
    echo            '<form action="winkelwagen.php" method="POST">';
    echo                'Aantal:';
    echo                '<input type="text" name="aantal" value="'
    .$cart['aantal'].'" style="width: 50px; margin: 0px 20px 0px 20px" />';
    echo                '<input type="submit" name="wijzigAantal"
    value="Wijzig" style="width: 100px;
    border-radius: 5px; font-weight: bold;" />';
    echo            '</form>';
    echo        '</div>';
    echo        '<div id="prijs">';
    echo            '<p>Prijs: €'.($cart['prijs'] * $cart['aantal']).'</p>';
    echo        '</div>';
    echo        '<div id="verwijder">';
    echo            '<ul>';
    echo                '<li><a href="#">Verwijder</a></li>';
    echo            '</ul>';
    echo        '</div>';
    echo    '</div>';
    echo '</div>';
    }
    ?>
</div>
</div>
</body>
</html>

您必须在循环的每次迭代中初始化$index变量,如下所示:

// your code
if ( isset($_SESSION['cart']) ) {
    unserialize(serialize($_SESSION['cart']));
    for ( $i = 0; $i < count($_SESSION['cart']); $i++ ) {
        $index = -1;  // initialize $index in each iteration
        if ( $_SESSION['cart'][$i]['id'] == $_GET['itemID'] ) {
            $index = $i;
        } 
        if ( $index == -1 ) {
            array_push($_SESSION['cart'], array('id'=>$artID, 'naam'=>$artNaam, 'prijs'=>$artPrijs, 'afbeelding'=>$artAfbeelding, 'aantal'=>$artAantal));
        } else {
            $_SESSION['cart'][$index]['aantal']++;
        }
    }
} else {
    $_SESSION['cart'][]=array('id'=>$artID, 'naam'=>$artNaam,'prijs'=>$artPrijs, 'afbeelding'=>$artAfbeelding,'aantal'=>$artAantal);
}
// your code

旁注:不要使用mysql_数据库扩展,它们在PHP 5.5.0中被弃用,在PHP 7.0.0中被删除。请改用mysqliPDO扩展名。这就是为什么不应该使用mysql_函数。