У меня есть набор флажков, которые при проверке передают значение как 1, в противном случае они передают значение как 0. Однако вместо того, чтобы отправлять значение отмеченных флажков как «0», отправляемое значение равно «NULL».
У меня есть следующий JS-код, который должен установить значение 0/1 соответственно, однако все же значение отправляется как NULL. Есть ли что-нибудь, что можно сделать, чтобы удостовериться, что значение, переданное в случае непроверенного флажка, равно 0?
$('#cb1, #cb2, #cb3, #cb4').on('click', function () $(this).val(this.checked ? 1 : 0); });
ОБНОВЛЕНО Вот мой html:
<input type="checkbox" name="cb1" id="cb1" value="1" checked /> <input type="checkbox" name="cb2" id="cb2" value="1" checked /> <input type="checkbox" name="cb3" id="cb3" value="1" checked /> <input type="checkbox" name="cb4" id="cb4" value="1" checked />
Все они отмечены по умолчанию.
Если один из них не установлен, MySQL сообщает о следующей ошибке: 0SQLSTATE [23000]: Нарушение ограничения целостности: 1048 Столбец «ColumnName» не может быть нулевым.
Это происходит потому, что в столбцах установлено, что он не является Null. И хотя я установил значение по умолчанию равным 0, как только я нажимаю кнопку отправки, я все равно получаю ошибку. Я попытался удалить свойство Not NULL, но вместо того, чтобы предварительно заполнить значение как 0, вход был NULL в базе данных.
Если флажок снят, он не отправляется, поэтому его значение равно 0, если оно не проверено, не поможет – оно всегда будет возвращать NULL.
Это можно легко устранить двумя способами:
1) Предположим, что NULL в параметрах PHP означает, что флажок не установлен. Если флажок не всегда существует на странице, это может быть проблематично. По звукам этого есть переменное количество флажков, поэтому это, вероятно, не сработает.
2) Добавьте скрытый ввод, который имеет то же имя, что и флажок со значением 0 до флажка. Если флажок снят, будет использовано значение скрытого поля, если оно установлено, будет использоваться значение флажка.
<input type="hidden" name="checkbox_1" value="0"> <input type="checkbox" name="checkbox_1" value="1">
Примечание. Если ваши имена находятся в форме массива (т. Е. В них есть квадратные скобки), это не будет работать, так как скрытые поля будут увеличивать количество массивов.
ИЗМЕНИТЬ СВОЙ СКРИПТ, КАК ЭТО. НАДЕЮСЬ, ПОМОЖЕТ.
$(document).ready(function(){ $('#cb1, #cb2, #cb3, #cb4').click(function(){ $(this).val(this.checked ? 1 : 0); }); });
С помощью jQuery вы можете использовать проверенный селектор, чтобы получить состояние флажка. Когда он проверяется, длина содержит нечто большее, чем 0, eG:
$('#id:checked').length
Поэтому вам не нужно устанавливать значение элемента флажка в 0 …
Это связано с тем, что если вы отменили этот флажок, значение равно null, поскольку оно не имеет значения. Проверьте этот пример из w3cschools:
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_form_checkbox
Если вы ничего не выбрали, значение не будет отправлено. Но если вы выберете что-то, его значение будет отправлено.
Если вам действительно нужно истинное / ложное значение, вам нужно обмануть его, поэтому отправьте состояние проверенного атрибута.
$('#id:checked').length
Вы можете попробовать это, это может вам помочь. Предположим, что ваша форма такова:
<tr> <td>Active</td> <td><?php echo form_checkbox('active',set_value('active',$student->active),TRUE); ?> </td> </tr>
Теперь вы устанавливаете свой контроллер codeigniter следующим образом:
// Set up the form $rules = $this->student_m->rules; $this->form_validation->set_rules($rules); // Process the form if ($this->form_validation->run() == TRUE) { $data = $this->student_m->array_from_post(array( 'active', 'name' )); // checking is checkbox is checked or not ($data['active'] == TRUE)?($data['active'] = 1) : ($data['active'] = 0); $this->student_m->save($data, $id); redirect('admin/student'); }