0

我正在使用 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);
            }
        }
    }
4

1 回答 1

1

第一个烦恼:你应该关闭你的<input>标签,只是为了 XHTML。

<input type="submit" name="RemoveFromCart" value="Remove" />

我不确定这是做什么用的:

$n = count($_POST['itemsre']);
for($i = 0; $i < $n; $i++)
{

}

它似乎在您的文件中未使用。同样,它不应该对问题产生太大影响,但它会在确实不需要代码的地方添加代码。

我认为问题最终在于:

while($result)
{
    unset($result);
}

PHPunset基本上破坏了局部变量。这将运行一次,destroy $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)");
        }
    }
于 2012-11-29T14:10:09.260 回答