2011-03-10 73 views
2

我有一個購物車,並希望從購物車中刪除一個項目的選項。我不想使用JavaScript。購物車中的物品通過抓取會話變量在php中循環,並顯示在一個表格中,可以選擇刪除該物品。截至目前,我有多個輸入提交的「remvove item」鏈接,並且在我的for循環中,我有這些輸入標籤是使用該項目的ID生成的。形式多個提交按鈕

<input type="hidden" name="id[]" value="<?php echo $uniqueid; ?> 
<input type="submit" name="remove" value="removeitem" class="otherbtns" /> 

我的問題是在我的腳本處理後的變量無法知道其爲「removeItem」被點擊的鏈接,從而去掉第一個方法。我只是有點尋找最好的方式來處理這種沒有JS的東西。

謝謝

+0

我不認爲有一種方法可以在沒有Javascript的情況下實現你想要的,另一種方法是有複選框和刪除項目按鈕。 – Jacob 2011-03-10 01:47:25

回答

3

你可能會爲動作屬性製作多個不同值的表單嗎?

+0

然後你不能有一個整體形式的購物車。表單不能在表單中。 – Jacob 2011-03-10 01:51:00

+0

如果您正確配置會話變量,則不需要整體表單。 – 2011-03-10 01:53:00

+0

另一種替代方法是從購物車按鈕中刪除鏈接以說「http://www.example.com/cart?removeID=123」。然後,相應地處理$ _GET變量。 – 2011-03-10 01:54:55

0

如果你不介意的id值暴露給用戶,快速正骯髒的方式來解決它會改變每個value屬性提交按鈕:

<input type="submit" ... value="removeitem <?php echo $uniqueid ?>" /> 

然後,當表單發送到服務器,您可以使用PHP解析和檢查值。根據你的ID有多複雜,你可以做一些簡單的事情:

$value = $_POST['remove']; 
$value = explode(' ', $value); 
$value = $value[1]; 

......這就理論上給你你需要的ID。

+0

謝謝你會這樣做,我沒有看到任何與用戶知道我的物品ID的風險 – 2011-03-10 01:57:44

0

你可以用一個簡單的鏈接到同一頁面處理這個問題,但在$ _GET收集信息,並通過一個腳本運行:

<a href="cart.php?remove=yes&item_to_remove=<?php echo item_id; ?>">Remove</a> 

在PHP腳本然後

if ((isset($_GET['remove']))and($_GET['remove'] == 'yes')){ 
    //then remove the item from the session var by removing the $_GET['item_to_remove'] 
} 
+0

從來沒有想過這樣做這樣做..謝謝! – 2011-03-10 02:02:46

+0

正如我評論泰勒所說的那樣,它反對使用GET的HTTP規範來做這樣的事情。 – Jacob 2011-03-10 02:06:49

+1

看看爲什麼不使用GET。 http://programmers.stackexchange.com/questions/56522/is-there-ever-a-situation-where-its-ok-to-initiate-a-delete-on-a-get/56526#56526 – Jacob 2011-03-10 05:44:25

2

使用多種形式。您可以在腳本中使用任意數量的表單,每個表單提交一份。不要走js提交表單的路徑 - >如果你這樣做,小貓就會死亡。

1

從數據庫中讀取您的$id[$i]並保存記錄量$count 然後檢查,如果你需要刪除的內容:

for ($i = 0; $i <= $count; $i++) { 
    if (isset($_POST[$id[$i]])) { 
    remove your $id[$i] from database 
    } 
} 

然後從數據庫中再次讀取您的$id[$i]並保存記錄量$count

for ($i = 0 ; $i <= $count; $i++) { 
    echo '<input type="submit" name="'.$id[$i]'." value="removeitem">'; 
}