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);
}

PHP はunset基本的にローカル変数を破棄します。これは 1 回実行され、 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 に答える