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

Paginação dos resultados de uma consulta


citoplasmatico

Pergunta

Bom, passei o dia quase todo hoje pesquisando sobre o assunto, e de fato, achei diversos tutoriais, mas além de ainda não ter pego a lógica completa do negócio, não consegui implatar os diversos códigos que eu vi, no meu.

A única coisa que eu entendi até agora é que eu preciso definir um LIMIT para a consulta.

Vejam bem, eu tenho o seguinte código:

<?php require "validacao.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exibir Notícias</title>
<style type="text/css">
form fieldset {
    font-family:Arial, Helvetica, sans-serif;
    font-size:14px;
    width:490px
}
form fieldset input {
    border:none;
    font:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#000;
    text-decoration:none
}
form fieldset a {
    font:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#F00;
    text-decoration:none
}
#cancelar a {
    font-family:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#F00;
    text-decoration:none
}
#titulo {
    font-weight:bold
}
</style>
</head>
<body>
<?php
    require "conexao.php";
    $exibir_noticia = "SELECT * FROM noticia ORDER BY id_noticia DESC";
    $query = mysql_query($exibir_noticia);
    $linhas = mysql_num_rows($query);
    for ($contador=0; $contador<$linhas; $contador++) {
        $titulo_noticia = mysql_result($query, $contador, "titulo_noticia");
        $conteudo_noticia = mysql_result($query, $contador, "conteudo_noticia");
        $fonte_noticia = mysql_result($query, $contador, "fonte_noticia");
        $autor_noticia = mysql_result($query, $contador, "autor_noticia");
        echo "<form>";
        echo "<fieldset>";
        echo "<legend>Exibindo Notícia</legend>";
        echo "<br />";
        echo "<b>$titulo_noticia</b>";
        echo "<br /><br />";
        echo $conteudo_noticia;
        echo "<br /><br />";
        echo "<b>Fonte:</b> $fonte_noticia";
        echo "<br /><br />";
        echo " <b>Autor:</b> $autor_noticia";
        echo "</fieldset>";
        echo "</form>";
        echo "<br />";
    }
    mysql_close($conexao);
    echo "<div id=\"cancelar\" align=\"left\"><a href=\"painel_de_controle.php\">VOLTAR</a></div>";
?>
</body>
</html>
Mas creio que apenas esta parte é de maior importancia:
<?php
    require "conexao.php";
    $exibir_noticia = "SELECT * FROM noticia ORDER BY id_noticia DESC";
    $query = mysql_query($exibir_noticia);
    $linhas = mysql_num_rows($query);
    for ($contador=0; $contador<$linhas; $contador++) {
        $titulo_noticia = mysql_result($query, $contador, "titulo_noticia");
        $conteudo_noticia = mysql_result($query, $contador, "conteudo_noticia");
        $fonte_noticia = mysql_result($query, $contador, "fonte_noticia");
        $autor_noticia = mysql_result($query, $contador, "autor_noticia");
        echo "<form>";
        echo "<fieldset>";
        echo "<legend>Exibindo Notícia</legend>";
        echo "<br />";
        echo "<b>$titulo_noticia</b>";
        echo "<br /><br />";
        echo $conteudo_noticia;
        echo "<br /><br />";
        echo "<b>Fonte:</b> $fonte_noticia";
        echo "<br /><br />";
        echo " <b>Autor:</b> $autor_noticia";
        echo "</fieldset>";
        echo "</form>";
        echo "<br />";
    }
    mysql_close($conexao);
?>

Como vocês que já são bem mais experientes podem perceber, trata-se de um loop com a finalidade de exibir em cascata os resultados de um consulta ao banco de dados.

A questão é que eu queria entender como fazer a paginação deste loop (tentei implantar vários códigos, mas nenhum deles deu certo, como já falei), exibindo 10 (por exemplo) registros por página.

Luz, por favor!

Desde já, grato!

:D

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Bom, vou postar o códgio todo que eu tenho até agora:

