0

こんにちは私はショッピングカートを持っていますが、複数のアイテムを削除すると処理されないという問題がありますが、チェックボックスで1つのアイテムだけを削除すると、以下のコードでうまく機能します。コードのどこが間違っているかを調べたいと思います。

 $cart = $_SESSION['items'];

if(isset($_POST['del'])) {

  if ($cart) {
  $newcart = array();
  foreach ($cart as $item) {

    foreach ($_POST['itemid'] as $del) {
        $delete = $del;
    }

    if ($del != $item) {

          if ($newcart != '') {
            $newcart[] = $item;
          } else {
            $newcart[] = $item;
          }

    }   


  }
  $cart = $newcart; 
  }

}

$_SESSION['items'] = $cart;

これが私のフォームです:

<form action="cart.php" method="post">
<table>
<tr>
<td><input type="checkbox" name="itemid[]" value="1"></td><td>Item 1</td><td>5</td>
</tr>
<tr>
<td><input type="checkbox" name="itemid[]" value="2"></td><td>Item 2</td><td>5</td>
</tr>
<tr>
<td><input type="checkbox" name="itemid[]" value="3"></td><td>Item 3</td><td>5</td>
</tr>
<tr>
<td><input type="checkbox" name="itemid[]" value="4"></td><td>Item 4</td><td>5</td>
</tr>
<tr>
<td colspan="2"><input type="submit" name="del" value="Delete"></td>
</tr>
</table>
</form>

複数のアイテムをチェックして削除ボタンを送信すると、アイテムは削除されませんでしたが、1つだけチェックするとアイテムが削除されました。

どうもありがとうございました。

4

1 に答える 1

0

コードにname="items"がありますが、$ _ POST ['itemid']を探しています-それらは互いに同じである必要がありますか?セッションの値と混同しているようです。


編集内容を投稿してください:

foreach ($_POST['itemid'] as $del) { 
    $delete = $del; 
} 

最後のアイテムのみを$deleteとして残します。あなたは試すことができます

foreach ($cart as $item) { 

    if (!in_array($item, $_POST['itemid'])) { 

        if ($newcart != '') { 
            $newcart[] = $item; 
        } else { 
            $newcart[] = $item; 
        } 

    }    
} 
于 2012-05-11T04:08:47.163 に答える