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

Loop while mostrando apenas a primeira linha de registro do banco de dados


emersongo

Pergunta

Olá, meu sistema tem um problema, tenho 2 tabelas, uma chamada alunos com os campos Id e Nome, e outra chamada Frequencia com Id, Id_aluno... Porém no loop while aonde eu conecto as duas tabelas pelo id e id_aluno, ele só exibe o primeiro registro do banco de dados, sendo que existe 3 registros.

O código completo:

<?php
  include_once("controller/conexao.php");

  session_start();
  if(!isset($_SESSION["usuario"]) || !isset($_SESSION["senha"])){
    header("Location: index.php");
    exit();
  }
    $mes_frequencia = $_REQUEST['mes'];

    // Seleciona a tabela Frenquência para o if
    // Primeira Seleção da tabela Frequência
    $verifica_tabela = "SELECT * FROM $mes_frequencia";
    $resultado_tabela = $conn->query($verifica_tabela);
?>
<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Relatório de Frequência</title>
    <link rel="stylesheet" href="style.css">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- Font Awesome -->
    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
  </head>
  <body>
    <!-- //Cabeçalho -->
    <?php include_once("_inc/header.inc.php"); ?>

    <!-- //Corpo da Página -->
    <main>
      <?php if($resultado_tabela) { ?>

      <section style="text-align: center; margin: 20px 0px;">
        <h3>Ano Letivo: 2018</h3>
        <h3>Mês Letivo: Janeiro</h3>
      </section>


      <table id="relatorio-notas">
        <thead>
            <tr>
                <th>Nome</th>
                <?php include_once('_inc/table-frequencia-th.inc.php'); ?>
            </tr>
        </thead>
        <tbody>
          <?php
          $consulta_frequencia = "SELECT * FROM $mes_frequencia";
          $resultado_frequencia = $conn->query($consulta_frequencia);
          $row2 = $resultado_frequencia->fetch_assoc();
          $id_aluno = $row2['id_aluno'];

            $consulta_alunos = "SELECT * FROM alunos WHERE id = '$id_aluno'";
            $resultado_alunos = $conn->query($consulta_alunos);
          ?>

          <?php while ($row = $resultado_alunos->fetch_assoc()) { ?>
            <tr>
              <td><?php echo $row['nome']; ?></td>

              <?php include_once("_inc/table-frequencia-td.inc.php"); ?>

            </tr>
          <?php } ?>
        </tbody>
    </table>

      <?php }else {
        echo "Não há registros desse mês.";
      }
      ?>
    </main>

    <!-- //Rodapé -->
    <?php include_once("_inc/footer.inc.php"); ?>
  </body>
</html>

Aonde está o erro?

 

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Olá!

Como as ids são únicas, o trecho abaixo trará apenas um único resultado:

6 horas atrás, emersongo disse:

$consulta_alunos = "SELECT * FROM alunos WHERE id = '$id_aluno'"; $resultado_alunos = $conn->query($consulta_alunos); ?> <?php while ($row = $resultado_alunos->fetch_assoc()) { ?>

 

Link para o comentário
Compartilhar em outros sites

  • 0
3 horas atrás, wash disse:

É uma questão elementar de sql.

Não especifique uma id. Assim, a query trará tudo da tabela alunos:

SELECT * FROM alunos 

Certo Wash, porém dessa forma ele não exibirá do jeito que eu quero. Por exemplo, na tabela Frequencia como eu disse, tenho 2 colunas, id e id_aluno, essa (id_aluno) tem o mesmo valor da coluna id da tabela de Alunos. Então preciso que tenha 2 consultas, uma pra todos os campos da tabela Frequencia, e outra consulta da tabela alunos SOMENTE se o id do aluno tiver nos registros da Frequencia, caso contrário não quero que mostre; Dessa forma que você, ele buscará TODOS os registros de alunos, mesmo que não estejam nos registros da tabela Frequencia. Me corrija se eu estiver errado.

3 horas atrás, wash disse:

É uma questão elementar de sql.

Não especifique uma id. Assim, a query trará tudo da tabela alunos:

SELECT * FROM alunos

Alterei um pouco o código e obtive um resultado melhor, com este código a seguir consegui trazer a quantidade de registros correta, tem 3 registros na tabela Frequencia, no caso 3 alunos, ele trouxe os 3 registros, porém com o mesmo nome. OBS: removi o id do código como você sugeriu.

<?php
  include_once("controller/conexao.php");

  $consulta_alunos = "SELECT * FROM alunos";
  $resultado_alunos = $conn->query($consulta_alunos);
  $row = $resultado_alunos->fetch_array();

  $verifica_tabela = "SELECT * FROM frequencia01_18";
  $resultado_tabela = $conn->query($verifica_tabela);

  while ($row2 = $resultado_tabela->fetch_array()) {
      echo $row['nome'];
  }
 ?>

Desculpe minha ignorância, sei que não está nada profissional, mas não sou um bom entendedor de php.

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
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...