PHP: Only scroll correctly through FOREACH if all checkboxes are selected

Asked

Viewed 71 times

0

I am doing a job and I need to understand why my foreach is only traveled to do what I wish when checkboxes are selected in order:

<?php require_once("cabecalho.php"); 

$questao = new Questao ();
$QuestaoDAO = new QuestaoDAO($conexao);
$conteudoDAO = new ConteudoDAO($conexao);

$conteudo_fkid = $questao->getConteudo_fkid();
$chaveAvaliacao = $_POST['chaveAvaliacao'];

//echo $nomeConteudo;
?>  

<h1>Elaborar Avaliação</h1>

<form action="elaborarAvaliacao.php" method="post">
<table class="table table-bordered table-striped" id="dynamic_field">
<tr>
    <td colspan="3"><center>Selecione os conteúdos referente a avaliação de chave: <b><?php echo $_SESSION['chaveAvaliacao']; ?></b></td>
</tr>
<tr>
    <td><b>Selecione contúdos: </b> </td>
    <td><b>Contúdos: </b> </td>
    <td><b>Qntd. de questão por conteúdo: </b> </td>
</tr>
<?php 
foreach($conteudoDAO->listaNomeConteudo() as $tipo) : 
    if ($tipo['id'] != 1){
?>
<tr>
    <td width ='175'><center><input type="checkbox" name="conteudosCheckbox[]" value="<?=$tipo['id']?>"> </td>
    <td><center><?=$tipo['nomeConteudo'];?></center></td>
    <td width ='275'><input class="form-control" type="number" name="qntdQuestaoPorConteudo_php[]"> </td>
</tr>

<?php 
}
endforeach  
?>

</table>
    <button class="btn btn-primary" type="submit">Criar</button>
</form>

<?php require_once("rodape.php"); ?>
<?php require_once("script.php"); ?>

---

    <?php require_once("cabecalho.php"); 
$chaveAvaliacao = $_SESSION['chaveAvaliacao'];

$conteudosCheckbox = $_POST['conteudosCheckbox'];
var_dump($conteudosCheckbox);
$contador = count($conteudosCheckbox);
$qntdQuestaoPorConteudo_php = $_POST['qntdQuestaoPorConteudo_php'];
var_dump($qntdQuestaoPorConteudo_php);
//$qntdQuestaoPorConteudo_php2 = $_POST['qntdQuestaoPorConteudo_php'];

$questaoDAO = new QuestaoDAO($conexao);
$conteudoDAO = new conteudoDAO($conexao);
$questao = new Questao();
$avaliacao = new Avaliacao;
$avaliacaoDAO = new AvaliacaoDAO($conexao);
$validador = 0;

$i=0;
//echo $conteudosCheckbox[0];
echo "foreach I:<br>";
foreach ($conteudosCheckbox as $conteudo) :
    echo "<br>PASSADA DO I : " . $i . "<br>";
    $qntdQuestaoPorConteudo_banco = $questaoDAO->listaContadorQuestao($conteudo);
    //echo $i."<br>";
    //echo "qntdQuestao pode : " . $quantidadeQuestao . "<br>";
    echo "qntdQuestaoPorConteudo_banco: " . $qntdQuestaoPorConteudo_banco;
    echo "<br> qntdQuestaoPorConteudo_php: " . $qntdQuestaoPorConteudo_php[$i] . "<br>"; 
    if ($qntdQuestaoPorConteudo_banco < $qntdQuestaoPorConteudo_php[$i]) {
        echo $i;
        echo "<br>";
        echo "banco: " . $qntdQuestaoPorConteudo_banco;
        echo "<br>";
        echo "php: " .  $qntdQuestaoPorConteudo_php[$i];
        echo "<br>";
    /*  echo "Não há questões suficientes cadastradas para o conteúdo: <b>" . $conteudoDAO->listaConteudoEspecifico($conteudo) . 
        "<br></b> Cadastre novas questões para o conteúdo e tente novamente. <br><br>";*/
        $avaliacaoDAO->removeAvaliacao($chaveAvaliacao);
        $validador = 1;
    }
$i++;
endforeach;

if ($validador == 1) {
    echo "O que deseja fazer? <br><br>";
    ?>
    <form action="index.php" method="POST">
        <input type="submit" value="Inicio" class="btn btn-danger">  
    </form>

    <form action="formularioQuestao.php" method="POST">
        <input type="submit" value="Cadastrar questão" class="btn btn-success">  
    </form>

    <form action="formularioChaveAvaliacao.php">
        <input type="submit" value="Cadastrar nova avaliação" class="btn btn-warning">  
    </form>
    <?php
}
else {

$j = 0;    echo "<br>";

echo "foreach J:";

foreach ($conteudosCheckbox as $conteudo) :
    echo "<br>";

    //echo "entra no foreach?";
    $quantidadeQuestao = $questaoDAO->listaContadorQuestao($conteudo);
    $questoesBanco = $questoesBanco + $quantidadeQuestao;

    $avaliacao->setChaveAvaliacao($chaveAvaliacao);
    $avaliacao_fkid = $avaliacaoDAO->selecionaAvaliacao($avaliacao->getChaveAvaliacao());
//   $conteudo_fkid = $questaoDAO->selectConteudo_fkid($conteudo);
// echo "<br>CONTEUDO FKID : " . $conteudo_fkid . "<br>";
    echo "<br>";
    $questao = $questaoDAO->listaQuestaoConteudo_fkid($conteudo);
// echo "<br>lista questao conteudo fkid: " . $questao . "<br><br>";
$contadorWhile = 0;
//echo "<br>qntdQuestaoPorConteudo_php: " . $qntdQuestaoPorConteudo_php[$j] . "<br>";
echo "<br>";
    while ($qntdQuestaoPorConteudo_php[$j] > $contadorWhile) {
        $ids = array();
        foreach($questao as $questao_id) :
            $ids[] = $questao_id->getId();
        endforeach; 
        $rand = array_rand($ids);
        // $conteudo_fkid->getConteudo_fkid();
    $avaliacaoDAO->insereAvaliacao_questoes($avaliacao_fkid, $ids[$rand], $conteudo);
    $contadorWhile++;
    echo "qntd passadas (numero questao) : " . $j . "<br>";
};
    //var_dump($questao);
    //echo "questao " . $questao[$j];
    // echo $avaliacao_fkid . "<br>";
    $j++;
endforeach;
/*
echo "<br> -----------------------------------------------------<br>";
$array = $avaliacaoDAO->listaAvaliacao();
foreach ($array as $a):
echo $a['chaveAvaliacao'] . "<br>";
endforeach;
*/
}
require_once("rodape.php"); 
require_once("script.php"); 
  • Simply pq only clicked checkboxes are sent. There are several posts talking about this on the site, What you need is to give a unique name for each checkbox and check together with another reference. For example, conteudosCheckbox[$id] or put the ID in value (not the type, only the ID)

  • Check the links of the above table, if you still have questions, let us know.

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.