我正在編寫webstore的購物車的過程。現在,我試圖添加一個「從購物車中刪除」按鈕。PHP - 從字符串中刪除字符不會改變strlen()
我設置的方式是$_SESSION['id']
包含客戶添加到購物車的所有產品ID,然後通過循環創建包含5列的表格:img |名稱|大小|價格| 「從購物車中取出」 - 巴頓。
我的目標是點擊按鈕後,產品將從$_SESSION['id']
中簡單地刪除。由於變量中現在有一個較少的項目,因此strlen($_SESSION['id'])
也應該降低一個。
由於for循環將當前迭代添加到其名稱中,因此每個按鈕都有唯一的名稱:<td valign="middle"><form action="#" method="post"><input type="submit" name=" delete_<?php echo $i; ?>" value="Remove"></form></td>
。
要檢查這些按鈕中的一個被按下,我成立另一個for循環:
if (isset($_SESSION['id'])) {
for ($i=0; $i < strlen($_SESSION['id']); $i++) {
if (isset($_POST['delete_'.$i])) {
$_SESSION['id'][$i]=""; //removes item from $_SESSION['id']. Instead of "" I also tried NULL
$_SESSION['size'][$i]=false; //removes corresponding size.
//I may be mistaken, but PRG should be implemented to avoid problems with the form being resent upon refreshing the page
header("Location: ".$_SERVER['REQUEST_URI']);
exit();
}
}
}
一旦按鈕被點擊,該項目確實從$_SESSION['id']
字符串刪除,但古怪足夠的字符串長度保持不變。
執行var_dump ($_SESSION['id']);
添加並從購物車中移除3個項目後,結果爲:string(3) ""
。那麼,這個字符串的長度是3,但不包含任何內容?怎麼可能?
這顯然會造成一些挑戰!由於表格行是基於strlen($_SESSION['id'])
創建的,因此我剩下的3行(或者我從購物車中移除的很多產品)中充滿了錯誤消息,告訴我關於「未定義索引」的信息。它不會說「未初始化的字符串偏移量」,所以這對我來說意味着偏移量已經存在,但根本沒有任何工作要處理。
任何幫助將強烈appreaciated! Felix
爲什麼你需要存儲'size'?保存已添加到會話中的購物車項目作爲項目標識'$ _SESSION ['id'] [$ item_id] = $ item_id'的數組。當從購物車中刪除商品時,請使用'unset($ _ SESSION ['id'] [$ item_id])''。當顯示購物車項目時,使用循環foreach($ _SESSION ['id']作爲$ item_id)''。 – JungleZombie
謝謝您的輸入!重新使用數組後,我按照你的建議實現了結構。 – iMrFelix