Проверка проверки флажка PHP

Есть некоторые флажки, которые мне нужно проверить в формате с «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'; } } 

Во-первых, это хорошо работает, но когда я добавляю больше флажков, это не работает. Он устанавливает все «1» в начале $ sc1. Считайте их хорошо.

Может быть проблема, что они находятся в 3 divs (один div для одного столбца), но все же с тем же именем?

Edit1: $ sc1 chould выглядит как 010

это потому, что вы используете $ sc1. = в цикле. вы добавляете свои значения. поэтому, когда он будет установлен в 1, любое 0 будет добавлено. избавиться от полных остановок в вашем цикле (. = должно просто быть =)

update: вы должны поместить ключи в массив

 <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() чтобы подсчитать общее число $_POST['subcategory1'] в цикле for или использовать цикл 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 ['подкатегорию1'], чтобы увидеть, какие флажки были отправлены в данные формы:

 $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, покажет значение атрибута с именем «значение»:

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