从多个checkbox获取$ _POST

我有1个表单中有多个checkbox(每个代码):

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

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

我怎样才能知道哪个checkbox已经被选中? (也许多个)

(在上下文:)它的收件箱系统,我有一个button,我想(点击时)删除所有消息(ID的: $row['Report ID'] )的checkbox的检查…

我将如何做到这一点?

非常感谢…

将表单中的名字设置为check_list[] ,您将能够以数组的forms访问所有checkbox( $_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. } } ?> 

编辑为了反映@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 } 

你必须相应地命名你的checkbox:

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

然后你可以访问所有选中的checkbox

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

PS。 确保妥善逃避你的输出( htmlspecialchars()

 <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/>"; } 

对不起,老主题,但这是一个重要的提到这一点,这@JamesRattray和其他人有问题。

当您尝试将多个值发布到PHP脚本时,请勿自行closuresinput标记(使用/> )。 当你自己closures标签时,它将结束数组定义,并且只有在提交时将一个值发布到脚本中。 实际上@Scone的答案可能无法工作,直到/>更改。

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

编辑:正如在下面的评论中指出的,进一步的研究表明,这是依赖于DOCTYPE。 如果您将DOCTYPE设置为XHTML,则需要closuresinput标记。 如果您具有HTML5的DOCTYPE设置,则需要input标记不被closures。 这也可能由用户查看页面的浏览器决定,以及它如何遵循代码中指定的DOCTYPE。

这很简单。 注意,你会马上得到它! 🙂

您将创build一个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

取决于哪些被检查,哪些不是。

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