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

Paginação diferente (Resolvido)


WSoares9

Pergunta

Olá pessoal,

Preciso de uma ajuda: Estou tentando exibir dados da minha tabela só q eu preciso que seja exibido apenas um registro por página ou a página que o usuário solicitar. Já até encontrei exemplos de paginação, mas, nada q faça referência a essa modalidade.

Sei q o problema deve ser simples, mas, já não estou mais conseguindo enxergar o óbvio.

No meu código está acontecendo o seguinte: tenho 4 registros na tabela;

se eu digito um numero o registro é mostrado numa boa, porém se eu clico em

"Anterior" ou "próximo" na url mostra 'pag'com valor correto, mas na tela sou enviado p/ o 1º registro.

Se alguém puder ajudar agradeço muitíssimo.

Segue abaixo o código para análise.

Nome da tabela: comentarios

Codigo: int(10) autoIncrement

Nome: varchar(60)

email: varchar(60)

data: datetime

comentario: text

exibe_comentario.php

<html>

<head>

<title>Comentários</title>

<link href="estilo.css" rel="stylesheet" type="text/css" />

</head>

<body>

<h4 align="left">Comentários</h4>

<?php

// Conecta ao servidor e seleciona o banco de dados

include("msqlconfig.inc");

$reg_por_pag = 1; // Define a qtd. de Registros por página

// Usuário digita o número do comentário a ser exibido

echo"

<form action='exibe_comentario.php' method='post'>

<table width='298' height='20' border='0' align='left'>

<tr>

<td><p align='left'>Digite o nº da página: <input name='pag' type='text' size='4' /></p></td>

<td><input type='submit' value='OK' align='left' /></td>

</tr>

</table>

</form> </br></br>";

// Pegar o nº da página digitada pelo usuário 'pag'

$pag_atual = intval($_POST['pag']);

// captura a quantidade de registros na tabela

$ultimo_reg = mysql_num_rows(mysql_query("select * from comentarios"));

echo '$ultimo_reg= '.$ultimo_reg; // até aqui todo OK

// Se a variável $pag_atual não contiver nenhum valor,

// será atribuido a ela o valor do ultumo registro na tabela

if (!$pag_atual) {

$pag_atual = $ultimo_reg;

}

// Calcular o 1º registro DE CADA PÁGINA

// Exemplo1: (1 * 1) - 1 = 0

// Exemplo2: (2 * 1) - 1 = 1

$inicio_da_pag = ($pag_atual * $reg_por_pag) - $reg_por_pag;

// Lê na tabela "comentarios" o registro a ser mostrado

// LIMIT 'reg. inicial , qtd de reg.'

if (!$_POST['pag']){

// caso o usuário não tenha digitado nada

$query = "select * from comentarios order by Codigo desc LIMIT $inicio_da_pag, $reg_por_pag";

}

else {

// caso o usuário tenha digitado um nº de página

$query = "select * from comentarios where Codigo = '$_POST[pag]'";

}

$res = mysql_query($query) or die("Pesquisa não realizada");

// Seleciona um campo da tabela 'comentarios',

// só pra saber a qtd. de registros existentes

$consulta = mysql_query("SELECT nome FROM comentarios");

// Captura o número de registros lidos

$total_registros = mysql_num_rows($consulta);

// Conhecendo o total de páginas existentes

// Como a intenção é mostrar 1 reg. por página,

// logo, não há necessidade de cálculo, nem arredondamento (ceil)

//$total_paginas = ceil ($total_registros/$reg_por_pag);

$total_paginas = $total_registros;

//calcula o valor de 'pag' a ser passado para a url.

if ($pag_atual>1)

{

$anterior=<a href="exibe_comentario.php?pag='.($pag_atual-1).'"> Anterior</a>';

}

else {

$anterior="Anterior";

}

if ($total_paginas>$pag_atual)

{

$proximo='<a href="exibe_comentario.php?pag='.($pag_atual+1).'"> Próximo</a>';

}

else {

$proximo="Próximo";

}

if ($pag_atual>=$total_paginas)

{

$proximo="Próximo";

}

