这是我的表单,类别来自带有while循环的数据库。 我想将选中的输入只插入数据库。
如何检测选中的复选框?
<form action="account.php" method="POST">
<ul class="account-info">
<li>Category1 : <input type="checkbox" value="val1" name="cat1"></li>
<li>Category2 : <input type="checkbox" value="val2" name="cat1"></li>
<li>Category3 : <input type="checkbox" value="val3" name="cat1"></li>
<!-- while continues -->
<li>Category100 : <input type="checkbox" value="val100" name="cat1"></li>
</ul>
<input type="submit" value="submit" />
</form>
答案 0 :(得分:2)
在account.php
中,只会发布复选框。虽然您已将它们全部命名为相同,但只会发布1个,最后一个复选框。如果您希望它们具有相同的名称并以数组形式出现,则需要在名称后面添加[]
,如下所示:
<input type="checkbox" value="val100" name="cat1[]">
然后在他们提交的account.php
中,你可以这样做:
foreach($_POST['cat1'] as $val)
{
echo "$val<br>";
}
这将显示所有复选框的值。
答案 1 :(得分:0)
您可以这样检查: 此代码将检查哪些类别已激活 假设您的数据库返回从0到x的类别
$i = 0;
while(true){
if ($_POST["cat".$i."]) {
//category activated
}
else {
//no category found -> loop ends
break;
}
$i++;
}
答案 2 :(得分:0)
将name="cat1"
更改为name="cat[1][]"
在account.php
页
foreach($_POST['cat'] as $category){
foreach($category as $value){
echo $value;
}
}
答案 3 :(得分:0)
首先,您可以设置选项,就好像它们是具有相同名称的单选按钮,从3种可能中转换为1个值。如果你想让它们成为传统的复选框,你必须给它们单独的名称。
在你的PHP中你会检查array_key_exists
是否有问题的复选框名称,这就是我通常翻译表单中的复选框字段以便更容易使用的方法:
<?php
$checked = array(
'cat1' => array_key_exists('cat1', $_POST),
'cat2' => array_key_exists('cat2', $_POST),
'cat3' => array_key_exists('cat3', $_POST)
);
print_r($checked);
exit;
?>