簡體   English   中英

購物車問題與更新數量和從購物車中刪除項目

[英]Shopping cart issue with updating the quantity and removing items from the cart

我正在努力完成一項家庭作業,包括將物品添加到購物車並更新它們並從購物車中移除物品。 到目前為止,我已經能夠添加項目,但現在我面臨更新數量和刪除項目的問題。 有人可以幫助我嗎? 謝謝。

<?php
session_start();
include 'dbconnect.php';
include 'functions.php';

// Create an empty cart if it does not exist 
if (!isset($_SESSION['cart'])) {
$_SESSION['cart']=array();
}
// Add an item to the cart

$title = $_GET['title'];

$quantity = $_GET['quantity'];

if ($quantity > 0) { 
    $_SESSION['cart'][$title]= round($quantity,0);

    //create an array of current items in the cart
    $items = array();

    if(isset($_GET['remove']) && (!empty($_GET['remove'] || 
$_GET['remove'] == 0))){
    unset($_SESSION['cart'][$_GET['remove']]);
}

?>
 <!DOCTYPE html>
 <html>    
 <head>
 <title>BOOK SHOP</title>
 <link rel="stylesheet" type="text/css" href= "main.css" />
 </head>
<body>
<form>
<input type="button" value="Go back" onclick="history.back()">
 </form>

    <h1>Your Cart </h1> 

    <?php
    $grand_total = 0;

    echo '<table border = "1">  <tr> <th>  Book Name </th>  <th>  Price 
    </th> <th> Qty</th> <th> Total</th></tr> '; 
    foreach ($_SESSION['cart']as $title => $quantity) {

        // get book data
        $result =get_product_data($title);


        $items[$title]
        ['bookname'] =$result[0][2];
        $items[$title]
        ['listPrice'] = $result[0][3]; 
        $items[$title]
        ['quantity']=$quantity;

        $book_total = $result[0][3] * $quantity;
        $grand_total +=$book_total;

        echo  '<tr>'; 
        echo  '<td>' . $items[$title]['bookname'] . '</td>';
        echo  '<td>' . $items[$title]['listPrice'] . '</td> ';
        echo  "<td><input type='text' class='form-control' 
     name='value'".$items[$title]['quantity'] ."'></td>";

        echo  '<td>' .  sprintf('$%.2f',$book_total) . '</td>';
        echo '<td><a href="?remove=' . $title . '">remove</a></td>';
        echo  '</tr>';


    }
    }   
    echo "<td><input type= 'submit' name='even' value='Update' class='btn 
  btn-warning'></td>";
    echo '<tr> <td>&nbsp</td>     <td>&nbsp</td>  <td>TOTAL</td> <td>' . 
  sprintf('$%.2f',$grand_total) . '</td> ';
    echo '</table>';    
    ?>


   </body>
    </html>

預期的結果應該是當我刪除一個項目時,它會刪除該項目。 更新數量時,它將更新價格和數量。 相反,我收到與未定義的變量和索引相關的錯誤:

當我刪除一個項目時,我得到以下內容:

注意:未定義的索引:第12行的C:\\ xampp \\ htdocs \\ book_apps \\ Book Database Connect \\ add_to_cart.php中的標題
注意:未定義的索引:第14行的C:\\ xampp \\ htdocs \\ book_apps \\ Book Database Connect \\ add_to_cart.php中的數量
注意:未定義的變量:C:\\ xampp \\ htdocs \\ book_apps中的grand_total \\第73行的書籍數據庫連接\\ add_to_cart.php總計$ 0.00

所以,我花了很多時間查看你的代碼,看看你想要實現的目標。 如果不為您編寫所有內容,這里是一個非常基本的示例,沒有驗證可以幫助您入門。 您可以添加數據庫中的產品信息,以及允許您向購物車添加商品的實際在線商店信息等。我添加了一個方法"POST"form來處理提交更新的數量或刪除項目。 還有很多其他更好的選擇來處理這種類型的購物車邏輯 ,但是因為看起來你是PHP的新手,我想我會幫助你了解一些基本知識,讓你了解事物在OOP范式中的運作方式。

<?php
session_start();

/* for testing purposes, unset cart session on each run of code if you need to simulate
adding new items to the cart */
//unset($_SESSION['cart']); 

// Create an empty cart if it does not exist
if (!isset($_SESSION['cart']))
{
    $_SESSION['cart'] = [];

    // For testing purposes, add cart session data on each run of code
    // This info would come from database and be set here via ADD button, etc.
    // Comment out if you want nothing in cart on run of page
    $_SESSION['cart'][] = array('book_id' => 1, 'quantity' => 2);
    $_SESSION['cart'][] = array('book_id' => 2, 'quantity' => 1);

    // DEBUGGING
    //echo "<pre>";
    //print_r($_SESSION['cart']);
    //exit;
}

function updateItem($book_id, $quantity, $action) {
    foreach ($_SESSION['cart'] as $key => $cart_item)
    {
        if($cart_item['book_id'] === $book_id) {
             if($action === 'remove') {
               unset($_SESSION['cart'][$key]);
             } else if($action === 'update') {
                $_SESSION['cart'][$key]['quantity'] = $quantity;
             } else {
               // some other default action   
             }
            return;
        }
    }
}

function updateBulkItems($itemsWithQuantity) {
    foreach($itemsWithQuantity as $key => $itemArr) {     
        $book_id = key($itemArr);
        $quantity = $itemArr[$book_id];
        updateItem($book_id, $quantity, 'update');
    }
}

// Process cart actions update/remove
if (isset($_POST) && !empty($_POST) && is_array($_POST))
{
    // DEBUGGING
    //echo "<pre>";
    //print_r($_POST);
    //exit;

    $postedData = $_POST;
    switch($postedData) {     
        case isset($postedData['remove']):
           // do remove logic here w/ database/session
           updateItem(key($postedData['remove']), null, 'remove');
        break;

        case isset($postedData['update']):
           // do update logic here w/ database/session
           updateBulkItems($postedData['quantity']);
        break;

        default:

        break;
    }    
}

$grand_total = 0;
?>
<!DOCTYPE html>
<html>
    <head>
        <title>
            BOOK SHOP
        </title>
        <link rel="stylesheet" type="text/css" href= "main.css" />
    </head>
    <body>
        <form>
            <input type="button" value="Go back" onclick="history.back()">
        </form>
        <h1>
            Your Cart 
        </h1>
        <?php

/**
* This product info would come from database, etc.
* Find book info from ID passed in
* @param $book_id
*/
function get_product_data($book_id) {

    // Mock database return data..
    $product_array = [];
    $product_array[] = array('id' => 1, 'title' => 'Title 1', 'book_name' => 'Book Name 1', 'total' => 5.99);
    $product_array[] = array('id' => 2, 'title' => 'Title 2', 'book_name' => 'Book Name 2', 'total' => 3.99);

    foreach($product_array as $key => $product) {
        if($product['id'] === $book_id) {
             return $product;   
        }
    }    
    return [];
}

echo '<form id="cart_form" method="POST">';
echo '<table border="1"><tr><th>Book Name</th><th>Price</th><th>Qty</th><th>Total</th></tr>';

foreach ($_SESSION['cart'] as $key => $cart_item)
{
    // get book data
    $book_id = $cart_item['book_id'];
    $product_info = get_product_data($book_id);
    if(count($product_info) == 0) {
      continue;
    }
    $book_total = $cart_item['quantity'] * $product_info['total'];
    $grand_total += $book_total;
    echo '<tr>';
    echo '<td>' . $product_info['book_name'] . '</td>';
    echo '<td>' . $product_info['total']. '</td> ';
    echo "<td><input type='text' class='form-control' 
name='quantity[][".$book_id."]' value='" . $cart_item['quantity']. "'></td>";
    echo '<td>' . sprintf('$%.2f',  $book_total) . '</td>';
    echo '<td><input type="submit" name="remove['.$book_id.']" value="Remove" class="btn"></a></td>';
    echo '</tr>';
}

if(count($_SESSION['cart']) > 0) {
    echo "<td><input type='submit' name='update' value='Update' class='btn'></td>";
}
echo '<tr> <td>&nbsp</td><td>&nbsp</td><td>TOTAL</td><td>' . sprintf('$%.2f', $grand_total) . '</td>';
echo '</table>';
echo '</form>';
?>
    </body>
</html>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM