我正在使用PHP和PostgreSQL创建购物车。我已经设法使用存储在数组中的参考号将物品放入购物车。我试图创建删除功能,允许用户点击一个复选框(就像我将项目添加到购物车),然后删除该项目,但它似乎只是刷新页面和删除表。
到目前为止我的代码:
<form action="shoppingcart.php" method="post" style="width: 80%">
<input type="submit" name="RemoveFromCart" value="Remove">
<?php
if(isset($_POST['itemsre']))
{
$n = count($_POST['itemsre']);
for($i = 0; $i < $n; $i++)
{
}
$items = array();
foreach($_POST['itemsre'] as $item)
{
$items[] = pg_escape_string($con, $item);
}
if(!$_SESSION["deletingrows"])
{
$item_string = "'" . implode("','", $items) . "'";
$result = pg_query($con, "SELECT title, platform, description, price FROM CSGames WHERE refnumber IN ($item_string)");
while($result)
{
unset($result);
}
}
}
答案 0 :(得分:1)
第一个烦恼:你应该关闭你的<input>
标签,只是为了XHTML。
<input type="submit" name="RemoveFromCart" value="Remove" />
我不确定这是用于什么:
$n = count($_POST['itemsre']);
for($i = 0; $i < $n; $i++)
{
}
它似乎在您的文件中未使用。同样,它不应该过多地影响问题,但它会添加代码,而不需要代码。
我认为最终的问题在于:
while($result)
{
unset($result);
}
PHP的unset
基本上会破坏局部变量。这将运行一次,销毁$result
,然后抛出一个E_NOTICE,声明$result
未定义。看看你如何使用它,你可能想要将你的查询更改为:
$result = pg_query($con, "DELETE FROM CSGames WHERE refnumber IN ($item_string)");
这将从您的CSGames表中删除,其中参考编号位于您的项目字符串中。但是,如果多个用户正在使用此功能,则删除一个人的购物车项目可能会删除其他人的购物车项目。您需要维护一个cartID(如果用户不登录,可以设置为会话ID,如果用户必须登录,则可以设置为用户ID)。
因此,您的目标如下:
<form action="shoppingcart.php" method="post" style="width: 80%">
<input type="submit" name="RemoveFromCart" value="Remove" />
<?php
if(isset($_POST['itemsre']))
{
$items = array();
foreach($_POST['itemsre'] as $item)
{
$items[] = pg_escape_string($con, $item);
}
if(!$_SESSION["deletingrows"])
{
$item_string = "'" . implode("','", $items) . "'";
$cartID = $_SESSION['userID']; // This must be changed to how you maintain unique users!
$result = pg_query($con, "DELETE FROM CSGames WHERE cartID=$cartID AND refnumber IN ($item_string)");
}
}