Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom Dia
Estou com um problema que parece simples, mas tem me dado uma dor de cabeça terrivel - a impressão de boletim de uma escola - vamos lá:
tenho uma tabela grade com os seguintes campos:
Tabela: grade
gradeID -> campo auto-incremento
matriculaID -> matricula do aluno
periodoID -> periodo (que são: Periodo I, Periodo II e Periodo III)
disciplinaID -> código da disciplina
media -> media do periodo
qualitativo -> nota dada por comportamento, deveres, etc.
faltas -> quantidade de faltas no periodo
Agora como apresentar esses dados
Linha 1 -> Disciplina 1 - Media Unidade I - Qualitativo Unidade I - Media Unidade II - Qualitativo Unidade II - Media Unidade III - Qualitativo UNidade III - (Total de pontos ) - (Total de Faltas )
Linha 2 -> Disciplina 2 - Media Unidade I - Qualitativo Unidade I - Media Unidade II - Qualitativo Unidade II - Media Unidade III - Qualitativo UNidade III - (Total de pontos ) - (Total de Faltas )
Linha 3 -> Disciplina 3 - Media Unidade I - Qualitativo Unidade I - Media Unidade II - Qualitativo Unidade II - Media Unidade III - Qualitativo UNidade III - (Total de pontos ) - (Total de Faltas )
Se faço um loop simples ele apresenta tudo em apenas uma coluna ...
Pensei em tabelas temporarias - não sei se é a melhor solução ...
Aceito qualquer sugestão para resolver este pepino ...
Abs
Eu não tentei ... uma solução que seria um remendo horrivel, na minha opiniao, seria construir 4 select
1 para cada periodo ( no total de 3 ) e um para a soma das notas e tlvez mais 1 para soma das faltas ....
mas seria uma gambiarra danada ...
veja um exemplo do boletim com apenas a 1ª unidades :
preciso resolver isto logo ... já que pra semana que vem vão começar a lançar ....
Vou ver se consigo com while mas de antemão acho que vou me perder ....
Abs e obrigado
Não sei se entendi direito, mais dentro do while você poderia colocar uma condição através do disciplinaID montando a linha se for a condição que você quer...
Veja o codigo
<table border="0" cellpadding="0" cellspacing="0">
<tr class="cabeca">
<td colspan="1" rowspan="2" valign="top"><img src="images/newlogo.jpg" width="128" height="91" /></td>
<td colspan="10">
<strong>Colégio Advento </strong></td>
</tr>
<tr>
<td colspan="10" align="center"> <h2><em class="textocomum">Aproveitamento Escolar em <?php echo $row_Recordset1['anoletivo']; ?></em></h2></td>
</tr>
<tr class="aluno">
<td colspan="11">Aluno: <em><?php echo $row_Recordset1['aluno']; ?></em> - Série:<em> <?php echo $row_Recordset1['serie']; ?> <?php echo $row_Recordset1['classe']; ?></em> - Curso: <em>Ensino <?php echo $row_Recordset1['curso']; ?></em></td>
</tr>
<tr class="materia">
<td>DISCIPLINA</td>
<td>A.Q.</td>
<td>M.I U. </td>
<td>A.Q.</td>
<td>M. II U.</td>
<td>A.Q.</td>
<td>M. III U.</td>
<td>FALTAS</td>
<td>TOTAL PONTOS</td>
<td>P.R.F.</td>
<td>M.F.</td>
</tr><?php do {?>
<tr class="materia">
<td><?php echo $row_rsGrade['disciplina']; ?></td>
<td><?php echo $row_rsGrade['qualitativo']; ?></td>
<td><?php echo $row_rsGrade['media']; ?></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td><?php echo $row_rsGrade['faltas']; ?></td>
<td><?php echo $row_rsGrade['media']; ?></td>
<td></td>
<td></td>
</tr><?php } while ($row_rsGrade = mysql_fetch_assoc($rsGrade));?>
<tr class="cabeca">
<td colspan="11">Avaliação Qualitativa</td>
</tr>
<tr>
<td colspan="5" align="center" valign="top"><span class="textocomum"><em>Atitudes a serem consideradas na Avaliação Qualitativa:</em><br/>
* Assiduidade e Pontualidade.<br/>
* Interesse e participação nas aulas.<br/>
* Cuidado com o material Escolar.<br/>
* Execução das tarefas de classe e casa.<br/>
* Comportamento nas aulas. </span></td>
<td colspan="6" align="center" valign="top" class="textocomum"><em>Observações:</em></td>
</tr>
</table>
Como poderia condicionar ???
Voce quer trazer apenas o registro de um aluno
ou de vários como está na pagina que você disponibilizou?
Tá meio complicado de entender seu problema .
A pagina é para ver como é o modelo do boletim
nesta primeira Unidades os boletins sairam perfeitos ... agora quero acrescentar as outras unidades
Acho que o problema é que tenho um registro para cada média ou seja
na disciplina Ingles no ano terei 3 registro ( um para cada periodo )
Imagine como completar o resto dos campos nas disciplinas com registros diferentes...
Obrigado pela resposta
>
Acho que o problema é que tenho um registro para cada média ou seja
na disciplina Ingles no ano terei 3 registro ( um para cada periodo )
sfonseca. Suas tabelas estão relacionadas corretamente?
Se sim não é dificil fazer isso se você puder postar o code
que traz os os dados do aluno media etc.
Não precisa ser como no link do boletim.php(questão de segurança).
Obs.Poste somente o code.
Bom eu cheguei até aqui
<?php do { ?>
<?php
if ($totalRows_Recordset1 > 0){
$matricula = $row_Recordset1['matriculaID'];
$query_rsGrade = "SELECT grade.qualitativo AS qualitativo,
grade.media AS media,
grade.faltas AS faltas,
periodo.periodo AS periodo,
disciplinas.disciplina AS disciplina
FROM ((matricula JOIN
grade ON grade.matriculaID = matricula.matriculaID) JOIN
periodo ON periodo.periodoID = grade.periodoID) JOIN
disciplinas ON disciplinas.disciplinaID = grade.disciplinaID
WHERE grade.matriculaID = '$matricula'
GROUP BY grade.qualitativo,
grade.media,
grade.faltas,
periodo.periodo,
disciplinas.disciplina";
//$query_rsGrade = "SELECT DISTINCT disciplinas.disciplina, grade.qualitativo, grade.media, grade.faltas FROM grade, disciplinas WHERE grade.matriculaID = '$matricula' AND grade.disciplinaID = disciplinas.disciplinaID ORDER BY disciplinas.disciplina ASC";
$rsGrade = mysql_query($query_rsGrade, $conexao) or die(mysql_error());
$row_rsGrade = mysql_fetch_assoc($rsGrade);
$totalRows_rsGrade = mysql_num_rows($rsGrade);
//do {
//echo $row_rsGrade['disciplina'].' - Qualitativo: '.$row_rsGrade['qualitativo'].' - Media :'.$row_rsGrade['media'];
//} while ($row_rsGrade = mysql_fetch_assoc($rsGrade));
}
else {
echo 'Não existe boletins para impressão';
}
?>
<div id='impressao'>
<table border="0" cellpadding="0" cellspacing="0">
<tr class="cabeca">
<td colspan="1" rowspan="2" valign="top"><img src="images/newlogo.jpg" width="128" height="91" /></td>
<td colspan="10">
<strong>Colégio Advento </strong></td>
</tr>
<tr>
<td colspan="10" align="center"> <h2><em class="textocomum">Aproveitamento Escolar em <?php echo $row_Recordset1['anoletivo']; ?></em></h2></td>
</tr>
<tr class="aluno">
<td colspan="11">Aluno: <em><?php echo $row_Recordset1['aluno']; ?></em> - Série:<em> <?php echo $row_Recordset1['serie']; ?> <?php echo $row_Recordset1['classe']; ?></em> - Curso: <em>Ensino <?php echo $row_Recordset1['curso']; ?></em></td>
</tr>
<tr class="materia">
<td>DISCIPLINA</td>
<td>A.Q.</td>
<td>M.I U. </td>
<td>A.Q.</td>
<td>M. II U.</td>
<td>A.Q.</td>
<td>M. III U.</td>
<td>FALTAS</td>
<td>TOTAL PONTOS</td>
<td>P.R.F.</td>
<td>M.F.</td>
</tr>
<?php do { ?>
<tr class="materia">
<td><?php echo $row_rsGrade['disciplina']; ?></td>
<td><?php echo $row_rsGrade['qualitativo']; ?></td>
<td><?php echo $row_rsGrade['media']; ?></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td><?php echo $row_rsGrade['faltas']; ?></td>
<td><?php echo $row_rsGrade['media']; ?></td>
<td></td>
<td></td>
</tr><?php } while ($row_rsGrade = mysql_fetch_assoc($rsGrade));?>
<tr class="cabeca">
<td colspan="11">Avaliação Qualitativa</td>
</tr>
<tr>
<td colspan="5" align="center" valign="top"><span class="textocomum"><em>Atitudes a serem consideradas na Avaliação Qualitativa:</em><br/>
* Assiduidade e Pontualidade.<br/>
* Interesse e participação nas aulas.<br/>
* Cuidado com o material Escolar.<br/>
* Execução das tarefas de classe e casa.<br/>
* Comportamento nas aulas. </span></td>
<td colspan="6" align="center" valign="top" class="textocomum"><em>Observações:</em></td>
</tr>
</table>
/applications/core/interface/imageproxy/imageproxy.php?img=http://colegioadvento.com/boletim.gif&key=6b6b160f19d610fb12fc39c57b5f2fe9e6a896c61ab017abe5572425999d8e54" alt="boletim.gif" />
Agora como colocar na mesma linha ???
Inseri uma imagem mas não aparece ...
O problema está na consulta sql.
Tem que achar um modo de verificar se ha outra nota no próximo periodo.
<tr class="materia">
<td><?php echo $row_rsGrade['disciplina']; ?></td>
<td><?php echo $row_rsGrade['qualitativo']; ?></td> //consulta 1° qualitativo
<td><?php echo $row_rsGrade['media']; ?></td>//consulta 1° nota/media
<td>Qualitativo 2</td> //se sim consulta o proximo qualitativo
<td> media 2</td> //se sim consulta a proxima media
<td>Qualitativo 3</td>
<td>media 3</td>
<td><?php echo $row_rsGrade['faltas']; ?></td>
<td><?php echo $row_rsGrade['media']; ?></td>
<td></td>
<td></td>
Ou seja no momento que você for consultar as notas,necessita-se
se há outra nota no periodo seguinte e se sim, exibir.
Entendi ...
Obrigado mesmo .... vou fazer aqui .... se der certo posto ....
Bom, nesse caso a unica solução que encontrei foi fazer mais duas consultas SQL ...
Se for esta a unica solução então está resolvido ... 3 consultas SQL para 3 periodos ...
Obrgiafo pelas respostas ...
Bom não creio que seja a solução correta mas já que você precisa ser rápido,seria sensato fazer isso.
Não dá pra ajudar muito sem conhecer como você modelou o banco.
Abraços.
Meu bd está assim:
Meu bd está assim
<a href='http://www.UploadScreenshot.com/image/1214326/5404907' target='_blank'><img src='http://img1.UploadScreenshot.com/images/main/7/19905065864.jpg' alt='Click here to view full size' /></a>
Beleza vou dar uma olhada e ver se consigo ajudar.
Ah seria bom tirar aquele boletim.php .
sfonseca45.Não vou mentir pra você. A modelagem do banco não ficou legal.Até tentei ajeitar
aqui mas a essa altura do campeonato seria terrível fazer isso, pois até você modificar o modelo
do banco poderia estragar tudo.
Dá uma pesquisada melhor sobre modelagem para os próximos projetos,beleza.
Abraço.
Agradeço a sinceridade ...
Vou utilizar a solução de 3 sql ...
e vou pesquisar sobre modelagem ...
Obrigado e podem encerrar este topico - resolvido
Vamos ver se eu entendi bem:
Você tem o seguinte no seu array e não encontrou um meio para por isso em uma única linha da tabela HTML...
array (size=3)
'disciplina' => string "Inglês"
'qualitativo' => float 8.0
'media' => float 5.5'disciplina' => string "Inglês"
'qualitativo' => float 8.0
'media' => float 5.5
...E se no seu array fosse assim, não seria mais fácil?
'Inglês' =>
array (size=2)
0 =>
array (size=2)
'qualitativo' => float 0.82
'media' => float 1.12
1 =>
array (size=2)
'qualitativo' => float 1.09
'media' => float 0.94
-
Rearranjar o array:
$row_rsGrade = array();
while ($v = mysql_fetch_assoc($rsGrade)) {
$row_rsGrade[$v['disciplina']][] = array(
'qualitativo' => $v['qualitativo'],
'média' => $v['média'],
);
}
-
Passar os dados para a tabela:
<?php while(list($disciplina, $notas) => each($row_rsGrade)) { ?>
<tr class="materia">
<td><?php echo $disciplina']; ?></td>
while(list(, $n) = each($notas)) {
<td><?php echo $n['qualitativo']; ?></td>
<td><?php echo $n['media']; ?></td>
}
-
Deu pra entender...?
Entendi sim ...
Mas esta dando erro
<?php while(list($disciplina, $notas)[b] =>[/b] each($row_rsGrade)) { ?>
<tr class="materia">
<td><?php echo $disciplina']; ?></td>
while(list(, $n) = each($notas)) {
<td><?php echo $n['qualitativo']; ?></td>
<td><?php echo $n['media']; ?></td>
}
Aquele sinal '=>' é de igual ou maior que correto ? Esta dando erro ali ...
estou tentando acertas ...
Bom Dia,
consegui imprimir as medias de uma disciplina em uma linha, agora o problema é o loop para trazer tdoas as materias do boletim
sql
<?php
if ($totalRows_Recordset1 > 0){
$matricula = $row_Recordset1['matriculaID'];
$query_rsGrade = "SELECT DISTINCT disciplinas.disciplina, grade.qualitativo, grade.media, grade.faltas FROM grade, disciplinas WHERE grade.matriculaID = '$matricula' AND grade.disciplinaID = disciplinas.disciplinaID ORDER BY disciplinas.disciplina ASC";
$rsGrade = mysql_query($query_rsGrade, $conexao) or die(mysql_error());
//$row_rsGrade = mysql_fetch_assoc($rsGrade);
//$totalRows_rsGrade = mysql_num_rows($rsGrade);
}
else {
echo 'Não existe boletins para impressão';
}
?>
<body>
<input name="Print" onclick="window.print();return false" type="button" value="Imprimir Boletim" id="botao" />
<img src="images/space.gif" alt="Space" width="25" height="5">
<input name="btnCancel" type="button" id="botao" onclick="MM_goToURL('parent','atualiza.html');return document.MM_returnValue" value="Cancelar">
<?php do { ?>
<?php
if ($totalRows_Recordset1 > 0){
$matricula = $row_Recordset1['matriculaID'];
$query_rsGrade = "SELECT DISTINCT disciplinas.disciplina, grade.qualitativo, grade.media, grade.faltas FROM grade, disciplinas WHERE grade.matriculaID = '$matricula' AND grade.disciplinaID = disciplinas.disciplinaID ORDER BY disciplinas.disciplina ASC";
$rsGrade = mysql_query($query_rsGrade, $conexao) or die(mysql_error());
//$row_rsGrade = mysql_fetch_assoc($rsGrade);
//$totalRows_rsGrade = mysql_num_rows($rsGrade);
}
else {
echo 'Não existe boletins para impressão';
}
?>
<div id='impressao'>
<table border="0" cellpadding="0" cellspacing="0">
<tr class="cabeca">
<td colspan="1" rowspan="2" valign="top"><img src="../images/newlogo.jpg" width="128" height="91" /></td>
<td colspan="10">
<strong>Colégio Advento </strong></td>
</tr>
<tr>
<td colspan="10" align="center"> <h2><em class="textocomum">Aproveitamento Escolar em <?php echo $row_Recordset1['anoletivo']; ?></em></h2></td>
</tr>
<tr class="aluno">
<td colspan="11">Aluno: <em><?php echo $row_Recordset1['aluno']; ?></em> - Série:<em> <?php echo $row_Recordset1['serie']; ?> <?php echo $row_Recordset1['classe']; ?></em> - Curso: <em>Ensino <?php echo $row_Recordset1['curso']; ?></em></td>
</tr>
<tr class="materia">
<td>DISCIPLINA</td>
<td>A.Q.</td>
<td>M.I U. </td>
<td>A.Q.</td>
<td>M. II U.</td>
<td>A.Q.</td>
<td>M. III U.</td>
<td>FALTAS</td>
<td>TOTAL PONTOS</td>
<td>P.R.F.</td>
<td>M.F.</td>
</tr><?php do { //loop para trazer todas as disciplinas não funciona
//imprimi disciplina e medias em apenas uma linha da tabela
$oldRow = null;
while($row = mysql_fetch_array($rsGrade)) {
if($oldRow == null) {
echo '<tr class="materia"><td>'.$row['disciplina'].'</td><td>'.$row['qualitativo'].'</td><td>'.$row['media'].'</td>';
} else {
if($oldRow["disciplina"] != $row["disciplina"]) {
echo '<tr/>';
}
else {
echo '<td>'.$row['qualitativo'].'</td><td>'.$row['media'].'</td>';
}
}
$oldRow = $row;
}
} while ($row_rsGrade = mysql_fetch_assoc($rsGrade));?>
<tr class="cabeca">
<td colspan="11">Avaliação Qualitativa</td>
</tr>
<tr>
<td colspan="5" align="center" valign="top"><span class="textocomum"><em>Atitudes a serem consideradas na Avaliação Qualitativa:</em><br/>
* Assiduidade e Pontualidade.<br/>
* Interesse e participação nas aulas.<br/>
* Cuidado com o material Escolar.<br/>
* Execução das tarefas de classe e casa.<br/>
* Comportamento nas aulas. </span></td>
<td colspan="6" align="center" valign="top" class="textocomum"><em>Observações:</em></td>
</tr>
</table>
</div>
<H1 class=SaltoDePagina> </H1>
<?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>
</body>
Alguem pode dar uma ideia ?
Ainda não consegui resolver o problema ...
agora imprimi tudo numa linha só ... mas não traz as outras disciplinas ...
Será que alguém pode me ajudar ?
Consegui fazer o loop - mudei todo o código.
Agora, nem sei se tem como:
caso não exista media dos outros periodos colocar celulas vazias
<?php
$proximo = '';
do {
$atual = $row_rsGrade['disciplina'];
if ($proximo != $atual) {
$proximo = $atual;
echo '<tr class="materia"><td>'.$row_rsGrade['disciplina'].'</td>';
}
if ($atual == $row_rsGrade['disciplina']) {
echo '<td>'.$row_rsGrade['qualitativo'].'</td><td>'.$row_rsGrade['media'].'</td>';
}
}
while ($row_rsGrade = mysql_fetch_assoc($rsGrade));
?
e a query
$query_rsGrade = "SELECT DISTINCT disciplinas.disciplina, grade.qualitativo, grade.media, grade.faltas FROM grade, disciplinas WHERE grade.matriculaID = '$matricula' AND grade.disciplinaID = disciplinas.disciplinaID ORDER BY disciplinas.disciplina, grade.periodoID ASC";
Se alguem tiver uma sugestão agradeço
Estou quase lá: o codigo só esta dando erro na ultima disciplina em todos os boletins, na ultima linha não imprimi as celulas vazias
<?php
$proximo = '';
$cont = 0;
do {
$atual = $row_rsGrade['disciplina'];
if ($proximo != $atual) {
if ($cont == 1) {
echo '<td>q2</td><td>m2</td><td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 2) {
echo '<td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 3) {
echo '<td>faltas</td><td>media</td></tr>';
$cont = 0;
}
$proximo = $atual;
echo '<tr class="materia"><td>'.$row_rsGrade['disciplina'].'</td>';
}
if ($atual == $row_rsGrade['disciplina']) {
echo '<td>'.$row_rsGrade['qualitativo'].'</td><td>'.$row_rsGrade['media'].'</td>';
}
$cont++;
}
while ($row_rsGrade = mysql_fetch_assoc($rsGrade));
?>
Onde estou errando ?
Consegui - só falta a soma das notas e das faltas :
seria melhor criar duas query ?
o código final:
<?php
$proximo = '';
$cont = 0;
do {
$atual = $row_rsGrade['disciplina'];
if ($proximo != $atual) {
if ($cont == 1) {
echo '<td>q2</td><td>m2</td><td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 2) {
echo '<td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 3) {
echo '<td>faltas</td><td>media</td></tr>';
$cont = 0;
}
$proximo = $atual;
echo '<tr class="materia"><td>'.$row_rsGrade['disciplina'].'</td>';
}
if ($atual == $row_rsGrade['disciplina']) {
echo '<td>'.$row_rsGrade['qualitativo'].'</td><td>'.$row_rsGrade['media'].'</td>';
}
$cont++;
}
while ($row_rsGrade = mysql_fetch_assoc($rsGrade));
if ($cont == 1) {
echo '<td>q2</td><td>m2</td><td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 2) {
echo '<td>q3</td><td>m3</td><td>faltas</td><td>media</td></tr>';
$cont = 0;
}
if ($cont == 3) {
echo '<td>faltas</td><td>media</td></tr>';
$cont = 0;
}
?>
Obrigado
Resolvido
Código Final
<?php
$proximo = '';
$cont = 0;
$media = 0;
$faltas = 0;
do {
$atual = $row_rsGrade['disciplina'];
if ($proximo != $atual) {
if ($cont == 1) {
echo '<td>-</td><td>-</td><td>-</td><td>-</td><td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
$faltas = 0;
}
if ($cont == 2) {
echo '<td>-</td><td>-</td><td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
$faltas = 0;
}
if ($cont == 3) {
echo '<td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
$faltas = 0;
}
$proximo = $atual;
echo '<tr class="materia"><td>'.$row_rsGrade['disciplina'].'</td>';
}
if ($atual == $row_rsGrade['disciplina']) {
echo '<td>'.$row_rsGrade['qualitativo'].'</td><td>'.$row_rsGrade['media'].'</td>';
$media = $media + $row_rsGrade['media'];
$faltas = $faltas + $row_rsGrade['faltas'];
}
$cont++;
}
while ($row_rsGrade = mysql_fetch_assoc($rsGrade));
if ($cont == 1) {
echo '<td>-</td><td>-</td><td>-</td><td>-</td><td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
}
if ($cont == 2) {
echo '<td>-</td><td>-</td><td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
}
if ($cont == 3) {
echo '<td>'.$faltas.'</td><td>'.$media.'</td><td>-</td>-<td></td>';
$cont = 0;
$media = 0;
}
?>
Obrigado a quem ajudou ...
Um while dentro de outro não resolveria?