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

Paginacao Php Vs. Mysql


Guest He

Pergunta

<?
$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!! :(

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

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?

Link para o comentário
Compartilhar em outros 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 //

Link para o comentário
Compartilhar em outros sites

  • 0

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;

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros sites

  • 0

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

Link para o comentário
Compartilhar em outros 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... ^_^

Link para o comentário
Compartilhar em outros 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. :(

Link para o comentário
Compartilhar em outros 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... :)

Editado por 404error
Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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... ^_^

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,7k
×
×
  • Criar Novo...