Совершенно нормально, что непроверенные ящики не передаются на сервер вашим браузером. Вот почему в PHP у вас нет этих значений.
Вам нужно сделать каждый флажок идентифицируемым, дав ему уникальное имя. Затем вы можете проверить, было ли передано значение каждого уникального имени. Только те, которые перенесены, где проверено.
Итак, ваша проблема перед базой данных, вам сначала нужно выяснить, какие флажки были отмечены, а какие нет.
Простым решением является нумерация полей, например дайте им имена от answer_1
до answer_n
(где n
- наибольшее число, например 5
).
Если количество ответов является динамическим, либо найдите максимально возможное число, и / или перенесите количество ответов в другое скрытое поле формы. Будьте осторожны, вы дезинфицируете ввод.
<form method="post">
<input type="hidden" name="answer_count" value="3" />
...
</form>
HTML пример скрытого поля формы
$name = 'answer';
$count = isset($_POST["$name_count"]) ? max(0, $_POST["$name_count"]) : 0;
$answers = array();
for ($i = 0; $i++ < $count;)
{
$answer = isset($_POST["$name_$i"]) ? $_POST["$name_$i"] : NULL;
$correct = /* don't know how you do that, just do it ;) */;
$answers[] = compact('answer', 'correct');
}
Пример PHP для итерации набора возможных полей формы
Надеюсь, это полезно.