[英]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> </td> <td> </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> </td><td> </td><td>TOTAL</td><td>' . sprintf('$%.2f', $grand_total) . '</td>';
echo '</table>';
echo '</form>';
?>
</body>
</html>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.