从多个复选框中获取$ _POST

Jam*_*ray 151 html php forms checkbox

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

<input type="checkbox" name="check_list" value="<? echo $row['Report ID'] ?>">
Run Code Online (Sandbox Code Playgroud)

$row['Report ID']数据库中的主键在哪里 - 每个值都不同.

我怎样才能知道检查了哪些复选框?(也许是多个)

这是一个收件箱系统,我有一个按钮,我想要(点击时)删除所有$row['Report ID']选中复选框的消息(ID:).

Sea*_*lsh 316

在表单中设置名称,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.
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

  • `if($ _ POST)` - 无用,`$ _POST`将永远为真.你应该检查`!empty($ _ POST ['check_list'])`. (9认同)
  • 你能给我一个echo(ing)一个check_list []复选框的例子吗?(对于两个被选中的人来说会有类似的吗?)谢谢. (3认同)
  • 编辑了我原来的答案. (3认同)
  • @MārtiņšBriedis如果不存在则会导致数组索引超出范围.更好的检查是`array_key_exists('check_list',$ _POST)&&!empty($ _ POST ['check_list'])` (3认同)
  • 我还应该指定,如果HTML中没有设置值,`$ check`将等于`on`. (2认同)
  • @Tyzoid` empty()`不会导致此错误.从手册:如果变量不存在,`empty()不会生成警告.` (2认同)

Sco*_*one 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?>" />
Run Code Online (Sandbox Code Playgroud)

PHP:

foreach($_POST['check_list'] as $item){
  // query to delete where item = $item
}
Run Code Online (Sandbox Code Playgroud)

  • 这只有在字段定义中使用`[]`语法时才有效,这使PHP将$ _POST值创建为数组.否则它将是一个非数组值,导致foreach()循环爆炸. (2认同)

kni*_*ttl 16

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

<input type="checkbox" name="check_list[]" value="…" />
Run Code Online (Sandbox Code Playgroud)

然后,您可以访问所有选中的复选框

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

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


Mār*_*dis 12

<input type="checkbox" name="check_list[<? echo $row['Report ID'] ?>]" value="<? echo $row['Report ID'] ?>">
Run Code Online (Sandbox Code Playgroud)

在帖子之后,你可以循环它们:

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

或者从上一页发布一定值:

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


Jon*_*lup 12

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

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

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

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


Ric*_*uez 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">
Run Code Online (Sandbox Code Playgroud)

哪里[1] [2] [3]ID你的消息S,这意味着你将echo$row['Report ID']在自己的位置.

然后,当您提交表单时,您的PHP数组将如下所示:

print_r($check_list)

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

取决于检查哪些,哪些不是.

我相信你可以从这一点继续前进.

  • 请记住`check_list []`将以`check_list [0]`而不是`check_list [1]`开头. (6认同)
  • value="checked" 会适得其反。如果没有指定值,您将获得“on”。在 value 属性中指定要提交的值的优点是,您可以发送几乎任意数据,而不必成为 PHP 数组索引。使用 foreach 迭代数组值也比迭代键更容易。 (2认同)