Как запомнить состояние флажка, когда установлено состояние по умолчанию?
У меня есть форма с флажком.
Флажок имеет три "состояния":
- По умолчанию установлен флажок.
- Не отмечен пользователем.
- Проверено снова пользователем.
Как бы я сделал что-то подобное? Если я использую !isset()
, я могу снять флажок, но он не различает, был ли он снят пользователем или он должен быть установлен по умолчанию.
Я хочу использовать это для пополнения последних значений входных данных формы всякий раз, когда есть ошибки формы при отправке.
Это легко сделать, если флажок по умолчанию снят. Тогда я могу просто сделать:
if (isset($_POST['checkbox'])) echo ' checked'; //check box has been checked
2 answers
Самый простой способ сохранить состояние формы после отправки - использовать массив для хранения входных значений. Сначала вы устанавливаете значения по умолчанию, затем, если форма была отправлена, замените значения по умолчанию тем, что было отправлено. В HTML-форме всегда выводите значение из массива форм.
// create the array (for both viewing the form and maintaining the submitted values)
$form = array(
'myCheckbox' => true // default to checked
'firstName' => '',
)
// was the form submitted?
if($_SERVER['REQUEST_METHOD'] == 'POST'){
// overwrite the form array
$form['myCheckbox'] = isset($_POST['myCheckbox']);
$form['firstName'] = $_POST['firstName'];
// at this point do any validation, if it fails, let the form show
}
Теперь для формы:
<form method="post">
<input type="checkbox" name="myCheckbox" value="1" <?php echo $form['myCheckbox'] ? 'checked' : '' ?> />
<input type="text" name="firstName" value="<?php echo htmlspecialchars($form['firstName']); ?>" />
</form>
В приведенном выше примере я добавил текстовый ввод firstName
, чтобы проиллюстрировать, что все входные данные формы должны управляться массивом.
Вы можете использовать javascript со скрытым вводом, чтобы определить, сколько раз был нажат флажок
<form action="">
<input id="bike" type="checkbox" name="vehicle" value="Bike" checked onchange="document.getElementById('bike-state').value=parseInt(document.getElementById('bike-state').value)+1">I have a bike
<input type="hidden" id="bike-state" name="count" value="0">
</form>
Теперь на стороне сервера, если $_POST['состояние велосипеда'] нечетное, то оно было снято, если оно четное и больше 0, оно было снято, а затем перепроверено, в противном случае, если все еще 0, оно было проверено по умолчанию