<?php require "validacao.php"; ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Exibir Notícias</title>
<style type="text/css">
form fieldset {
    font-family:Arial, Helvetica, sans-serif;
    font-size:14px;
    width:490px
}
form fieldset input {
    border:none;
    font:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#000;
    text-decoration:none
}
form fieldset a {
    font:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#F00;
    text-decoration:none
}
#cancelar a {
    font-family:Arial, Helvetica, sans-serif;
    font-size:10px;
    font-weight:bold;
    text-align:left;
    color:#F00;
    text-decoration:none
}
#titulo {
    font-weight:bold
}
</style>
</head>
<body>
<?php
    require "conexao.php";
    $registros = 1;
    if (isset($_GET["pagina"])) {
        $pagina = "0";
    }
    $inicio = $registros * $pagina;
    $total = mysql_query("SELECT * FROM noticia");
    $total_registros = mysql_num_rows($total);
    $total_paginas = ceil($total_registros/$registros) - 1;
    $total_paginas++;
    $exibir_noticia = "SELECT * FROM noticia ORDER BY id_noticia DESC LIMIT $inicio, $registros";
    $query = mysql_query($exibir_noticia) or die(mysql_error());
    while ($dados = mysql_fetch_array($query)) {
        $titulo_noticia = $dados["titulo_noticia"];
        $conteudo_noticia = $dados["conteudo_noticia"];
        $fonte_noticia = $dados["fonte_noticia"];
        $autor_noticia = $dados["autor_noticia"];
        echo "<form>";
        echo "<fieldset>";
        echo "<legend>Exibindo Notícia</legend>";
        echo "<br />";
        echo "<b>$titulo_noticia</b>";
        echo "<br /><br />";
        echo $conteudo_noticia;
        echo "<br /><br />";
        echo "<b>Fonte:</b> $fonte_noticia";
        echo "<br /><br />";
        echo " <b>Autor:</b> $autor_noticia";
        echo "<br /><br />";
        echo "</fieldset>";
        echo "</form>";
        echo "<br />";
    }
    if($pagina > 1){
        $anterior = $pagina -1;
        $url ="?pagina=$anterior";
        echo "<a href='".$url."'>Anterior</a> |";
    }
    echo " Pagina $pagina de $total_paginas ";
    if($pagina < $total_paginas)
   {
      $proxima = $pagina+1;
      $url ="?pagina=$proxima";
     echo " | <a href='".$url."' >Proxima</a>";
   }
    mysql_close($conexao);
    echo "<div id=\"cancelar\" align=\"left\"><a href=\"painel_de_controle.php\">VOLTAR</a></div>";
?>
</body>
</html>

Eu tenho três registros no banco de dados.

O que eu quero é: exibir estes três registros em três páginas. Para isso, eu declarei as variáveis conforme eu achei que a lógica se seguiria de forma correta. Então, eu abro o navegador e entro na exibir_noticias.php?pagina=0. Até ai tudo bem, o último registro inserido na tabela é apresentado (conforme ordem decrescente informada na consulta). A mensagem echo " Pagina $pagina de $total_paginas "; é exibida corretamente, ou seja, Página 0 de 3. Porém, o link de "Próximo" sempre retorna o valor "?pagina=1" (e a mensagem continua dizendo que estou na Página 0), mas mesmo assim, o registro exibido ainda é o mesmo.

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, muito obrigado, eu adicionei o que você sugeriu.

Na primeira vez não deu certo, ai eu fiz umas modificações na declaração de variáveis e funcionou.

Na verdade, eu nem entendi muito bem o que fiz, então, eu vou postar o código todo. Se você puder dar uma comentada (sobre a lógica) também, fico grato.

<?php
    require "conexao.php";
    $registros = 1;
    if (!isset($_GET["pagina"])) {
        $pagina = "0";
    } else {
        $pagina = $_GET["pagina"];
    } 
    $inicio = $pagina - 1;
    $inicio = $inicio * $registros;
    $total = mysql_query("SELECT * FROM noticia");
    $total_registros = mysql_num_rows($total);
    $total_paginas = ceil($total_registros/$registros) - 1;
    $total_paginas = $total_paginas + 1;
    $exibir_noticia = "SELECT * FROM noticia ORDER BY id_noticia DESC LIMIT $inicio, $registros";
    $query = mysql_query($exibir_noticia) or die(mysql_error());
    while ($dados = mysql_fetch_array($query)) {
        $titulo_noticia = $dados["titulo_noticia"];
        $conteudo_noticia = $dados["conteudo_noticia"];
        $fonte_noticia = $dados["fonte_noticia"];
        $autor_noticia = $dados["autor_noticia"];
        echo "<form>";
        echo "<fieldset>";
        echo "<legend>Exibindo Notícia</legend>";
        echo "<br />";
        echo "<b>$titulo_noticia</b>";
        echo "<br /><br />";
        echo $conteudo_noticia;
        echo "<br /><br />";
        echo "<b>Fonte:</b> $fonte_noticia";
        echo "<br /><br />";
        echo " <b>Autor:</b> $autor_noticia";
        echo "<br /><br />";
        echo "</fieldset>";
        echo "</form>";
        echo "<br />";
    }
    if($pagina > 1){
        $anterior = $pagina - 1;
        $url ="?pagina=$anterior";
        echo "<a href='".$url."'>Anterior</a> |";
    }
    echo " Pagina $pagina de $total_paginas ";
    if($pagina < $total_paginas) {
      $proxima = $pagina + 1;
      $url ="?pagina=$proxima";
      echo " | <a href='".$url."' >Proxima</a>";
    }
    mysql_close($conexao);
    echo "<div id=\"cancelar\" align=\"left\"><a href=\"painel_de_controle.php\">VOLTAR</a></div>";
?>

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