Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera... tô com um probleminha meio besta mais não consigo resolver, nem sei como pesquisar sobre...
tenho o seguinte script de paginação:
$limite = 10;
$pg = (isset($_GET['pg']) && is_numeric($_GET['pg'])) ? $_GET['pg'] : 1;
$inicio = ($pg * $limite) - $limite;
$conexao = mysql_query("SELECT * FROM tabela ORDER BY campo ASC LIMIT $inicio, $limite");
$total = mysql_num_rows(mysql_query("SELECT * FROM tabela"));
$total_pg = ceil($total/$limite);
$total_pg++;
$anterior = ($pg - 3) < 1 ? 1 : $pg - 3;
$proximo = ($pg + 4) > $total_pg ? $total_pg : $pg + 4;
echo ($pg >= 5) ? "<span><a href=\"?pg=1\">« «</a></span>\r\n" : '';
echo ($pg > 1) ? "<span><a href=\"?pg=".($pg - 1)."\">«</a></span>\r\n" : '';
for($i_pg = $anterior; $i_pg < $proximo; $i_pg++) {
if($pg == ($i_pg)) {
echo "<span class=\"pag_atual\">$i_pg</span>\r\n";
} else {
echo "<span><a href=\"?pg=".$i_pg."\">$i_pg</a></span>\r\n";
}
}
echo ($pg + 1) < $total_pg ? "<span><a href=\"?pg=".($pg + 1)."\">»</a></span>\r\n" : '';
echo ($pg <= $total_pg - 5) ? "<span><a href=\"?pg=".($total_pg - 1)."\">» »</a></span>\r\n" : '';
Exibo normalmente com ele a quantidade de registros que possui a tabela dando um echo $total... porém, me surgiu a necessidade de mostrar a posição dos registros na tela, exemplo:
estou exibindo os registros de 10 à 20, então teria de aparecer: Mostrando de 10 até 20 de $total registros... mais não sei como fazer isso...
Alguem poderia dar uma ideia?
Obrigado.
Abs
Exibindo <?php echo ((($i_pg-1) * $limite) + 1); ?> registros de um total de <?php echo $total; ?>
Explicação:
Suponhamos que esteja na página 2, e exiba 10 registros por página, logo:
$i_pg = 2;
$limite = 10;
Sendo assim:
(((2 - 1) * 10) + 1) = 11
Ou seja, começa a exibir a partir do registro 11.
matias_rezende,
O total ($total) eu já mostro numa boa... o problema é como o Diego explicou é exibir a quantidade (de tanto à tanto) que está atualmente na tela.
Diego,
beleza, funcionou em partes mais não é bem isso... tipo... desse modo que você deu exemplo minha primeira página lista que está mostrando 41 registro de total, sendo que na verdade eu só exibo 10 registros por página... a ideia seria assim:
tenho 10 registros na tabela, mostrando do 1 ao 10. ai queria fazer que a mensagem abaixo ficasse Mostrando de 1 até 10 de 100 registros...
Valeu a atenção ai ;)
Tenta assim:
echo 'Mostrando de '.$inicio.' até '.($inicio + $limite);
Carlos Eduardo
Acho que assim vai dar errado... Tenta assim...
echo 'Mostrando de '.$inicio.' até '.($inicio + $limite - 1);
Carlos Eduardo
Ao invés do $inicio, use $inicio + 1 na hora de exibir...
Por que não existe o registro 0.
echo 'Mostrando de '.($inicio + 1).' até '.($inicio + $limite);
echo 'Mostrando de '.($inicio + 1).' até '.($inicio + $limite).' de um total de '.$total.' registros.';
Supondo que $inicio = 0, então...
Mostrando de (0 + 1) até (0 + 10) de um total de (100) registros.
Na verdade não... Porque lá em cima, ele coloca que, se for a primeira consulta, o valor do inicio é 1...
$pg = (isset($_GET['pg']) && is_numeric($_GET['pg'])) ? $_GET['pg'] : 1;
Não sei se vai funcionar.
Carlos Eduardo
A questão do inicio $inicio, eu resolvi assim que terminei de escrever, rs, parei pra pensar e me toquei que seria isso... mais valeu ;)
Agora a questão do final não pode ser:
$inicio + $limite
pois quando a página não está completa ou seja... quando não exibe 10 registros (ex: a última pág) ele mostra redondo... não sei (posso estar falando besteira) mais acho que tenho que fazer algo referente a consulta no banco :S
Então seria:
$total_exibidos = mysql_num_rows($conexao) // A tua query com limite...
echo 'Mostrando de '.($inicio + 1).' até '.($inicio + $total_exibidos).' de um total de '.$total.' registros.';
Não testei, mas acho que isto funciona
$qtde = mysql_num_rows($conexao);
// aí o fim fica
$inicio + $qtde
Carlos Eduardo
beleza... até ai tudo bem... mais como eu faço a consulta no banco? pois se eu fizer uma consulta somente pra saber a quantidade do banco vai ser o mesmo que $total, correto? :S
Ou seja:
Consulto o total no banco (ex. 100)
inicio + total (0 + 100) = 100
Não... você usa a sua variável conexão, que já é a consulta... Só coloca o mysql_num_rows. Vai te retornar quantas linhas tem nesta consulta... Se for a última, e tiver só 3, vai retornar 3, mesmo tendo como limite 10. Entendeu???
Carlos Eduardo
Aaa sim... saquei... po agora ficou belezinha... valeo matias e diego ^^
Resolvido ;D
Abração!
Este é o valor que está na variavel total.
$total = mysql_num_rows(mysql_query("SELECT * FROM tabela"));
Só da um echo nela.
Carlos Eduardo