Ir para conteúdo
Fórum Script Brasil
  • 0

While dentro do while


sfonseca

Pergunta

Bom Dia

Estou com um problema na impressão de boletins do meu sistema - preciso fazer um while dentro de outro while para que ele traga todas as disciplinas e não estou conseguindo.

Agradeço qualquer sugestão ou idéia.

o código

<?php do { //loop para imprimir todos os boletins da classe ?> 
<?php
if ($totalRows_Recordset1 > 0){ //Teste para verificar se existe boletim pata imprimir
    $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&eacute;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 listar todas as materias - NÃO FUNCIONA

    $oldRow = null;
    while($row = mysql_fetch_array($rsGrade)) { //Loop para imprimir boletins dos periodos na mesma linha - OK

      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&ccedil;&atilde;o Qualitativa</td>
    </tr>
    <tr>
      <td colspan="5" align="center" valign="top"><span class="textocomum"><em>Atitudes a serem consideradas na Avalia&ccedil;&atilde;o Qualitativa:</em><br/>
          * Assiduidade e Pontualidade.<br/>
          * Interesse e participa&ccedil;&atilde;o nas aulas.<br/>
          * Cuidado com o material Escolar.<br/>
          * Execu&ccedil;&atilde;o das tarefas de classe e casa.<br/>
        * Comportamento nas aulas.  </span></td>
      <td colspan="6" align="center" valign="top" class="textocomum"><em>Observa&ccedil;&otilde;es:</em></td>
    </tr>
      </table>
</div>
  <H1 class=SaltoDePagina> </H1>
  <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

Obrigado a todos

Link para o comentário
Compartilhar em outros sites

14 respostass a esta questão

Posts Recomendados

  • 0

Ficou assim

<?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);
//Nova query
    $query_rsDisc = "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";
    $rsDisc = mysql_query($query_rsDisc, $conexao) or die(mysql_error());
    $row_rsDisc = mysql_fetch_assoc($rsDisc);
    $totalRows_rsDisc = mysql_num_rows($rsDisc);
    }
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&eacute;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 {       
    $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_rsDisc = mysql_fetch_assoc($rsDisc));
         //mysql_data_seek( $row_rsDisc['disciplina'], 1 );
     ?>
    <tr class="cabeca">
      <td colspan="11">Avalia&ccedil;&atilde;o Qualitativa</td>
    </tr>
    <tr>
      <td colspan="5" align="center" valign="top"><span class="textocomum"><em>Atitudes a serem consideradas na Avalia&ccedil;&atilde;o Qualitativa:</em><br/>
          * Assiduidade e Pontualidade.<br/>
          * Interesse e participa&ccedil;&atilde;o nas aulas.<br/>
          * Cuidado com o material Escolar.<br/>
          * Execu&ccedil;&atilde;o das tarefas de classe e casa.<br/>
        * Comportamento nas aulas.  </span></td>
      <td colspan="6" align="center" valign="top" class="textocomum"><em>Observa&ccedil;&otilde;es:</em></td>
    </tr>
      </table>
</div>
  <H1 class=SaltoDePagina> </H1>
  <?php } while ($row_Recordset1 = mysql_fetch_assoc($Recordset1)); ?>

Obrigado pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui fazer o loop - mudei todo o código.

Agora, nem sei se tem como:

- somar o total de faltas

- somar o total de pontos

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 alguém tiver uma sugestão agradeço

Link para o comentário
Compartilhar em outros sites

  • 0

tem sim, so que vamos precisar ver o código todo para saber como ta vindo os dados do banco ...

caso as falta fiquem todas em uma unica tabela é so da o SUM e pronto... se elas ficam junto de cada disciplina você da o SUM po disciplina nas falta e dps um SUM no total que seria a soma daquele campo.

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que o empty não vai funcionar, explico porque

a minha tabela de media possui os seguinde campos:

gradeID -> chave primaria

matriculaID -> matricula do aluno

periodoID -> periodo (unidade I, unidade II, unidade III)

disciplinaID -> disciplinas (1 - Ingles, 2 - Portugues, etc)

qualitativo -> nota qualitativa

media -> media do periodo

faltas -> total de faltas do periodo

Então veja:

No primeiro periodo eu só terei 1 linha no BD para cada disciplina, no segundo periodo mais uma linha e assim por diante

Então teremos:

no primeiro periodo 1 linha no BD contedo -> disciplina / qualitativo / media / faltas - > ficando 4 colunas na tabela sem preenchimento (2 colunas qualitativo e 2 colunas media) porque não existe o registro no bd;

no segundo perido 2 linhas no BD ( sendo 1 linha do periodo I e 1 linha do perdio 2) -> disciplina / qualitativo / media / qualitativo / media / faltas(soma) - ficando 2 colunas na tabela sem preenchimento (1 colunas qualitativo e 1 colunas media) porque não existe o registro no bd;

no terceiro periodo teremos linha completa -> disciplina / qualitativo / media / qualitativo / media / qualitativo / media / faltas(soma)

ai está o problema

obrigado pela resposta

Link para o comentário
Compartilhar em outros sites

  • 0

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 ?

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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 ...

Link para o comentário
Compartilhar em outros sites

  • 0

Parabéns pelo seu esforço e fico contente que conseguio resolver sozinho e apenas com algumas dicas.. sinal de uma pessoa que tem futuro em ser um grande profissional pois so o que correm atraz de estudar e fazer quebrando a cara até acerta são estes, pois ficar parado esperando resposta não leva a nada..

parabéns mesmo...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...