【问题标题】:keeping items in cart when click add item to cart单击将商品添加到购物车时将商品保留在购物车中
【发布时间】:2022-01-10 06:56:31
【问题描述】:

我正在尝试创建一个基于数组的购物车,但我似乎无法在我的购物车中添加一个以上的商品。有人能帮我吗?? 上面你看到了数组,所以它确实继续将东西放入我的数组中,但它只显示一个项目我做错了什么?已经尝试解决这个问题 2 个月了

// code for the shopping cart

        <?php 
    session_start();
    error_reporting(E_ALL);
    ini_set('display_errrors', '1');
    // session_destroy();
    ?>
    <!DOCTYPE html>
    <html lang="en">
        <head>
            <meta charset="utf-8" />
            <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
            <meta name="description" content="" />
            <meta name="author" content="" />
            <title>Cart</title>
            <!-- Favicon-->
            <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
            <!-- Bootstrap icons-->
            <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" />
            <!-- Core theme CSS (includes Bootstrap)-->
            <link href="css/styles.css" rel="stylesheet" />
            <link href="css/stylecart.css" rel="stylesheet" />
            <script src="js/scripts.js" async></script>
    
        </head>
        <style>
        body {
            font-size: 20px;
        }
    
        </style>
    <body>
    <a class="back" href="index.php"> <i class="bi bi-arrow-left-circle-fill bi-5x"></i></a>
    <?php 
    include "config.php";
        print_r($_SESSION['basket']);
        
         array_push($_SESSION['basket'], $_GET['broodjes_ID']);
        // oke het is neit geweldig maar het laat iets s
            ?>
            <div class="text-center" style="font-size: 100px;">&#128717;</div>
            <h2 class="text-center">Winkelmandje</h2><br>
            <section class="container content-section">
                <!-- <h2 class="section-header">CART</h2> -->
                <div class="cart-row">
                    <span class="cart-item cart-header cart-column">ITEM</span>
                    <span class="cart-price cart-header cart-column">PRICE</span>
                    <!-- <span class="cart-quantity cart-header cart-column">QUANTITY</span> -->
                </div>  
                <?php 
                
                   $broodjes_ID = $_GET['broodjes_ID'];
                    //onthouden van vorige get request
                    //$count = count($_SESSION['basket']); // count basket puts 3 times the same item in the shopping cart
                    if($_SESSION['basket'] > 0){
                        
                        for($i = 0; $i<$_SESSION['basket']; $i++){
                            //$basket =  $_SESSION['basket'][$i];
                            $sql = "SELECT broodjes_ID, broodnaam, prijs FROM broodjes WHERE broodjes_ID = ?";
                            // uitvoeren, resultaat tonen in tabel.
                            $stmt = $conn->prepare($sql);
                            $stmt->bind_param("i", $broodjes_ID); 
                            $stmt->execute();
                            $result = $stmt->get_result(); // get the mysqli result
                            //while loop zorgt er volgens mij voor dat hij blijft optellen
                            if($row = $result-> fetch_assoc()){
                                $sum = 0;     
                                echo '<div class="cart-items">';
                                echo '<div class="cart-row">';
                                echo '<div class="cart-item cart-column">';
                                echo '<span class="cart-item-title">'. $row['broodnaam'] . '</span>';
                                echo '</div>';
                                echo '<span class="cart-price cart-column"> €'. $row['prijs'] . '</span>';
                                echo '</div>';
                                echo '</div>';
                                $sum = $row['prijs']; 
                                break;
                                
                                
                                
                            }
                            
                        }
                    ?>
                        <div class="cart-total">
                            <strong class="cart-total-title">Total</strong>
                            <span class="cart-total-price"> € <?php echo $sum;?></span>
                        </div>
                <?php
    
                    }else{
                        echo 'mandje is leeg.';
    
                ?>
    
                    <div class="cart-total">
                        <strong class="cart-total-title">Total</strong>
                        <span class="cart-total-price"> € 0</span>
                    </div>
                <?php 
                }
                ?>
    
    
    
                <div class="text-center">
                    <button class="btn btn-outline-primary"  type="button"><a href="bestellen.php">PURCHASE</a></button>
                </div>
            </section>
    </body>

这是商店页面的代码

    <?php 
session_start();
error_reporting(E_ALL);
ini_set('display_errrors', '1');
?>
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
        <meta name="description" content="" />
        <meta name="author" content="" />
        <title>Shop Homepage - Start Bootstrap Template</title>
        <!-- Favicon-->
        <link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
        <!-- Bootstrap icons-->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.5.0/font/bootstrap-icons.css" rel="stylesheet" />
        <!-- Core theme CSS (includes Bootstrap)-->
        <link href="css/styles.css" rel="stylesheet" />
        <link href="css/stylecart.css" rel="stylesheet" />
        <script src="js/scripts.js" async></script>

    </head>
    <style>
        body {
        font-family: Arial, Helvetica, sans-serif;
        font-size: 20px;
        }

        #myBtn {
        display: none;
        position: fixed;
        bottom: 20px;
        right: 30px;
        z-index: 99;
        font-size: 18px;
        border: none;
        outline: none;
        background-color: black;
        color: white;
        cursor: pointer;
        padding: 25px;
        border-radius: 50px;
        }

        #myBtn:hover {
        background-color: #555;
        }
    </style>
    <body>
        
        <!-- Navigation-->
        <?php include "navbar.php"?>
        <?php if(isset($_SESSION['USER_ID'])){ ?>
        <!-- Header-->
        <header class="bg-dark py-5">
            <div class="container px-4 px-lg-5 my-5">
                <div class="text-center text-white"> <!--Het werkt -->
                    <h1 class="display-4 fw-bolder">Goedemorgen, <?php echo $_SESSION['USERNAME'];?></h1>
                    <p class="lead fw-normal text-white-50 mb-0">Shop in style</p>
                </div>
            </div>
        </header>
        <?php
        } else {
        ?>
                <!-- Header-->
                <header class="bg-dark py-5">
            <div class="container px-4 px-lg-5 my-5">
                <div class="text-center text-white"> <!--het werkt-->
                    <h1 class="display-4 fw-bolder">Goedemorgen, Gast</h1>
                    <p class="lead fw-normal text-white-50 mb-0">Shop in style</p>
                </div>
            </div>
        </header>
        <?php } ?>
        <!--miscchien dit toch in een whileloop gooien dat zal ook de code korter maken-->
        <!-- Section-->
        <button onclick="topFunction()" id="myBtn" title="Go to top">&#8593;</button> 
        <?php 
        include "config.php";
        $sql  = 'SELECT * FROM broodjes';
        $stmt = $conn->prepare($sql); 
        $stmt->execute();
        $result = $stmt->get_result(); // get the mysqli result
        while($row = $result-> fetch_assoc()){
            // $_SESSION['basket'] = array(); 
            //echo $row['broodnaam'];
            echo '        <section class="py-5">
            <div class="container px-4 px-lg-5 mt-5">
                <div class="row gx-4 gx-lg-5 row-cols-2 row-cols-md-3 row-cols-xl-4 justify-content-center">
                    <div class="col mb-5">
                        <div class="card h-100">
                            <!-- Product image dit kan later nog wel-->
                            <div class="fw-image">
                                <img class="card-img-top" src="https://dummyimage.com/450x300/dee2e6/6c757d.jpg" alt="..." />
                            </div>
                            <!-- Product details-->
                            <div class="card-body p-4">
                                <div class="text-center">
                                    <div class="test1">
                                    <input type="hidden" name="broodjes_ID" value=', $row['broodjes_ID'] , '/>
                                    </div>
                                    <!-- Product name-->
                                    <div class="test3">
                                        <input type="hidden" name="broodnaam" value=', $row['broodnaam'] , '/>
                                        <h5 class="fw-bolder">'.$row['broodnaam']. '</h5>
                                    </div>
                                    <!-- Product price-->
                                    <div class="test2">
                                        <input type="hidden" name="broodnaam" value=', $row['prijs'] , '/>
                                        <h3> Prijs:  </h3>   <h3 class="fw-price"> €'.$row['prijs']. '</h3><br>
                                    </div>
                                    <!--voorraad--> 
                                    '; if($row['voorraad'] == 0){
                                        echo '
                                        <h3 class="fw-voorraad" style="color: red;"> uitverkocht</h3><br>
                                    '; }else{ 
                                        echo ' 
                                        Voorraad: '.$row['voorraad'].'<br>
                                        </div>
                                        </div>
                                        <!-- Product actions-->
                                        <form action="cart.php?broodjes_ID='. $row['broodjes_ID'].'" method="post" name="broodjes" value"<?php echo htmlentities(serialize($_SESSION["basket"])); ?>
                                            <div class="card-footer p-4 pt-0 border-top-0 bg-transparent">
                                                <div class="text-center"><button class="btn btn-outline-dark mt-auto shop-item-button" type="submit" name="add_to_cart">Add to cart</button></div>
                                            </div>
                                        </form>
                                    '; } 
                        echo '</div>
                    </div>
                </div>
            </div>
        </section>';                           
        if (isset($_POST['add_to_cart'])) {
            $_SESSION['basket'] = array();
            //$_SESSION['basket'][] = $row['broodjes_ID'];
            $_SESSION['basket'] = array_push($_SESSION['basket'], $row['broodjes_ID']);
        }
        }
        ?>
        
        <!-- Footer-->
        <?php include "footer.php";?>
        <!-- Bootstrap core JS-->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script>
        <!-- Core theme JS-->
        <script src="js/scrolltotop.js"></script>
    </body>
</html>

【问题讨论】:

    标签: php html session cart


    【解决方案1】:

    您的循环似乎使用了错误的条件 而不是$i&lt;$_SESSION['basket'] 使用$i&lt;count($_SESSION['basket']) 如果条件相同,你也会遇到同样的问题

    count() 给出数组中元素个数的计数

    这里是固定代码

     <?php 
                
                   $broodjes_ID = $_GET['broodjes_ID'];
                    //onthouden van vorige get request
                    //$count = count($_SESSION['basket']); // count basket puts 3 times the same item in the shopping cart
    
    
                    //use count
                    if(count($_SESSION['basket']) > 0){
                        //use count
                        for($i = 0; $I<count($_SESSION['basket']); $i++){
                            //$basket =  $_SESSION['basket'][$i];
                            $sql = "SELECT broodjes_ID, broodnaam, prijs FROM broodjes WHERE broodjes_ID = ?";
                            // uitvoeren, resultaat tonen in tabel.
                            $stmt = $conn->prepare($sql);
                            $stmt->bind_param("i", $broodjes_ID); 
                            $stmt->execute();
                            $result = $stmt->get_result(); // get the mysqli result
                            //while loop zorgt er volgens mij voor dat hij blijft optellen
                            if($row = $result-> fetch_assoc()){
                                $sum = 0;     
                                echo '<div class="cart-items">';
                                echo '<div class="cart-row">';
                                echo '<div class="cart-item cart-column">';
                                echo '<span class="cart-item-title">'. $row['broodnaam'] . '</span>';
                                echo '</div>';
                                echo '<span class="cart-price cart-column"> €'. $row['prijs'] . '</span>';
                                echo '</div>';
                                echo '</div>';
                                $sum = $row['prijs']; 
                                break;
                                
                                
                                
                            }
                            
                        }
                    ?>
    

    【讨论】:

      猜你喜欢
      • 2020-01-14
      • 2016-12-19
      • 2015-03-31
      • 2018-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多