Флажок «флажок» - значение переходит к более ранним значениям массива, когда массив пуст - PullRequest
2 голосов
/ 22 июня 2011

У меня есть массив флажков name = "box []". Через PHP я проверяю, что они проверены после отправки, повторяя «check = 'checked'», если они были проверены на событии submit.

Теперь, если я установлю третий флажок, значение переходит к первому флажку после отправки, так как массив был пуст до третьего флажка. То же самое, если я отмечаю 2-й и 3-й флажок, они переходят на 1-й и 2-й после отправки. Это код, который я использую:

<form method="post">
    <input type="checkbox" name="box[]" value="true" <?php if ($box[0] == true) echo "checked='checked'"; ?>><br>
    <input type="checkbox" name="box[]" value="true" <?php if ($box[1] == true) echo "checked='checked'"; ?>><br>
    <input type="checkbox" name="box[]" value="true" <?php if ($box[2] == true) echo "checked='checked'"; ?>><br>
    <p>
    <input type="submit" value="Submit">
</form>

Попробуйте по адресу: http://experiencerapanui.com/selecttest.php

Могу ли я сделать так, чтобы флажки заполняли массив значением "false" или чем-то еще, если флажок не установлен? Куда мне идти?

****** РЕДАКТ. ******

Благодаря phant0m мне удалось найти решение:

<form method="post">
    <input type="checkbox" name="box[]" value="1" <?php if (in_array("1", $box)) echo "checked='checked'"; ?>><br>
    <input type="checkbox" name="box[]" value="2" <?php if (in_array("2", $box)) echo "checked='checked'"; ?>><br>
    <input type="checkbox" name="box[]" value="3" <?php if (in_array("3", $box)) echo "checked='checked'"; ?>><br>
    <p>
    <input type="submit" value="Submit">
</form>

Установка уникальных значений для флажков, затем, если я найду значение в массиве $ box [], поле помечается как проверенное.

Ответы [ 2 ]

1 голос
/ 22 июня 2011

Это не работает, потому что только те флажки, которые отмечены, помещаются в массив $box.

Либо используйте разные имена, либо разные значения, чтобы различать их.

Учтите это: вы ставите второй и третий флажок. В PHP вы получите:

$_POST['box'] = array(0 => "true", 1 => "true");

Вы не можете знать, какие флажки были отмечены, если не все они установлены.

0 голосов
/ 18 июня 2017

Значение POST должно начинаться с isset, тогда! Empty ($ array) определяет, является ли значение POST массивом, и предотвращает ошибку нулевого массива, если не выбраны параметры.

&& is_array ($ _ POST ['box']) можно использовать в дополнение к! Empty ($ _ POST ['box']), а также для проверки правильности массива.

Переменная используется в следующих примерах для поля значения, поскольку она облегчает определение и заполнение входных данных при использовании цикла foreach и может быть санирована при необходимости в качестве превентивной меры.

Вероятно, было бы неплохо очистить массив $ _POST также, и включение его в функцию с валидацией позволило бы вызывать все это из входных данных флажка и поддерживать чистоту области ввода.

<input type="checkbox" name="box[]" value="<?php echo $unique_id; ?>" <?php if(isset($_POST['box']) && !empty($_POST['box']) && in_array($unique_id, $_POST['box'])) echo "checked='checked'"; ?>>

OR

<input type="checkbox" name="box[]" value="<?php echo $unique_id; ?>" <?php my_function(); ?>>

Отличный вопрос и решения! Похоже, примеров относительно мало, в которых используется метод массива для сохранения записей Post, и приведенный здесь уместен и очень полезен даже спустя годы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...