echo "<div id='mostra_comentario'>";

// Exibe os Links para resgistros "ANTERIOR" e "PRÓXIMO"

echo "

<table width='270' heigth='20' border='0'>

<tr>

<td><div id='reg_anterior'>$anterior</div></td>

<td><div id='reg_proximo'>$proximo</div></td>

</tr>

</table>";

while($mostra = mysql_fetch_array($res)) {

// Converte a DATA para o formato Brasileiro

$data = $mostra['data]; //origem: aaaa-mm-dd 00:00:00

$novadata = substr($data,8,2)."/".substr($data,5,2)."/".substr($data,0,4);

echo "

<table width='270' height='120' border='1' align='left'>

<tr>

<td>Usuário: ".$mostra['Nome']."</td>

</tr>

<tr>

<td>E-mail: ".$mostra['email']."</td>

</tr>

<tr>

<td>Data: ".$novadata."</td>

</tr>

<tr>

<td>Comentário: ".$mostra['comentario']."</td>

</tr>

</table>";

echo "</div>";

}

?>

</body>

</html>

Editado por WSoares9
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0
Olá pessoal,

Preciso de uma ajuda: Estou tentando exibir dados da minha tabela só q eu preciso que seja exibido apenas um registro por página ou a página que o usuário solicitar. Já até encontrei exemplos de paginação, mas, nada q faça referência a essa modalidade.

Sei q o problema deve ser simples, mas, já não estou mais conseguindo enxergar o óbvio.

No meu código está acontecendo o seguinte: tenho 4 registros na tabela;

se eu digito um numero o registro é mostrado numa boa, porém se eu clico em

"Anterior" ou "próximo" na url mostra 'pag'com valor correto, mas na tela sou enviado p/ o 1º registro.

Se alguém puder ajudar agradeço muitíssimo.

Segue abaixo o código para análise.

Nome da tabela: comentarios

Codigo: int(10) autoIncrement

Nome: varchar(60)

email: varchar(60)

data: datetime

comentario: text

exibe_comentario.php

<html>

<head>

<title>Comentários</title>

<link href="estilo.css" rel="stylesheet" type="text/css" />

</head>

<body>

<h4 align="left">Comentários</h4>

<?php

// Conecta ao servidor e seleciona o banco de dados

include("msqlconfig.inc");

$reg_por_pag = 1; // Define a qtd. de Registros por página

// Usuário digita o número do comentário a ser exibido

echo"

<form action='exibe_comentario.php' method='post'>

<table width='298' height='20' border='0' align='left'>

<tr>

<td><p align='left'>Digite o nº da página: <input name='pag' type='text' size='4' /></p></td>

<td><input type='submit' value='OK' align='left' /></td>

</tr>

</table>

</form> </br></br>";

// Pegar o nº da página digitada pelo usuário 'pag'

$pag_atual = intval($_POST['pag']);

// captura a quantidade de registros na tabela

$ultimo_reg = mysql_num_rows(mysql_query("select * from comentarios"));

echo '$ultimo_reg= '.$ultimo_reg; // até aqui todo OK

// Se a variável $pag_atual não contiver nenhum valor,

// será atribuido a ela o valor do ultumo registro na tabela

if (!$pag_atual) {

$pag_atual = $ultimo_reg;

}

// Calcular o 1º registro DE CADA PÁGINA

// Exemplo1: (1 * 1) - 1 = 0

// Exemplo2: (2 * 1) - 1 = 1

$inicio_da_pag = ($pag_atual * $reg_por_pag) - $reg_por_pag;

// Lê na tabela "comentarios" o registro a ser mostrado

// LIMIT 'reg. inicial , qtd de reg.'

if (!$_POST['pag']){

// caso o usuário não tenha digitado nada

$query = "select * from comentarios order by Codigo desc LIMIT $inicio_da_pag, $reg_por_pag";

}

else {

// caso o usuário tenha digitado um nº de página

$query = "select * from comentarios where Codigo = '$_POST[pag]'";

}

$res = mysql_query($query) or die("Pesquisa não realizada");

// Seleciona um campo da tabela 'comentarios',

// só pra saber a qtd. de registros existentes

$consulta = mysql_query("SELECT nome FROM comentarios");

// Captura o número de registros lidos

$total_registros = mysql_num_rows($consulta);

// Conhecendo o total de páginas existentes

// Como a intenção é mostrar 1 reg. por página,

// logo, não há necessidade de cálculo, nem arredondamento (ceil)

//$total_paginas = ceil ($total_registros/$reg_por_pag);

$total_paginas = $total_registros;

//calcula o valor de 'pag' a ser passado para a url.

if ($pag_atual>1)

{

$anterior=<a href="exibe_comentario.php?pag='.($pag_atual-1).'"> Anterior</a>';

}

else {

$anterior="Anterior";

}

if ($total_paginas>$pag_atual)

{

$proximo='<a href="exibe_comentario.php?pag='.($pag_atual+1).'"> Próximo</a>';

}

else {

$proximo="Próximo";

}

if ($pag_atual>=$total_paginas)

{

$proximo="Próximo";

}

echo "<div id='mostra_comentario'>";

// Exibe os Links para resgistros "ANTERIOR" e "PRÓXIMO"

echo "

<table width='270' heigth='20' border='0'>

<tr>

<td><div id='reg_anterior'>$anterior</div></td>

<td><div id='reg_proximo'>$proximo</div></td>

</tr>

</table>";

while($mostra = mysql_fetch_array($res)) {

// Converte a DATA para o formato Brasileiro

$data = $mostra['data]; //origem: aaaa-mm-dd 00:00:00

$novadata = substr($data,8,2)."/".substr($data,5,2)."/".substr($data,0,4);

echo "

<table width='270' height='120' border='1' align='left'>

<tr>

<td>Usuário: ".$mostra['Nome']."</td>

</tr>

<tr>

<td>E-mail: ".$mostra['email']."</td>

</tr>

<tr>

<td>Data: ".$novadata."</td>

</tr>

<tr>

<td>Comentário: ".$mostra['comentario']."</td>

</tr>

</table>";

echo "</div>";

}

?>

</body>

</html>

Cara seu codigo está um pouco confuso, não entendir algumas coisas, mas fiz um exemplo para você ver e acertar o seu

mysql_connect("localhost","root","");
mysql_select_db("finan");

$tabela="finan_entrada";
$Paginas=1;
$Limit=mysql_num_rows(mysql_query("select * from $tabela"));


(!empty($_GET[inicio])) ? ($inicio=trim($_GET[inicio])) : ($inicio=0);
$fin=$inicio+$Paginas;

function ListarPag($Limit, $tabela, $Paginas, $inicio, $fin)
{
($Limit>($inicio+$Paginas)) ? ($proximo=$inicio+$Paginas) : ($proximo='N');
($inicio==0) ? ($anterior='N') : ($anterior=$inicio-$Paginas);

$sql=mysql_query("select * from $tabela limit $inicio,$fin");
echo "select * from $tabela limit $inicio, $fin";
$table="<table bgcolor='#808080'>
               <Tr style='font:bold 16 verdana, sans-serif; color:blue;'>
                   <Td>Data</td><td>Codigo</td>
               </tr>
        ";
$i=0;
while($s=mysql_fetch_array($sql))
{
 ( ( $i%2 ) <1 ) ? ($cor='#FFFFC0') : ($cor='#F3F3F3');
 $table.="<Tr bgcolor='$cor'><Td>".$s[Ent_date]."</td><Td>".$s[Ent_id]."</td></tr>";
 $i++;
}

if ($anterior!='N')
{
$table.="<tr >
             <Td>
                 <a href='$_SERVER[PHP_SELPH]?inicio=$anterior' style='text-decoration:none; color:orange;'>Anterior</a>
             </td>";
}else{
$table.="<tr><td style='color:#004000;'> Anterior</td>";
}
if ($proximo!='N')
{
$table.="
             <td><a href='$_SERVER[PHP_SELPH]?inicio=$proximo' style='text-decoration:none; color:orange;'>Proximo</a></td></tr></table>";
}else{
$table.="<td style='color:#004000;'>Proximo</td></tr></table>";
}
return $table;
}

echo ListarPag($Limit, $tabela, $Paginas, $inicio, $fin);

basta trocar a tabela, a conexão, e os nomes dos campos dentro do while,

essa parte aqui por exemplo não conseguir entender

if (!$pag_atual) {

$pag_atual = $ultimo_reg;

}

o porque voce manda a variavel pag_atual igualar ao ultimo registro, assim so irá mostrar o ultimo registro.

até mais

Link para o comentário
Compartilhar em outros sites

  • 0

Olá rickayron,

Obrigado por sua atenção. Quanto ao q você não entendeu (eu deveria ter explicado antes)...

if (!$pag_atual) {

$pag_atual = $ultimo_reg;

}

o porque voce manda a variavel pag_atual igualar ao ultimo registro, assim so irá mostrar o ultimo registro.

É q na verdade a exibição dos comentários é feita a partir do último registro (que é o mais recente).

Vou tentar adaptar o seu código a minha necessidade, mas, se puderes dar alguma dica pra melhorar o meu código e fazer com que ele funcione, vou ficar muito grato.

Valeu

Abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Cara seu codigo está um pouco confuso, não entendir algumas coisas, mas fiz um exemplo para você ver e acertar o seu

mysql_connect("localhost","root","");
mysql_select_db("finan");

$tabela="finan_entrada";
$Paginas=1;
$Limit=mysql_num_rows(mysql_query("select * from $tabela"));


(!empty($_GET[inicio])) ? ($inicio=trim($_GET[inicio])) : ($inicio=0);
$fin=$inicio+$Paginas;

function ListarPag($Limit, $tabela, $Paginas, $inicio, $fin)
{
($Limit>($inicio+$Paginas)) ? ($proximo=$inicio+$Paginas) : ($proximo='N');
($inicio==0) ? ($anterior='N') : ($anterior=$inicio-$Paginas);

$sql=mysql_query("select * from $tabela limit $inicio,$fin");
echo "select * from $tabela limit $inicio, $fin";
$table="<table bgcolor='#808080'>
               <Tr style='font:bold 16 verdana, sans-serif; color:blue;'>
                   <Td>Data</td><td>Codigo</td>
               </tr>
        ";
$i=0;
while($s=mysql_fetch_array($sql))
{
 ( ( $i%2 ) <1 ) ? ($cor='#FFFFC0') : ($cor='#F3F3F3');
 $table.="<Tr bgcolor='$cor'><Td>".$s[Ent_date]."</td><Td>".$s[Ent_id]."</td></tr>";
 $i++;
}

if ($anterior!='N')
{
$table.="<tr >
             <Td>
                 <a href='$_SERVER[PHP_SELPH]?inicio=$anterior' style='text-decoration:none; color:orange;'>Anterior</a>
             </td>";
}else{
$table.="<tr><td style='color:#004000;'> Anterior</td>";
}
if ($proximo!='N')
{
$table.="
             <td><a href='$_SERVER[PHP_SELPH]?inicio=$proximo' style='text-decoration:none; color:orange;'>Proximo</a></td></tr></table>";
}else{
$table.="<td style='color:#004000;'>Proximo</td></tr></table>";
}
return $table;
}

echo ListarPag($Limit, $tabela, $Paginas, $inicio, $fin);

basta trocar a tabela, a conexão, e os nomes dos campos dentro do while,

essa parte aqui por exemplo não conseguir entender

if (!$pag_atual) {

$pag_atual = $ultimo_reg;

}

o porque voce manda a variavel pag_atual igualar ao ultimo registro, assim so irá mostrar o ultimo registro.

até mais

Caro amigo,

Me desculpe a ignorância, mas, eu estou engatinhando em php e o Seu código me deixou um pouco mais confuso. Se você puder documentá-lo ficaria mais fácil de eu entender e adaptá-lo 'a minha necessidade.

Se alguém puder dar mais alguma ajuda ficarei muitíssimo grato.

Meu objetivo é mostrar um comentário por página (a partir do último, q é o mais recente). Se o usuário desejar, ele pode digitar um número de página a ser mostrada.

Desde já agradeço a atenção.

Um abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Olá pessoal,

Quebrei a cabeça, mas, resolvi o problema. Realmente o código estava meio confuso, com algumas coisas desnecessárias. Fui pro papel, reescrevi o código, deixando-o mais limpo. Porém, só hoje é q vim descobrir o maior dos problemas (não o único, mas, o principal)....

Troquei o metod "post" para "get" e ele funcionou maravilhosamente bem.

A quem interessar possa, segue o novo código (agora funcionando), rsrs.

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Comentários</title>
<link href="estilo.css" rel="stylesheet" type="text/css" />
</head>
<body>
<h4 align="left">Comentários</h4>
<?php
// Conecta ao servidor e seleciona o banco de dados
include("msqlconfig.inc");

$reg_por_pag = 1; // Define a qtd. de Registros por página

// Usuário digita o número do comentário a ser exibido
echo"
<form action='exibe_comentario.php' method='get'>
<table width='298' height='20' border='0' align='left'>
<tr>
   <td><p align='left'>Digite o nº da página: <input name='pag' type='text' size='4' /></p></td>
   <td><input type='submit' value='OK' align='left' /></td>
</tr>
</table>
</form> </br></br>";

// Pegar pela o nº da página digitada pelo usuário 'pag'
$pag_atual = intval($_GET['pag']);

// captura a quantidade de registros na tabela
$ultimo_reg = mysql_num_rows(mysql_query("select * from comentarios"));

// Conhecendo o total de páginas existentes
$total_paginas = $ultimo_reg;

// Se a variável $pag_atual não contiver nenhum valor, será atribuido a ela o valor do ultumo registro na tabela
if (!$pag_atual) {
    $pag_atual = intval($ultimo_reg);
}

// Calcular o 1º registro DE CADA PÁGINA
// Exemplo1:           (1    *     1)        -     1 = 0
// Exemplo2:           (2    *     1)        -     1 = 1
$inicio_da_pag = ($pag_atual * $reg_por_pag) - $reg_por_pag;

// Lê na tabela "comentarios" o registro a ser mostrado
$query = "select * from comentarios where Codigo = '$pag_atual'";
$res = mysql_query($query) or die("Pesquisa não realizada");

//calcula o valor de 'pag' a ser passado para a url.
    if ($pag_atual>1)
         {
         $anterior='<a href="exibe_comentario.php?pag='.($pag_atual-1).'"> Anterior</a>';
         }
    else {
         $anterior="Anterior";
         }
    if ($total_paginas>$pag_atual)
         {
         $proximo='<a href="exibe_comentario.php?pag='.($pag_atual+1).'"> Próximo</a>';    
         }
    else {
          $proximo="Próximo";
         }

echo "<div id='mostra_comentario'>";

// Exibe os Links para resgistros "ANTERIOR" e "PRÓXIMO"
echo "
<table width='270' heigth='20' border='0'>
  <tr>
     <td><div id='reg_anterior'>$anterior</div></td>
     <td><div id='reg_proximo'>$proximo</div></td>
  </tr>
</table>";

//Exibe os dados do registro
while($mostra = mysql_fetch_array($res)) { 
   // Converte a DATA para o formato Brasileiro
   $data = $mostra['data']; //origem: aaaa-mm-dd 00:00:00
   $novadata = substr($data,8,2)."/".substr($data,5,2)."/".substr($data,0,4);
   echo "
<table width='270' height='120' border='1' align='left'>
      <tr>
         <td>Usuário: ".$mostra['Nome']."</td>
      </tr>
      <tr>
         <td>E-mail: ".$mostra['email']."</td>
      </tr>
      <tr>
         <td>Data: ".$novadata."</td>
      </tr>
      <tr>
         <td>Comentário: ".utf8_encode($mostra['comentario'])."</td>
      </tr>
</table>";

echo "</div>";
}
?>
</body>
</html>

Obrigado a todos pela atenção e ajuda.

Podem dar o tópico como RESOLVIDO

Editado por WSoares9
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,2k
    • Posts
      652k
×
×
  • Criar Novo...