Checkbox marcados não aparecem corretamente

Olá, estou com problema em reconhecer um vetor de checkbox, ja tentei fazer muitos testes e nao consigo resolver o problema pois quando marco assim:

aparece o seguinte:

os que foram marcados e não marcados nao aparecem corretamente
segue o código:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


<script>
    $(document).ready(function() { 
        var input = '<label class="cortexto">\n\
                                 N. Matrícula: <input  class="txtlistaMatricula" type="text" name="matricula[]" onkeypress="return SomenteNumero(event)" maxlength="5"/> &nbsp;&nbsp \n\
                                 Atualizada: <input type="checkbox" class="listacheck" name="atualizada[]" /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp   \n\
                                 Não Saindo Negativa Emitir Relatória: <input type="checkbox" class="listacheck" name="relatoria[]" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp <a href="#" class="cor btn btn-green radius boxshadow" >Excluir</a><br><hr></label>';

        $("input[name='add']").click(function(e) {
            $('#inputs_adicionais').append(input);
        });

        $('#inputs_adicionais').delegate('a', 'click', function(e) {
            e.preventDefault();
            $(this).parent('label').remove();
        });
    });
</script>


     

<div id="wrapper">
    <div class="col_certidoes float_r" >
        <br><br><br>

        <form name="enviar" class="envia2" id="enviar" method="post" enctype="multipart/form-data" action="" > 
            <label><input type="button" name="add" value="Adicionar Nova Matrícula" class="btn btn-green radius boxshadow" /></label><br><br>
            <fieldset id="inputs_adicionais" class="fieldform">
            </fieldset>
            <br/><br/><br/>
            <input data-acao="ver" type="submit" name="enviar2" value="Confirmar e Enviar"  />
            </form>
           <br><br><br><br><br>


<?php
        $mensagem = '<fieldset>';
        $listaMatricula = '<b><h2>MATRÍCULA(S):</h2></b><br>';
        $listaPartes = '<b><h2>PARTE(S):</h2></b><br>';

        $data = filter_input_array(INPUT_POST, FILTER_DEFAULT);
        if (!empty($data['enviar2'])) {

            if (isset($data['matricula'])) {
                for ($i = 0; $i < sizeof($data['matricula']); ) {      
                    
                    if (empty($data['atualizada'][$i])) {
                        $data['atualizada'][$i] = 'NÃO';
                    } else {
                        $data['atualizada'][$i] = 'SIM';
                    }

                    if (empty($data['relatoria'][$i])) {
                        $data['relatoria'][$i] = 'NÃO';
                    } else {
                        $data['relatoria'][$i] = 'SIM';
                    }
                    $listaMatricula .= "MATRÍCULA: <b>" . $data['matricula'][$i] . "</b>&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;ATUALIZADA: <b>" . $data['atualizada'][$i] . "</b>&nbsp;&nbsp;&nbsp;-&nbsp;&nbsp;&nbsp;NÃO SAINDO NEGATIVA EMITIR RELATÓRIA: <b>" . $data['relatoria'][$i] . "</b><hr/><br>";
                    $i++;
                }
            }

            if ($listaMatricula != '<b><h2>MATRÍCULA(S):</h2></b><br>') {
                $mensagem.= $listaMatricula;
            }

           echo $mensagem;
         
              
        }
        ?>

    </div>
</div>

se alguem souber me ajudar agradeço pois ja executei vários testes e realmente não encontrei o erro

O comportamento padrão de um form html é mandar apenas os campos marcados, ou seja, das 4 opções se marcar 2, apenas essas 2 vão para o php, o restante some…

Para entender melhor apenas para teste, faça

$data = filter_input_array(INPUT_POST, FILTER_DEFAULT);
echo '<pre>';
print_r($data['atualizada']);
echo '</pre>';
exit;
...

Faça o submit e você verá quantos campos realmente chegam no php…

O mesmo serve para o vetor

$data['relatoria'];

Aliás, a impressão que dá é que você terá o mesmo tamanho nos dois vetores, e isso é um engano, são vetores separados, cada um tem sua quantidade, o seu for que está causando essa impressão, sugiro você criar um laço para cada vetor usando foreach por exemplo…

foreach ($data['atualizada'] as $campo) {
    echo $campo;
}

foreach ($data['relatoria'] as $campo) {
    echo $campo;
}

Dessa forma é até melhor porque você não precisa usar sizeof, etc e caso você não marcar nenhuma opção do vetor, simplesmente o laço não roda…

Muito Obrigado pelas explicações, resolvi o problema usando select com sim e não…
obrigando o usuário selecionar uma opção ao ao invés de um checkbox,
mas só consegui por causa de tua explicação… Muito Obrigado mesmo

1 curtida