我正在尝试一项家庭作业,包括将项目添加到购物车并更新它们并从购物车中删除项目。到目前为止,我已经能够添加项目,但是现在我面临着数量更新和项目删除的问题。谁能帮我吗?谢谢。
<?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 \ Book Database Connect \ add_to_cart.php在第73行的总计总计$ 0.00
答案 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> </td><td> </td><td>TOTAL</td><td>' . sprintf('$%.2f', $grand_total) . '</td>';
echo '</table>';
echo '</form>';
?>
</body>
</html>