从多个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
取决于哪些被检查,哪些不是。
我相信你可以从这一点继续下去。