PHP 购物车添加商品
PHP Shopping Cart Add Items
我目前正在使用 PHP 开发购物车,我正在尝试弄清楚如何使用我编写的代码将商品添加到购物车本身。我的数据库中的项目显示正确,但只有 $item 下的最后一个数组被添加到购物车。以下显示项目。
$result = mysqli_query($cxn,$sql) or die("<p class='error'>Couldn't connect to server.</p>");
while($row = mysqli_fetch_assoc($result))
{
$product[] = $row;
}
foreach($product as $item)
{
echo "<div class='product'><form method='post'><div class='img_spacer'><div class='image'>";
include "images.inc";
echo "</div></div><div class='name'><h2>".$item['product']."</h2></div>";
echo "<div class='description'><p>".$item['description']."</p></div>";
echo "<div class='price'><p>".$item['price']."</p></div>";
echo "<div class='add_cart'><input type='hidden' name='add' value='yes'>
<input type='submit' name='add_cart' value='Add to Cart'>
</div></form></div>";
}
以下代码用于购物车本身。我目前将其设置为 print_r 已发送变量,以便我可以查看正在发布的信息。
<?php
if(isset($_POST['add']) and $_POST['add'] == 'yes')
{
$selected = "select product_ID, product, price from product where product_ID='".$item['product_ID']."'";
$result2 = mysqli_query($cxn,$selected);
while($row2 = mysqli_fetch_assoc($result2))
{
print_r($row2);
}
}
?>
我还尝试添加 $item['product_ID'] 变量使 'add' 输入唯一,使用
<input type='hidden' name='".$item['product_ID']."_add' value='yes'>
但我不知道如何向 $_POST 数组添加另一个变量。我还应该提到我正在为这个项目使用会话,我不太确定如何将他们的购物车添加到 $_SESSION 变量中。我该如何解决这个问题?
您需要向表单中添加更多隐藏字段。至少:
<input type='hidden' name='product_ID' value='".$item['product_ID']."'>
这将在用户单击 Add to Cart
时向 $_POST 数组添加另一个变量。
在每一页的开头,您应该调用 session_start();
。然后,只需将购物车的值分配给会话变量,如下所示:
if(isset($_POST['add']) and $_POST['add'] == 'yes') {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart']=array();
}
array_push($_SESSION['cart'], $_POST);
}
然后(当用户下订单时)您将清理输入,以防止 SQL 注入,并添加一个新的 SQL 查询,例如;
//submit selected items
foreach ($_SESSION['cart'] as $cart_item) {
$pid=scrub($cart_item['product_ID']);
$amount=scrub($cart_item['amount']);
$inserted = "INSERT INTO orders (user, product_id, amount, when) VALUES (".$uid.", ".$pid.", ".$amount.", NOW())";
$result3 = mysqli_query($cxn,$inserted);
}
当然,您必须创建函数 scrub
来擦除您的输入,但这超出了问题的范围。
我目前正在使用 PHP 开发购物车,我正在尝试弄清楚如何使用我编写的代码将商品添加到购物车本身。我的数据库中的项目显示正确,但只有 $item 下的最后一个数组被添加到购物车。以下显示项目。
$result = mysqli_query($cxn,$sql) or die("<p class='error'>Couldn't connect to server.</p>");
while($row = mysqli_fetch_assoc($result))
{
$product[] = $row;
}
foreach($product as $item)
{
echo "<div class='product'><form method='post'><div class='img_spacer'><div class='image'>";
include "images.inc";
echo "</div></div><div class='name'><h2>".$item['product']."</h2></div>";
echo "<div class='description'><p>".$item['description']."</p></div>";
echo "<div class='price'><p>".$item['price']."</p></div>";
echo "<div class='add_cart'><input type='hidden' name='add' value='yes'>
<input type='submit' name='add_cart' value='Add to Cart'>
</div></form></div>";
}
以下代码用于购物车本身。我目前将其设置为 print_r 已发送变量,以便我可以查看正在发布的信息。
<?php
if(isset($_POST['add']) and $_POST['add'] == 'yes')
{
$selected = "select product_ID, product, price from product where product_ID='".$item['product_ID']."'";
$result2 = mysqli_query($cxn,$selected);
while($row2 = mysqli_fetch_assoc($result2))
{
print_r($row2);
}
}
?>
我还尝试添加 $item['product_ID'] 变量使 'add' 输入唯一,使用
<input type='hidden' name='".$item['product_ID']."_add' value='yes'>
但我不知道如何向 $_POST 数组添加另一个变量。我还应该提到我正在为这个项目使用会话,我不太确定如何将他们的购物车添加到 $_SESSION 变量中。我该如何解决这个问题?
您需要向表单中添加更多隐藏字段。至少:
<input type='hidden' name='product_ID' value='".$item['product_ID']."'>
这将在用户单击 Add to Cart
时向 $_POST 数组添加另一个变量。
在每一页的开头,您应该调用 session_start();
。然后,只需将购物车的值分配给会话变量,如下所示:
if(isset($_POST['add']) and $_POST['add'] == 'yes') {
if (!isset($_SESSION['cart'])) {
$_SESSION['cart']=array();
}
array_push($_SESSION['cart'], $_POST);
}
然后(当用户下订单时)您将清理输入,以防止 SQL 注入,并添加一个新的 SQL 查询,例如;
//submit selected items
foreach ($_SESSION['cart'] as $cart_item) {
$pid=scrub($cart_item['product_ID']);
$amount=scrub($cart_item['amount']);
$inserted = "INSERT INTO orders (user, product_id, amount, when) VALUES (".$uid.", ".$pid.", ".$amount.", NOW())";
$result3 = mysqli_query($cxn,$inserted);
}
当然,您必须创建函数 scrub
来擦除您的输入,但这超出了问题的范围。