2017-09-02 71 views
1

我正在編寫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

+1

爲什麼你需要存儲'size'?保存已添加到會話中的購物車項目作爲項目標識'$ _SESSION ['id'] [$ item_id] = $ item_id'的數組。當從購物車中刪除商品時,請使用'unset($ _ SESSION ['id'] [$ item_id])''。當顯示購物車項目時,使用循環foreach($ _SESSION ['id']作爲$ item_id)''。 – JungleZombie

+0

謝謝您的輸入!重新使用數組後,我按照你的建議實現了結構。 – iMrFelix

回答

2

無法更改字符串的長度。當您將一個空字符串分配給一個字符串字符時,它不會將所有其他字符轉移過來,它會將該字符代碼0置於該位置。您可以使用此代碼中看到它:

$str = "abcdef"; 
$str[1] = ""; 
echo $str; //acdef 
echo ord($str[1]); // 0 

所以它等同於:

$str[1] = chr(0); 

相反,如果你嘗試分配多個字符,它只是分配的第一個字符:

$str[1] = "xyz"; 

行爲,如:

$str[1] = "x"; 

不要嘗試使用字符串作爲數組,這不是它的目的。使用真正的數組,然後你可以使用unset($_SESSION['id'][$i]);

+0

你是男人! 我使用字符串而不是數組僅僅是一個愚蠢的殘留物,當我第一次開始的時候,就是一個愚蠢的殘留物!我使用多維數組''_SESSION ['products'] = [「product ID」,「size」]'重新編排了所有內容,這樣我就可以輕鬆地從購物車中刪除條目了!爲了防止for循環給我錯誤,每次刪除產品時都會對數組進行排序。 – iMrFelix