购物车有关更新数量和从购物车中移除商品的问题

时间:2019-04-29 19:47:47

标签: php cart shopping-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 \ Book Database Connect \ add_to_cart.php在第73行的总计总计$ 0.00

1 个答案:

答案 0 :(得分:0)

因此,我花了大量时间查看您的代码,以查看您要实现的目标。在不为您编写所有内容的情况下,这是一个非常基本的示例,没有进行验证就可以帮助您入门。您可以从数据库中添加产品信息,以及可以将商品添加到购物车的实际在线商店等。我添加了form和方法"POST"来处理提交更新数量或删除项目。 还有许多其他更好的替代方法可用于处理这种购物车逻辑,但由于您似乎不熟悉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>