简体   繁体   中英

keeping items in cart when click add item to cart

I'm trying to create a shopping cart based on an array but I can't seem to add more then one item into my cart. can someone help me?? above you see the array so it does continue to put things into my array but it only shows one item what am I doing wrong? have been trying to fix this for 2 months now在此处输入图像描述

// 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>

this is the code for the store page

    <?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>

it seems like you are using wrong conditions for your loop instead of $i<$_SESSION['basket'] use $i<count($_SESSION['basket']) same problem for you if condition

count() gives the count of number of element in the array

Here is the fixed code

 <?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;
                            
                            
                            
                        }
                        
                    }
                ?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM