Как получить все значения массива отмеченных и непроверенных флажков и сохранить его в базе данных в переполнении стека

У меня проблемы с получением значений отмеченных и непроверенных флажков. Когда флажок установлен, он получит значение этого конкретного флажка, и всякий раз, когда флажок снят, значением флажка не будет 0.

Это мой HTML-код:

<table border="0" cellspacing="0" cellpadding="1">
<tbody>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="5"> Barangay business permit </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="10"> Business plate </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="20"> Sanitary inspection fee </td>
</tr>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="30"> Environmental clearance </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="40"> Barangay development </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="50"> building permit </td>
</tr>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="60"> Electrical inspection </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="70"> Mechanical inspection    </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[]" value="80"> Plumbing inspection </td>
</tr>
</tbody>
</table>
<div class="" style="margin: auto; padding-top:20px;">Total <input type="text" name="total" style="color: #222222;" readonly/>
<input type="submit" name="register" value="Register" style="width: 100px; height:50px; margin:auto; color:#222222;">
</form>

Код PHP:

$checkbox=$_POST['checkbox'];

for($i=0; $i<count($checkbox); $i++)
{
$num[$i]=$checkbox[$i];
}

Коды Javascript (для функции получения значений каждого флажка при проверке и генерации итога в поле итогов.)

<script type="text/javascript">
$(function(){

var applications = [];
//bind the change event to the checkboxes
$('input[name="checkbox[]"]').change(function(){
var total = 0;
//get value from each selected ckeck box
$('input[name="checkbox[]"]:checked').each(function(){
var tval = $(this).val();
total += parseFloat(tval);
});
//finally display the total with a ₱ sign
$('input[name="total"]').val("₱ " + total);

// handle applications
var application = $.trim($(this)[0].nextSibling.nodeValue); // get the name
var i = applications.indexOf(application);
if(i != -1) {
applications.splice(i, 1); // remove if unchecked
} else {
applications.push(application); // push if checked
}
var temp = applications.join(', ');
$('input[name="applications"]').val(temp);

});

});
</script>

В настоящем тесте я установил некоторые флажки в таблице [0, 1, 0, 0, 1, 1, 0, 0, 0]. Примечание: 1 представляет как отмеченный, а 0 представляет как не отмеченный, чтобы сделать его понятным.

Когда я нажимаю кнопку отправки и отображаю значения, я получаю это

[0] => 10

[1] => 40

[2] => 50

Но я хочу получить такие значения

[0] => 0

[1] => 10

[2] => 0

[3] => 0

[4] => 40

[5] => 50

[6] => 0

[7] => 0

[8] => 0

Как я могу получить эти значения? Мне нужно получить каждое значение непроверенного как 0 & проверенные значения затем сохраняют каждый массив (по порядку) в базу данных. Мне действительно нужна помощь, я искал ее в сети, но не нашел правильного решения своей проблемы. Я думаю, что мои php коды неверны.

имя базы данных: приложение

таблица: сборы

столбцы: ID, fee1, fee2, fee3, fee4, fee5, fee6, fee7, fee8, fee9

1

Решение

Судя по всему, вы можете использовать array_replace на этом.

Сначала создайте структуру по умолчанию через array_fill() (поскольку не отмеченные флажки не будут включены в POST). Потом наконец array_replace по умолчанию с вводом. Пример:

демонстрация

<?php

$default = array_fill(0, 9, 0);
if(isset($_POST['register'])) {
$input = $_POST['checkbox'];
$final = array_replace($default, $input);
echo '<pre>';
print_r($final);
}

?>
<form method="POST">
<table border="0" cellspacing="0" cellpadding="1">
<tbody>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[0]" value="5" class="toggle_checkbox" /> Barangay business permit </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[1]" value="10" class="toggle_checkbox" /> Business plate </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[2]" value="20" class="toggle_checkbox" /> Sanitary inspection fee </td>
</tr>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[3]" value="30" class="toggle_checkbox" /> Environmental clearance </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[4]" value="40" class="toggle_checkbox" /> Barangay development </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[5]" value="50" class="toggle_checkbox" /> building permit </td>
</tr>
<tr style="height: 40px;">
<td style="width: 240px;"><input type="checkbox" name="checkbox[6]" value="60" class="toggle_checkbox" /> Electrical inspection </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[7]" value="70" class="toggle_checkbox" /> Mechanical inspection    </td>
<td style="width: 240px;"><input type="checkbox" name="checkbox[8]" value="80" class="toggle_checkbox" /> Plumbing inspection </td>
</tr>
</tbody>
<input type="submit" name="register" value="Register" style="width: 100px; height:50px; margin:auto; color:#222222;">
</table>
</form>

Sidenote: вам нужно явно поместить индексы в атрибут name, чтобы они выровнялись при замене.

И тогда в вашем JS:

Поскольку вы не можете использовать имя, вызывающее из-за индексов, включите его в classes вместо:

$('.toggle_checkbox').change(function(){
var total = 0;
//get value from each selected ckeck box
$('.toggle_checkbox:checked').each(function(){
1

Другие решения

<input type='hidden' name='checkbox[0]' value='0'/>
<input type='checkbox' name='checkbox[0]' value='10'/>

Поскольку имена совпадают, php заменит значение по умолчанию значением флажка, если оно присутствует.

1

$("#save").click(function(){
var check = [];
$('.checkBox:checked').each(function()
{check.push($(this).val());});
var count=check.length;
var data={"Header":"some data","details":[]};
var detail={"values":""};
for(i=0;i<=count-1;i++){
var val=check[i];
detail.values=val;
data.details.push(detail);
detail={"values":""};
}
$.ajax({
url:"data/save",
data:JSON.stringify(data),
success:function(){
alert("sukses !!");
}
});

});
0