PHP Checkbox数组验证

时间:2013-08-21 21:00:41

标签: php html

有一些复选框,我需要将其验证为格式为'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

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

更改

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

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

如果您添加更多复选框,则需要循环所有这些复选框,而不仅仅是像您正在执行的那样

答案 2 :(得分:0)

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

答案 3 :(得分: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
}

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

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

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