Checkbox marcados não aparecem corretamente

2 respostas Resolvido
Wilianfurlani

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

2 Respostas

L
Solucao aceita

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…

Wilianfurlani

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

Criado 11 de março de 2017
Ultima resposta 21 de mar. de 2017
Respostas 2
Participantes 2