Я создал форму, которая перезагружается в случае ошибки и переходит на другую страницу в случае успешной отправки.
Я не хочу, чтобы пользователи заполняли все значения снова и снова в случае ошибки, поэтому я сохраняю их в переменных сеанса и заполняю их обратно в форме.
Вот HTML-код формы:
<form action="preference.php" method="post">
<input id="optiona-cb" name="userpref[]" type="checkbox" value="optiona" <?php if((isset($_SESSION['userpref'][0]) && $_SESSION['userpref'][0])) { echo 'checked'; } ?>/>
<label for="optiona-cb">optiona</label>
<input id="optionb-cb" name="userpref[]" type="checkbox" value="optionb" <?php if((isset($_SESSION['userpref'][1]) && $_SESSION['userpref'][1])) { echo 'checked'; } ?>/>
<label for="optionb-cb">optionb</label>
<input id="optionc-cb" name="userpref[]" type="checkbox" value="optionc" <?php if((isset($_SESSION['userpref'][2]) && $_SESSION['userpref'][2])) { echo 'checked'; } ?>/>
<label for="optionc-cb">optionc</label>
... More Input Fields
</form>
Вот код от preference.php
:
$_SESSION['userpref'] = $_POST['userpref'];
$_SESSION['user_login'] = $_POST['user_login'];
$_SESSION['user_email'] = $_POST['user_email'];
.. More code
При перезагрузке страницы значения username
и email
заполняются правильно. Однако значения флажка смещаются. Например, если пользователь проверяет только optionc
, значение optiona
проверяется при перезагрузке. Аналогично, если пользователь проверяет optiona
и optionc
, проверяются значения optiona
и optionb
.
Другими словами, «дыры» в отмеченных флажках заполняются при перезагрузке страницы. Как я могу убедиться, что значения флажков не сдвигаются, чтобы заполнить пустые значения?
Я использую WordPress, если это имеет значение. :)
Некоторые разъяснения:
Значения флажка хранятся в userpref[]
и доступны с помощью $_POST['userpref']
. Я понятия не имею, как браузер передает информацию о установленном флажке, используя $_POST
.
Допустим, пользователи проверяют первый и третий флажок. Также предположим, что userpref[]
хранит 1
для каждого установленного флажка и 0
для каждого установленного флажка. В этом случае значение будет [1, 0, 1].
Однажды я храню эти значения в $_SESSION['userpref']
, они, кажется, сдвигаются. Другими словами, массив становится чем-то вроде [1, 1, 0] или как [1, 1], и никакое третье значение не подразумевает непроверенный флажок.
Итак, вместо проверки первого и третьего флажка при перезагрузке. Браузер проверяет первое и второе. Третий флажок остается не отмеченным.
У меня вопрос, что я могу сделать, чтобы убедиться, что флажки сохраняют свой статус снятия флажка и не сдвигаются, заполняя «дыры» или «0».