2014-01-28 46 views
0

值我有一個簡單的購物車的項目我的工作,在那裏我拉出來的信息我的數據庫中刪除購物車中的單個項目。此購物車的一個組件是刪除單個項目的能力。它的大部分工作。我無法弄清楚的是這個關於索引的bug。這是我的代碼。之後我會解釋這個問題。

$cartoutput = ""; 
$cartTotal=""; 

if(!isset($_SESSION["cart_array"]) || count($_SESSION["cart_array"]) < 1){ 
    $cartoutput = "<div align='center'><font style='font-weight: bold; font-size: 20pt;'>Your order is currently empty.</font></div>"; 
}else{ 
    $i=1; 

    foreach ($_SESSION["cart_array"] as $each_item) { 
     $item_id = $each_item['item_id']; 
     $result = mysqli_query($con,"SELECT * FROM menuitem WHERE id='$item_id' LIMIT 1"); 
      if (!$result) { 
      printf("Error: %s\n", mysqli_error($con));// Displays the error that mysql will generate if syntax is not correct. 
      exit(); 
      } 


      //echo mysqli_num_rows($result); 
     while ($row = mysqli_fetch_array($result)) { 

       $id = $row['id'];  
       $product_name = $row["name"]; 
       $price = $row["price"]; 
       $description = $row['description'];    
     } 


      $cartoutput .= " <tr><td width='20%'> Order Item $i </td> 
          <td width='40%'> " . $product_name . "</td> 
          <td width='20%'> $" . $price . ".00</td>"; 

      $cartoutput .=" <td width='20%'><form action='cart.php' method='post'> 
          <input name='deleteBtn" . $item_id . "'type='submit' value='Remove This Item' /> 
          <input name='index_to_remove' type='hidden' value='" . $i . "' /> 
          </form></td></tr>"; 
      $i++; 



    } 
} 

關注的領域是$ cartoutput,我使用表單來刪除一個項目。我使用的值是$i,它的大部分工作。這是處理該表格的代碼:

if (isset($_POST['index_to_remove']) && $_POST['index_to_remove'] != "") { 
    // Access the array and run code to remove that array index 
    $key_to_remove = $_POST['index_to_remove']; 
    if (count($_SESSION["cart_array"]) <= 1) { 
     unset($_SESSION["cart_array"]); 
     header("location: cart.php"); 
     } else { 
     unset($_SESSION["cart_array"]["$key_to_remove"]); 
     //sort($_SESSION["cart_array"]); 
    } 
} 

我遇到的問題是當我有3個或更多項目時。如果我的購物車中有$i=3,並且用戶刪除了第二項($i=2),那麼它將被刪除。然後$i=3變得$i=2,如果你嘗試刪除$ I = 2再次(或第二項再次)我的代碼不能正常工作,因爲它不會刪除替換被刪除的項新指標。

我嘗試過幾乎一切。我改變了表單,嘗試設置不同的參數。沒有任何工作。有沒有人有任何想法如何解決這個錯誤?我會選擇正確的答案。謝謝!

+0

檢查我的答案更新下面 –

回答

0

1-數字數組是0基索引

2-項刪除後,重新排序陣列。例如:

unset($_SESSION["cart_array"][$key_to_remove]); 
$_SESSION["cart_array"] = array_values($_SESSION["cart_array"]); 

UPDATE

您也可以使用這個語法,沒有必要再爲了你的車陣。

foreach ($_SESSION["cart_array"] as $i => $each_item) { 
    $item_id = $each_item['item_id']; 
    $result = mysqli_query($con,"SELECT * FROM menuitem WHERE id='$item_id' LIMIT 1"); 
     if (!$result) { 
     printf("Error: %s\n", mysqli_error($con));// Displays the error that mysql will generate if syntax is not correct. 
     exit(); 
     } 


     //echo mysqli_num_rows($result); 
    while ($row = mysqli_fetch_array($result)) { 

      $id = $row['id'];  
      $product_name = $row["name"]; 
      $price = $row["price"]; 
      $description = $row['description'];    
    } 


     $cartoutput .= " <tr><td width='20%'> Order Item $i </td> 
         <td width='40%'> " . $product_name . "</td> 
         <td width='20%'> $" . $price . ".00</td>"; 

     $cartoutput .= " <td width='20%'><form action='cart.php' method='post'> 
         <input name='deleteBtn" . $item_id . "'type='submit' value='Remove This Item' /> 
         <input name='index_to_remove' type='hidden' value='" . $i . "' /> 
         </form></td></tr>"; 

} 

$i將是每次迭代中的項目索引。

希望它有幫助。

+0

沒有工作,對不起。我可以刪除第二個項目,然後第三個項目成爲新的第二個項目,但是當我再次點擊刪除按鈕時(在新的第二個項目上),它實際上並沒有被刪除。就像以前一樣。 – user3150191

+0

刪除後是否刷新頁面? –

+0

我只是試着刷新頁面,它仍然無法正常工作。不知道該從哪裏出發。 – user3150191