• 0
Sign in to follow this  
Guest He

Paginacao Php Vs. Mysql

Question

Guest He

<?
$conecta = mysql_connect("localhost", "usr", "usr") or print(mysql_error());
mysql_select_db("main", $conecta) or print(mysql_error());
$sql = mysql_query("SELECT * FROM errors");

$lpp = 2; // Especifique quantos resultados você quer por página
$total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela
$paginas = ceil($total / $lpp); // Retorna o total de páginas
if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada
$inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL
$sql = mysql_query("SELECT * FROM errors LIMIT $inicio, $lpp"); // Executa a query no MySQL com o limite de linhas.

while($l = mysql_fetch_array($sql)) {
     echo "Resultado...$l[id]<br>";
}

// Agora o mais importante, gera os links....

if ($pagina > 0) {
     $menos = $pagina - 1;
     $url = "$PHP_SELF?pagina=$menos";
     print "<a href=\"$url\">&laquo; Anterior</a>";
} else {
     print "&laquo; Anterior";
}

for($i = 0; $i < $paginas; $i++) {
     $linksp = $i + 1;
     if ($pagina == $i) {
             print " | <b>$linksp</b>";
     } else {
             $url = "$PHP_SELF?pagina=$i";
             print " | <a href=\"$url\">$linksp</a>";
     }
}

if($pagina < ($paginas - 1)) {
     $mais = $pagina + 1;
     $url = "$PHP_SELF?pagina=$mais";
     print " | <a href=\"$url\">Pr&oacute;xima &raquo;</a>";
} else {
     print " | Pr&oacute;xima &raquo;";
}
?>

Oi! Tenho uma pergunta sobre o codigo... o que falta pra ele ficar PERFEITO seria o seguinte:

Como eu tenho pouco espaco pra exibir as paginas eu queria o seguinte:

No momento ele esta fazendo assim:

Anterior - 1 - 2 - 3 - 4 - 5...... e continua pra sempre.....

Imagine se eu quero exibir UM registro por pagina, e eu tenho 100 registros, ele vai criar exibir as paginas de 1-100!!!

Eu queria que fosse assim:

quando a pessoa entra tem:

Anterior - 1 - 2 - 3 - 4 - 5 - Proxima

---e quando a pessoa clicar em Proxima ele vai pra:

Anterior - 2 - 3 - 4 - 5 - 6 - Proxima

Entenderam?

Pra não ocupar TANTO espaco na pagina, porque eu tenho uma tabela de 100px pra exibir minhas paginas e se eu exibir mais de 5 paginas ele quebra a tabela!

podem me ajudar com isso? E' urgente!! :(

Share this post


Link to post
Share on other sites

Recommended Posts

  • 0

//Meu tá meu confuso sua pergunta + se eu entendi sê quer mostrar de 5 em 5 registros no máximo é isto ? se for basta colocar no seu código a instrução

LIMIT 0,5 e assim ele vai paginar exibindo de cinco em cinco certo ?//

Share this post


Link to post
Share on other sites
  • 0
Guest He

Nopz, eu quero que ele mostre de 5 em 5 paginas...

Tipo, esse codigo faz isso:

Anterior - 1 - 2 - 3 - 4 - 5.......... ateh terminar todos os registos..... e isso tah quebrando minha tabela porque tah ficando enorme!

Eu quero assim, quando ele tah na pagina UM:

Anterior - 1 - 2 - 3 - 4 - 5 - Proxima

e quando alguém clica em proxima ele vai pra pagina 2, e fica assim:

Anterior - 2 - 3 - 4 - 5 - 6 - Proxima

e quando ele clica em proxima dnovo e vai pra pagina 3, ele fica assim:

Anterior - 3 - 4 - 5 - 6 - 7 - Proxima

entendeu?

Share this post


Link to post
Share on other sites
  • 0

//Meu isso me foi muito útil num sistema para evitar esse tipo de coisa. o mais viável é isso :

  <?php

// Conexão

mysql_connect("$servidor", "$usuario_db", "$senha_db");

mysql_select_db("$nome_do_seu_banco");

// Nome da tabela a ter os registros paginados

$tabela="sua_tabela";

// Total de registros

$sql=mysql_query("SELECT * FROM $sua_tabela");

$total=mysql_num_rows($sql);

// Declaração da pagina inicial

if($pagina=="") {

  $pagina="1";

}

// Maximo de registros por pagina

$maximo="3";

// Calculando o registro inicial

$inicio=$pagina-1;

$inicio=$maximo*$inicio;

// Query no qual o script se basea

$query=mysql_query("SELECT * FROM $sua_tabela LIMIT $inicio,$maximo");

// Mostragem dos dados

while($dados=mysql_fetch_array($query)) {

?>

## Aqui será impresso os dados

<?php

// Calculando pagina anterior

$menos=$pagina-1;

// Calculando pagina posterior

$mais=$pagina+1;

// Calculos para a mostragem de paginas

$p_ini=$mais-1;

$p_ini=$maximo*$p_ini;

// Querys para a mostragem de paginas

$p_query=mysql_query("SELECT * FROM $sua_tabela LIMIT $p_ini,$maximo");

$p_total=mysql_num_rows($p_query);

// Mostragem de pagina

if($menos>0) {

   echo "<a href=\"?pagina=$menos\"><img src=\"anterior.gif\" no border ></a> ";

} if($p_total>0) {

   echo  "<a href=\"?pagina=$mais\"><img src=\"proximo.gif\" no border></a>";

}

?>

agora é só criar dois ponteirinhos em formato gif ou seja < anterior / próximo > enquanto tiver próxima página ele mostra o botão próximo , fica legal //

Share this post


Link to post
Share on other sites
  • 0
Guest He

Por favor gente... realmente, é URGENTE.... :(

Eu não estaria postando esse post inutil se não fosse urgente... :(

Share this post


Link to post
Share on other sites
  • 0
Guest CorN_Sk8

faiz muito tempo que num programa em delphi, mas espero estar ajudando ai vai,,,

bom voce sabe qual é a pagina atual então é facil, se for pagina 2 voce quer mostrar os proximos ate dar 5 certo ?! por ex:

se for 2 a pagina

Anterior | 2 - 3 - 4 - 5 - 6 | Proxima

simples

$pagina = 2;

$link2 = $pagina+1;

$link3 = $pagina+2;

$link4 = $pagina+3;

$link5 = $pagina+4;

usa essa lógica que você consegue;

Share this post


Link to post
Share on other sites
  • 0

$bloco seria a váriavel que determinará o página atual.

$TOTAL_RESUL seria o resultado total da pesquiza no banco de dados.

IF($bloco >= 1 && $bloco <= 4){ $TEM0 = 1; $TEM1 = 4; $TEM2 = 0; }

IF($bloco >= 5 && $bloco <= 9){ $TEM0 = 5; $TEM1 = 9; $TEM2 = 5;}

IF($bloco >= 10 && $bloco <= 14){ $TEM0 = 10; $TEM1 = 14; $TEM2 = 10;}

IF($bloco >= 15 && $bloco <= 19){ ..... e assim em diante....

ai depois você faz assim:

FOR ($DISTRIBUE=$TEM0; $DISTRIBUE < ($TOTAL_RESUL) + 1 ; $DISTRIBUE++){

IF($DISTRIBUE=="$bloco"){ECHO "| <B>$DISTRIBUE</B> ";}

ELSEIF($DISTRIBUE < $TEM1){}

ELSEIF($DISTRIBUE > $TEM2){}

ELSE{ ECHO "| <A HREF='?bloco=$DISTRIBUE'>$DISTRIBUE</A> "; }

} // Fecha distribue.

Este foi um script que fiz para o site http://zonagospel.com/

Digite TRÊS espaços na busca e veja o resultado.

Share this post


Link to post
Share on other sites
  • 0
Guest He

Ihhh, agora vem meu terceiro problema, o codigo de paginacao, esse com imagens, ele só mostra: Anterior e Proxima...

Eu precisava de um que fosse assim:

Anterior - 1 - 2 - 3 - 4 - Proxima

e quando clicava em proxima, ele ficaria assim:

Anterior - 2 - 3 - 4 - 5 - Proxima

O meu problema é que eu tenho uma tabela muito pequena pra exibir TODAS as paginas... então eu precisaria dum tipo de "rotacao" pras paginas.

porque agora meu cadastros aumentaram muito, e estou ficando louco de ficar apertando : Proxmia, proxima, proxima, anterior, proxima. :(

Share this post


Link to post
Share on other sites
  • 0
Guest He, AKA teixmat, AKA utgroup

Eu não entendi o seu codigo... :(

Como que se usa ele? :huh:

Share this post


Link to post
Share on other sites
  • 0

O script serve simplesmente pra criar os links que vão em baixo de uma paginação:

| anterior | << | 4 | 5 | 6 | 7 | 8 | 9 | 10 | >> | próxima |

Como você tem pouco espaço, poderia até ficar:

| << | < | 5 | 6 | 7 | 8 | 9 | > | >> |

Ele faz isso com base numa $id [que corresponde à foto que está sendo exibida] e cria os links com base nessa $id e no $total_fotos...

No caso ele serve pra organizar uma paginação... :rolleyes:

Com um exemplo fica mais fácil entender... ^_^

Share this post


Link to post
Share on other sites
  • 0
Guest He, AKA teixmat, AKA utgroup

Como eu sei muito pouco de PHP, voce poderia adapatr esse codigo:

<?php
$conecta = mysql_connect("localhost","admin","admin");
mysql_select_db("main",$conecta);
$sql = mysql_query("SELECT * FROM gbook");
$lpp = 3; // Especifique quantos resultados você quer por página
$total = mysql_num_rows($sql); // Esta função irá retornar o total de linhas na tabela
$paginas = ceil($total / $lpp); // Retorna o total de páginas
if(!isset($pagina)) { $pagina = 0; } // Especifica uma valor para variavel pagina caso a mesma não esteja setada
$inicio = $pagina * $lpp; // Retorna qual será a primeira linha a ser mostrada no MySQL
$sql = mysql_query("SELECT * FROM gbook LIMIT $inicio, $lpp"); // Executa a query no MySQL com o limite de linhas.

while($l = mysql_fetch_array($sql)) {
     echo "Resultado...<br>";
}

// Agora o mais importante, gera os links....

if ($pagina > 0) {
     $menos = $pagina - 1;
     $url = "$PHP_SELF?pagina=$menos";
     print "<a href=\"$url\">&laquo; Anterior</a>";
} else {
     print "&laquo; Anterior";
}

for($i = 0; $i < $paginas; $i++) {
     $linksp = $i + 1;
     if ($pagina == $i) {
             print " | <b>$linksp</b>";
     } else {
             $url = "$PHP_SELF?pagina=$i";
             print " | <a href=\"$url\">$linksp</a>";
     }
}

if($pagina < ($paginas - 1)) {
     $mais = $pagina + 1;
     $url = "$PHP_SELF?pagina=$mais";
     print " | <a href=\"$url\">Pr&oacute;xima &raquo;</a>";
} else {
     print " | Pr&oacute;xima &raquo;";
}
?>

Se você puder, por favor, adapte o seu codigo a esse, eu sei pouco php. :(

Share this post


Link to post
Share on other sites
  • 0

Eu acho que fica assim:

<?php

function pag($i){ #função que cria o link "| # |"

  echo "|<a href='link_pag.php?id=$i'> $i </a>";

}

#conectando

$conecta = mysql_connect("localhost","admin","admin");

mysql_select_db("main",$conecta);

$sql = mysql_query("SELECT * FROM gbook");

#/conectando

$pg_atual = $_GET[id];

if(!isset($_GET[id])){$pg_atual=1;} #caso não tenha sido passado um ?id=X, seta id=1

$pg_total = mysql_num_rows($sql); # Esta função irá retornar o total de linhas na tabela

$sql = mysql_query("SELECT * FROM gbook WHERE id=".$pg_atual.";"); # Executa a query no MySQL com o limite de linhas.

while($l = mysql_fetch_array($sql)) {

    echo "Resultado...<br>";

}

# Agora o mais importante, gera os links....

echo "<center>";

if(!isset($l)){echo "|<a href='link_pag.php?id=$pg_atual&l=y'> • </a>";} #chave que diz ao script para imprimir a lista completa

else{echo "|<a href='link_pag.php?id=$pg_atual'> • </a>";} #chave que desabilita a impressão da lista completa

if ($pg_atual != 1){   #verificando se é a primeira foto [não exibir "Anterior", nem "<&lt]

echo "|<a href='link_pag.php?id=". ($pg_atual - 1) ."'> Anterior </a>";

echo "|<a href='link_pag.php?id=1'> << </a>";

}

if (isset($l)){ #imprimindo a lista completa

    for ($i = 1 ;$i <= $pg_total;$i++){

      if ($i == $pg_atual){echo "| $i ";continue;}

      pag($i);

   }

}

else{ # imprimindo a lista com margem 3

  for ($i = 1 ;$i <= $pg_total;$i++){

   if ($i < ($pg_atual-3)){continue;}

  if ($i > ($pg_atual+3)){break;}

   if ($i == $pg_atual){

    echo "| $i ";

  continue;}

  pag($i);

   }

}

if ($pg_atual != $pg_total){ # verificando se é a primeira foto [não exibir "Próxima", nem ">>"] 

echo "|<a href='link_pag.php?id=$pg_total'> >> </a>";

  echo "|<a href='link_pag.php?id=".($pg_atual + 1)."'> Próxima </a>";

}

echo "|</center>";

?>

Posso estar errado...não sou muito bom em adaptação de script... mas, como o bueno pediu, tirei o suporte a mais de uma imagem por página... nesse aí só fica com uma por página... :)

Edited by 404error

Share this post


Link to post
Share on other sites
  • 0
Guest He, AKA teixmat, AKA utgroup

valeu, mas....

não posso usar se tiver só um por pagina... preciso no minimo dois porque o sistema que to usando é de forum. então tem que ter uma resposta junto a pergunta, concorda? :(

Mas eu peguei o seu codigo também, ele é muito bom! :D

Share this post


Link to post
Share on other sites
  • 0

Nah...beleza....eu adapto ele [mais uma vez... :P ] pra mais de um por página...não é tão complicado assim...

Vamo lá... :rolleyes:

Ps: valeu pelo "muito bom"... :D

Share this post


Link to post
Share on other sites
  • 0

Voilá:

<?php

function pag($i){ #função que cria o link "| # |"

  echo "|<a href='link_pag.php?id=$i'> $i </a>";

}

#conectando

$conecta = mysql_connect("localhost","admin","admin");

mysql_select_db("main",$conecta);

#/conectando

$pg_atual = $_GET[id]; #pega a variavel ?id=X e passa para $pg_atual

if(!isset($_GET[id])){$pg_atual=1;} #caso não tenha sido passado um ?id=X, seta id=1

$sql = mysql_query("SELECT * FROM gbook");

$rpp = "4"; # $rpp = registros por página

$r_total = mysql_num_rows($sql); # Esta função irá retornar o total de linhas na tabela

$pg_total = ceil($r_total/$rpp); # total de página = total de registros / registros por página

$sql = mysql_query("SELECT * FROM gbook LIMIT".($pg_atual*$rpp).",".$rpp.";"); # Executa a query no MySQL com o limite de linhas.

while($l = mysql_fetch_array($sql)) {

    echo "Resultado...<br>";

}

# Agora o mais importante, gera os links...

if(!isset($l)){echo "|<a href='link_pag.php?id=$pg_atual&l=y'> • </a>";} #chave que diz ao script para imprimir a lista completa

else{echo "|<a href='link_pag.php?id=$pg_atual'> • </a>";} #chave que desabilita a impressão da lista completa

if ($pg_atual != 1){  #verificando se é a primeira foto [não exibir "<", nem "<&lt]

echo "|<a href='link_pag.php?id=1'> << </a>";

echo "|<a href='link_pag.php?id=". ($pg_atual - 1) ."'> < </a>";

}

if (isset($l)){ #imprimindo a lista completa

    for ($i = 1 ;$i <= $pg_total;$i++){

      if ($i == $pg_atual){echo "| $i ";continue;}

      pag($i);

  }

}

else{ # imprimindo a lista com margem 3

  for ($i = 1 ;$i <= $pg_total;$i++){

  if ($i < ($pg_atual-3)){continue;}

  if ($i > ($pg_atual+3)){break;}

  if ($i == $pg_atual){

    echo "| $i ";

  continue;}

  pag($i);

  }

}

if ($pg_atual != $pg_total){ # verificando se é a primeira foto [não exibir ">", nem ">>"]

    echo "|<a href='link_pag.php?id=".($pg_atual + 1)."'> > </a>";

    echo "|<a href='link_pag.php?id=$pg_total'> >> </a>";

}

echo "|";

?>

Isso deve funcionar... ^_^

Share this post


Link to post
Share on other sites
  • 0
Guest He, AKA teixmat, AKA utgroup

Legal, cara.

Muito obrigado! :lol:

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