PHP复选框数组验证


PHP Checkbox array validating

有一些复选框,我需要将其验证为"0"(未选中)和"1"(选中)的格式。

<input type="checkbox" name="subcategory1[]" >Text 1<br>
<input type="checkbox" name="subcategory1[]" >Text 2<br>
<input type="checkbox" name="subcategory1[]" >Text 3<br>

我试着用这个代码验证它(在互联网上找到):

$sc1 = "";
for($i=0; $i<=2; $i++)
  {
  if(isset($_POST['subcategory1'][$i])){ $sc1 .= '1'; }
  else { $sc1 .= '0'; }   
  }

首先,这很有效,但当我添加更多的复选框时,这就不起作用了。它在$sc1的开头设置了所有的"1"。好好数。

它们在3个div中(一列对应一个div),但名称仍然相同,这可能是个问题吗?

Edit1:$sc1-chould看起来像010

这是因为您使用的是$sc1.=消息灵通的你在增加你的价值观。因此,一旦它被设置为1,任何0都将被添加。去掉循环中的句号(.=应该只是=)

更新:您应该将密钥放在阵列中

<input type="checkbox" name="subcategory1[1]" >Text 1<br>
<input type="checkbox" name="subcategory1[2]" >Text 2<br>
<input type="checkbox" name="subcategory1[3]" >Text 3<br>

更改

for($i=0; $i<=2; $i++)

for($i=0; $i<count($_POST['subcategory1']); $i++)

如果您添加了更多的复选框,则需要循环所有复选框,而不是像您所做的那样只循环3个

这可能是因为您的循环没有为所有变量运行。使用count()计算for循环中$_POST['subcategory1']的总数,或使用foreach循环。

您应该进行一些更改。

为每个复选框添加一个值,这样您就可以知道哪个复选框是由表单发布提交的:

<input type="checkbox" name="subcategory1[]" value='1'>Text 1<br>
<input type="checkbox" name="subcategory1[]" value='2'>Text 2<br>
<input type="checkbox" name="subcategory1[]" value='3'>Text 3<br>

下一步循环遍历每个$_POST['subcategory1'],查看哪些复选框以表单形式发送了POST-data:

$checked = []; // start with empty array
for ($x = 0; $x < count($_POST['subcategory1']); ++$x) {
  $checked[] = $_POST['subcategory1'][$x]; // add value to array
}

此更改的原因是:如果未选中复选框,则在提交表单时不会将其发送到服务器。这将使用选中的复选框的值构建一个数组。

例如,如果我选中了文本1和文本3复选框,那么在For循环之后的$checked转储将显示名为"value"的属性的值:

array (size=2)
  0 => string '1' (length=1)
  1 => string '3' (length=1)