2009-12-22 40 views
24

我注意到PHP似乎只返回選中複選框的值。我希望看到複選框的列表,而不僅僅是選中複選框的值。有沒有辦法檢測未經檢查的框的變量?即使未從HTML檢查到PHP,我如何獲得所有複選框變量?

我問,因爲我想能夠更新設置。例如,我有幾個已經選中的選項,但是如果用戶決定取消選中一個選項,我需要知道未選中的值,以便我可以更新要禁用的選項。

+1

嗯,如果你能夠填充所有的複選框,你不應該能夠知道哪些是基於被檢查的那些未被選中的複選框嗎? – 2009-12-22 03:41:57

回答

57

我剛碰到這個問題。我通過添加重複的hidden字段來解決此問題。當瀏覽器發送此信息時,第二個字段將覆蓋第一個字段(因此請確保hidden字段在前)。

<input type="hidden" name="foo" value=""> 
<input type="checkbox" name="foo" value="bar"> 

如果checkbox未選中你:

$_REQUEST[ 'foo' ] == "" 

如果checkbox被選中你:

$_REQUEST[ 'foo' ] == "bar" 
+0

哇!真棒解決方案!感謝大家。 – netrox 2009-12-22 03:57:35

+0

一個非常聰明的主意! +1 – 2009-12-22 04:00:07

+2

它非常依賴於客戶的實施。 – 2012-12-19 08:51:49

0

純粹的PHP實現似乎不可能,你可以嘗試使用jQuery/AJAX。

2

這不是純粹用PHP來完成的。

瀏覽器只會發送有關複選框的信息(如果它們已選中),如果您還想發送有關未選中複選框的信息,則必須在表單中添加隱藏字段並使用JavaScript來管理它們。

0

假設你有要檢查3個複選框,並update_settings是你的函數的名稱,它把複選框的名字作爲第一個參數,把一個布爾值作爲第二個參數(激活或不激活)。

看看下面的代碼片段:

$checkboxes = array("checkbox1", "checkbox2", "checkbox3"); 
foreach($checkboxes as $checkbox){ 
    $checked = isset($_POST[$checkbox]); 
    update_settings($checkbox, $checked); 
} 

我們雖然Peter Kovacs解決它去上班,我不認爲這是不現實的,因爲你可以使用isset已經檢查您的變量。

1

我剛剛偶然發現了這個問題,我通過更新數據庫中的所有值來取消選中,然後重新檢查POST數據中的所有值,對此進行了排序,這對我來說很好,但可能不是每個人的茶。