从多个复选框中获取$ _POST

时间:2011-02-14 21:04:29

标签: php html forms checkbox

我有1个表格,里面有多个复选框(每个都有代码):

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

其中$row['Report ID']是数据库中的主键 - 因此每个值都不同。

我如何判断哪些复选框已经过检查? (也许是多个)

这是针对收件箱系统的,我在下面有一个按钮,我想要(点击时)删除所有选中复选框的邮件($row['Report ID'])。

6 个答案:

答案 0 :(得分:313)

将表单中的名称设置为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.
    }
}
?>

答案 1 :(得分: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
}

答案 2 :(得分:16)

您必须相应地命名您的复选框:

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

然后,您可以使用

访问所有选中的复选框
// loop over checked checkboxes
foreach($_POST['check_list'] as $checkbox) {
   // do something
}

PS。确保正确地逃避输出(htmlspecialchars()

答案 3 :(得分: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/>";
}

答案 4 :(得分:12)

对不起,老话题,但这是一个重要的部分要提及,@ JamesRattray和其他人有问题。

当您尝试将多个值发布到PHP脚本时,请勿自行关闭input标记(使用/>)。当您自行关闭标记时,它会结束数组定义,并且在提交时只会向您的脚本发布一个值。实际上,在/>发生变化之前,@ Scone的答案可能无效。

这是导致Warning: Invalid argument supplied for foreach() in /home1/... PHP错误的原因。

编辑:如下面的评论中所述,进一步的研究表明这取决于DOCTYPE。如果您为XHTML设置了DOCTYPE,则需要关闭输入标记。如果您有DOCTYPE设置的HTML5,则需要不关闭输入标记。也有可能这可能取决于用户正在查看该页面的浏览器以及它遵循代码中指定的DOCTYPE的程度。

答案 5 :(得分: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

取决于哪些被检查,哪些没有。

我相信你可以继续这一点。