1

有一些复选框,我需要使用“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 应该看​​起来像 010

4

4 回答 4

1

这是因为您在循环中使用了 $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>
于 2013-08-21T21:22:58.523 回答
0

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

于 2013-08-21T21:08:02.077 回答
0

您应该进行一些更改。

为每个复选框添加一个值,以便您知道表单发布提交了哪个复选框:

<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'] 以查看在表单发布数据中发送了哪些复选框:

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

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

例如,如果我检查了 Text 1 和 Text 3 复选框,则在 for 循环之后的 $checked 转储将显示名为“value”的属性的值:

array (size=2)
  0 => string '1' (length=1)
  1 => string '3' (length=1)
于 2013-08-21T21:28:48.407 回答
0

改变

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

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

如果您添加更多复选框,您需要循环所有这些复选框,而不仅仅是像您正在做的 3 个

于 2013-08-21T21:03:31.530 回答