• 0
Sign in to follow this  
emersongo

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

Question

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?

 

Share this post


Link to post
Share on other sites

4 answers to this question

Recommended Posts

  • 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()) { ?>

 

Share this post


Link to post
Share on other sites
  • 0

É uma questão elementar de sql.

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

SELECT * FROM alunos

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this