2011-02-14 59 views
134

_POST $ I具有與在它多個複選框(每個具有的代碼)1種形式:獲得從多個複選框

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>"> 

$row['Report ID']是在數據庫中的主鍵-SO每個值是不同的。

我該如何判斷哪個複選框已被選中? (也許倍數)

(在上下文:)它的收件箱系統,我有一個按鈕下面,我想(當點擊)刪除所有消息(編號爲$row['Report ID']),其中複選框的選中...

我該怎麼做?

非常感謝......

回答

283

形式將名稱設置爲check_list[],你將能夠訪問所有複選框作爲一個數組($_POST['check_list'][])。

這裏的要求有點樣品:

<form action="test.php" method="post"> 
<input type="checkbox" name="check_list[]" value="value 1"> 
<input type="checkbox" name="check_list[]" value="value 2"> 
<input type="checkbox" name="check_list[]" value="value 3"> 
<input type="checkbox" name="check_list[]" value="value 4"> 
<input type="checkbox" name="check_list[]" value="value 5"> 
<input type="submit" /> 
</form> 
<?php 
if(!empty($_POST['check_list'])) { 
    foreach($_POST['check_list'] as $check) { 
      echo $check; //echoes the value set in the HTML form for each checked checkbox. 
         //so, if I were to check 1, 3, and 5 it would echo value 1, value 3, value 5. 
         //in your case, it would echo whatever $row['Report ID'] is equivalent to. 
    } 
} 
?> 
+2

你能給我一個echo(ing)check_list []複選框的例子嗎? (這兩個選擇會相似嗎?)謝謝。 – 2011-02-14 21:09:42

+3

編輯我的原始答案。 – 2011-02-14 21:22:04

+2

我還應該指定如果在HTML中沒有設置值,`$ check`將等於`on`。 – 2011-02-14 21:26:30

12
<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>"> 

和後置後,可以循環通過他們:

if(!empty($_POST['check_list'])){ 
    foreach($_POST['check_list'] as $report_id){ 
     echo "$report_id was checked! "; 
    } 
    } 

或者從以前的頁面貼出了一定的價值:

if(isset($_POST['check_list'][$report_id])){ 
    echo $report_id . " was checked!<br/>"; 
} 
14

你必須因此命名複選框:

<input type="checkbox" name="check_list[]" value="…" /> 

你就可以訪問所有選中的複選框與

// loop over checked checkboxes 
foreach($_POST['check_list'] as $checkbox) { 
    // do something 
} 

PS。確保妥善逃避你的輸出(htmlspecialchars()

5

這很簡單。注意,你馬上就會得到它! :)

您將創建一個html數組,然後將發送到php數組。 你的HTML代碼如下所示:

<input type="checkbox" name="check_list[1]" alt="Checkbox" value="checked"> 
<input type="checkbox" name="check_list[2]" alt="Checkbox" value="checked"> 
<input type="checkbox" name="check_list[3]" alt="Checkbox" value="checked"> 

[1] [2] [3]ID是你的消息,這意味着你會在自己的位置echo$row['Report ID']

然後,當您提交表單,你的PHP數組看起來就像這樣:

print_r($check_list)

[1] => checked [3] => checked

根據其進行了檢查,哪些不是。

我相信你可以從這一點繼續前進。

21

編輯爲了體現@Marc在下面的評論中所說的話。

您可以通過所有發佈的值進行循環。

HTML:

<input type="checkbox" name="check_list[]" value="<?=$rowid?>" /> 
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" /> 
<input type="checkbox" name="check_list[]" value="<?=$rowid?>" /> 

PHP:

foreach($_POST['check_list'] as $item){ 
    // query to delete where item = $item 
} 
12

對不起,老話題,但就不得不提到這一點,這@JamesRattray和其他人具有一個問題重要的一塊。

當您嘗試將多個值發佈到PHP腳本時,請勿自行關閉input標記(使用/>)。當你自己關閉標籤時,它會結束數組定義,並且只有在提交時將一個值發佈到腳本中。實際上@Scone的答案在/>更改之前可能無法正常工作。

這是在這種情況下導致Warning: Invalid argument supplied for foreach() in /home1/... PHP錯誤的原因。

編輯:正如在下面的評論中指出的,進一步的研究表明這取決於DOCTYPE。如果您將DOCTYPE設置爲XHTML,則需要關閉輸入標記。如果您的DOCTYPE設置爲HTML5,則需要關閉輸入標記。這也可能由用戶查看頁面的瀏覽器決定,以及它遵循代碼中指定的DOCTYPE的效果。