簡體   English   中英

從會話購物車中刪除項目數組

[英]Remove array of items from session shopping cart

我在會話購物車中保存了一系列項目。 它被填充到一個表中。 每行都有一個索引和一個按鈕,用於從 $_SESSION['cart'].. 中刪除此特定項目(項目數組)。

這是我目前的代碼:

 $i = 0;
 foreach($_SESSION['cart'] as $item)
{
    //Populate items in a table  ?>
<tr>
<td><center><?php echo $i; ?></center></td>
<td><center><?php echo $item['item'];?></center></td>
<td><center><?php echo '£'. $item['unitprice'];?></center></td>
<td><center><?php echo $item['quantity'];?></center></td>
    <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td>
<td><input type="submit" value="Remove" Onclick =  unset($_SESSION['cart'][$i]); ></td>
</tr>
<?php
 $total += ($item['unitprice'] * $item['quantity']);
$i++;
}

我想要做的就是從會話購物車中刪除一行數據(每行包含索引、項目、項目價格、總計(如果有多個項目)和刪除按鈕)。 提前致謝..

unset 是正確的,但是 PHP 是在服務器端執行的。 因此,因為這是一個客戶端操作,所以您需要使用 JavaScript 來選擇該操作。 (您也可以使用舊的 fasion 形式)。 我更喜歡使用 jQuery,因為它已經內置了 ajax 支持並且很容易使用。 基本上,只需從傳遞要刪除的元素的“ID”的 onClick 調用一個函數。 然后該函數將對另一個腳本進行 AJAX 調用,該腳本將獲取該 ID 並刪除該元素。 當該腳本返回成功時,讓 JavaScript 刪除(或隱藏)該元素。 這樣用戶永遠不會離開或刷新頁面,腳本可以做一些額外的清理(如數據庫更新、會話更新、驗證請求等)

i = 0;
 foreach($_SESSION['cart'] as $item)
{
    //Populate items in a table  ?>
<tr>
<td><center><?php echo $i; ?></center></td>
<td><center><?php echo $item['item'];?></center></td>
<td><center><?php echo '£'. $item['unitprice'];?></center></td>
<td><center><?php echo $item['quantity'];?></center></td>
    <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td>
<td><input type="submit" value="Remove" onClick="RemoveItem(<?= $i ?>)" ></td>
</tr>
<?php
 $total += ($item['unitprice'] * $item['quantity']);
$i++;
}

在這里,我已將 onClick 部分更改為使用 javascript 調用。 您會注意到我使用了<?= tag而不是完整的<?php echo 這是因為從 php5 開始,您可以使用簡寫<?=來回顯表達式。

在你的腳本部分,你可以做這樣的事情。 我使用 POST 因為它更安全。

function RemoveItem(id) {
   $.post('script-to-remove.php',
      { ItemID: id },
      function(data) {
         if(data==='success') {
            //Remove item from DOM
         } else alert("There was an error!"); //If you want error handling
      }
   );
}

為了從 dom 中刪除項目,它對表格有點棘手,因為沒有一個很酷的效果真的有效,例如淡出、滑動、動畫等。我會考慮用 div 重新格式化它。

至於它調用的php腳本,就跟調用unset一樣簡單。 您可以進一步開發它,以便可能檢查請求的有效性,但現在,我只是要取消設置。

<?php 
$ItemID = isset($_POST['ItemID'])?intval($_POST['ItemID']):-1;
if($ItemID<0) die("Invalid ID"); //Change this if you want
if(isset($_SESSION['cart'][$ItemID])) unset($_SESSION['cart'][$ItemID]);
echo 'success';
?>

基本上在這里,我首先檢查輸入的參數是否正確,確保它是一個整數並保存它,否則我默認它為-1。 然后,如果項目 ID 低於 0(所以肯定是錯誤的),我會告訴腳本輸出消息並退出。 最后,我檢查該 ID 或索引是否有實際值,然后取消設置。 如果成功,則輸出成功。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM