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)– Bacco
Check the links of the above table, if you still have questions, let us know.
– Bacco