【发布时间】:2017-06-17 20:09:46
【问题描述】:
我正在学习一些 PHP,我正在尝试创建一个多合一的购物车。
我已经阅读并看到了 SQL 基础系统的好处,但我想先学习基础知识。在这样做的过程中,我创建了一个包含关联数组中的产品的一体化页面,以及一个提交给自身的表单。
我想要实现的是:
- 一个产品只能购买一次(购买按钮替换为移除按钮)
- 商品及其成本已添加到下方的购物车中
- 用户可以将其从购物车或商品列表中删除
- 应根据需要更新总费用。
- “结帐”按钮将提交商品名称和费用
- 表单发布到自身,不需要任何 SQL
我目前的问题是:
- 我一次不能购买超过一件商品,即购物车只包含最后购买的商品
- 我无法让它“检查”某件商品是否已购买,如果是,请将“购买”替换为“删除”
- 我无法在购物车中显示商品详情
- 结帐按钮未将任何详细信息传递给我的测试
同样,我还没有在寻找 SQL 解决方案,只是使用 $_SESSION 和 $_POST 的纯 PHP,并希望使用按钮而不是 <a href add?> 类型的链接。
感谢您提前阅读这里的代码:
<?php
session_start ();
$items = array (
'A123' => array (
'name' => 'Item1',
'desc' => 'Item 1 description...',
'price' => 1000
),
'B456' => array (
'name' => 'Item40',
'desc' => 'Item40 description...',
'price' => 2500
),
'Z999' => array (
'name' => 'Item999',
'desc' => 'Item999 description...',
'price' => 9999
)
);
if (! isset ( $_SESSION ['cart'] )) {
$_SESSION ['cart'] = array ();
}
// Add
if (isset ( $_POST ["buy"] )) {
$_SESSION ['cart'] = $_POST;
}
// Delete Item
else if (isset ( $_POST ['delete'] )) { // a remove button has been clicked
unset ( $_POST ['delete'] ); //
}
// Empty Cart
else if (isset ( $_POST ["delete"] )) { // remove item from cart
unset ( $_SESSION ['cart'] );
}
?>
<form action='<?php echo $_SERVER['PHP_SELF']; ?>' method='post'>
<?php
foreach ( $items as $ino => $item ) {
$title = $item ['name'];
$desc = $item ['desc'];
$price = $item ['price'];
echo " <p>$title</p>";
echo " <p>$desc</p>";
echo "<p>\$$price</p>";
if ($_SESSION ['cart'] == $ino) {
echo '<img src="carticon.png">';
echo "<p><button type='submit' name='delete' value='$ino'>Remove</button></p>";
} else {
echo "<button type='submit' name='buy' value='$ino'>Buy</button> ";
}
}
?>
</form>
<?php
if (isset ( $_SESSION ["cart"] )) {
?>
<form action='(omitted link)'
target='_blank' method='post'
enctype='application/x-www-form-urlencoded'>
<table>
<tr>
<th>Product</th>
<th>Price</th>
<th>Action</th>
</tr>
<?php
$total = 0;
foreach ( $_SESSION ["cart"] as $i ) {
?>
<tr>
<td>
<?php echo($_SESSION["cart"]); ?> <!--Item name-->
</td>
<td>price<?php echo($_SESSION["price"][$i] ); ?>
<!--Item cost-->
</td>
<td><button type='submit' name='delete' value='$ino'>Remove</button>
</p></td>
</tr>
<?php
$total = + $_SESSION ["amounts"] [$i];
}
$_SESSION ["total"] = $total;
?>
<tr>
<td colspan="2">Total: $<?php echo($total); ?></td>
<td><input type='submit' value='Checkout' /></td>
</tr>
<tr>
<td><button type='submit' name='clear'>Clear cart</button></td>
</tr>
</table>
</form>
<?php } ?>
【问题讨论】:
-
您一直在此行覆盖您的购物车内容
$_SESSION ['cart'] = $_POST;您需要将当前会话与$_POST数组合并。 -
您没有使用 php 在此处回显:
value='$ino',您将需要value='<?php echo $ino ?>',尽管我看不到您在哪里设置$ino。也许我只是想念它。我只在那个循环上面的循环中看到它......在那个循环中它不会按预期工作。 -
我添加了一个答案,它分解了所需的各种更新。如果我遗漏了什么或者您想进一步澄清,请告诉我。
标签: php html session shopping-cart cart