Как запомнить состояние флажка, когда установлено состояние по умолчанию?


У меня есть форма с флажком.

Флажок имеет три "состояния":

  1. По умолчанию установлен флажок.
  2. Не отмечен пользователем.
  3. Проверено снова пользователем.

Как бы я сделал что-то подобное? Если я использую !isset(), я могу снять флажок, но он не различает, был ли он снят пользователем или он должен быть установлен по умолчанию.

Я хочу использовать это для пополнения последних значений входных данных формы всякий раз, когда есть ошибки формы при отправке.

Это легко сделать, если флажок по умолчанию снят. Тогда я могу просто сделать:

if (isset($_POST['checkbox'])) echo ' checked'; //check box has been checked
Author: Kid Diamond, 2014-05-09

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, чтобы проиллюстрировать, что все входные данные формы должны управляться массивом.

 3
Author: MrCode, 2014-05-09 18:17:25

Вы можете использовать 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, оно было проверено по умолчанию

 0
Author: laurent, 2014-05-09 17:49:25