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