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

Paginação php/mysql


cassianooliver

Pergunta

pessoal, to tentando colocar uma paginação aqui em uma página, mas num tendo sucesso não...

o código ficou assim..

Me basiei nesse tuto do fabyo: http://forum.imasters.com.br/index.php?showtopic=125127

O código inteiro é enorme, só deixei mesmo o da paginação, pra facilitar...

<?php
$sql1 = "SELECT * FROM shows";
$seleciona = mysql_query($sql1);
$ts  = mysql_num_rows($seleciona);
if($ts == 0) {
    echo "<h2 class='titulo'>Nenhum show cadastrado...</h2>";
}

$pagina = 0;
if(isset($_GET["pagina"])) {
    $pagina = $_GET["pagina"];
}

$limite = 10;
$paginas = ceil($ts / $limite);
$inicio = $pagina * $limite; 

$sql2 = mysql_query("SELECT * FROM shows ORDER BY data DESC LIMIT $inicio, $limite");
$conta = mysql_num_rows($sql2); 

while ($exibe = mysql_fetch_array ($seleciona)) {
    ...
}

if($pagina > 0) {
    $menos = $pagina - 1;
    $url = $_SERVER["PHP_SELF"]."?pagina=".$menos;
    echo "Anterior";
}

for($i = 1;$i < $paginas; $i++) {
    $url = $_SERVER["PHP_SELF"]."?pagina=".$i;
    echo " | $i";
}

if($pagina < $paginas - 1) {
    $mais = $pagina + 1;
    $url = $_SERVER["PHP_SELF"]."?pagina=".$mais;
    echo " | Próxima";
}
?>

O que ta acontecendo é o seguinte...

Não ta funcionando o "limite" de registros, mas mesmo assim aparece a paginação no final da página...

| 1 | 2 | 3 | Próxima...

onde to errando?

Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

na verdade não...

while ($exibe = mysql_fetch_array ($seleciona))
aqui usei a variavel errada... o correto é assim...
while ($exibe = mysql_fetch_array ($sql2))
Bom, pelo menos agora o limite de registros ta funcionando.. mas a paginação aparece como texto normal... e não como link para navegar... não aparecia links porque não os coloquei... agora corrigi, mas a paginação não funciona... quando clico num link aparece assim na url:
mas vai para a página inicial...
<?php
$sql1 = "SELECT * FROM shows";
$seleciona = mysql_query($sql1);
$ts  = mysql_num_rows($seleciona);
if($ts == 0) {
                echo "<h2 class='titulo'>Nenhum show cadastrado...</h2>";
}

$pagina = 0;
if(isset($_GET["pagina"])) {
                $pagina = $_GET["pagina"];
}

$limite = 10;
$paginas = ceil($ts / $limite);
$inicio = $pagina * $limite;

$sql2 = mysql_query("SELECT * FROM shows ORDER BY data DESC LIMIT $inicio, $limite");
$conta = mysql_num_rows($sql2);

while ($exibe = mysql_fetch_array ($sql2)) {
                ...
}

if($pagina > 0) {
                $menos = $pagina - 1;
                $url = $_SERVER["PHP_SELF"]."?pagina=".$menos;
                echo "<a href='$url'>Anterior</a>";
}

for($i = 1;$i < $paginas; $i++) {
                $url = $_SERVER["PHP_SELF"]."?pagina=".$i;
                echo " | <a href='$url'>$i</a>";
}

if($pagina < $paginas - 1) {
                $mais = $pagina + 1;
                $url = $_SERVER["PHP_SELF"]."?pagina=".$mais;
                echo " | <a href='$url'>Próxima</a>";
}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

pessoal, descobri onde tá o erro...

a página inicial, abri assim:

admin.php?pg=agenda
aí quando clico para paginar, só retorna
admin.php?pag=1

ele tá tirando o pg=agenda...

como fazer pra que ele não remova isso da url?

* Manualmente acrescentei isso nos links e a paginação já está funcionando, mas gostaria de saber se tem como fazer isso sem ter que acrescentar manualmente...

echo "<span class='AntProx'><a href=".$PHP_SELF."?pg=agenda&pag=".($pag + 1)." class='prox'>Pr&oacute;xima</a></span>";

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, o problema ta resolvido (como já colocaram no tópico), mas tava tentando fazer 2 coisinhas aqui mas não tive sucesso...

na página dos registros, mesmo que não precise da paginação, o "1" que representa a 1ª página sempre é exibido, não to conseguindo condicionar pra remover a paginação caso não seja necessário...

e "pag" inicia sempre em 0.

Ex: to na página 1, mas na url ta pag=0..

to na página 2, mas na url ta pag=1

gostaria de deixar igual...

o script

<?php
#Número de registros por página
$NumReg = 10;

#Verifica se a páginação está setada
if(!isset($_GET["pag"])) {
    $pag = 0;
}

#Pego o 1º registro
$inicio = $pag * $NumReg;

# Número total de páginas
$Npg = ceil($tr / $NumReg);
$Npg++;

# Verifica se esta na primeira página, se não estiver ele libera o link para anterior
if ( $pag > 0) {
    echo "<span class='AntProx'><a href=".$PHP_SELF."?pg=" . $_GET["pg"] . "&pag=".($pag-1) ." class='ant'>Anterior</a></span>";
}
else {
echo ""; # Caso contrário oculta o link "anterior"
}

# Faz aparecer os numeros das páginas entre os links ANTERIOR e PROXIMA
for($i = 1; $i < $Npg; $i++) {
    # Verifica a página que o navegante esta e retira o link do número para identificar visualmente
    if($pag == ($i - 1)) {
        echo "<span class='pga'>$i</span>";
    }
    else {
        # Acrescenta os links para cada página
        $i2 = $i - 1;
        echo "<a href=".$PHP_SELF."?pg=" . $_GET["pg"] . "&pag=$i2 class='pg'>$i</a>";
    }
}

# Verifica se esta na ultima página, se não estiver ele libera o link para próxima
if (($pag + 2) < $Npg) {
    echo "<span class='AntProx'><a href=".$PHP_SELF."?pg=" . $_GET["pg"] . "&pag=".($pag + 1)." class='prox'>Próxima</a></span>";
}
else {
    echo ""; # Caso contrário oculta o link "próxima"
}
?>

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

  • 0

Para exibir a paginação apenas quando for necessário pegue a variável $Npg e com um if verifique se ela tem valor diferente de 1... algo do tipo:

if ($Npg  != '1'){
//Aqui o código da paginação
}
Tem que ver se realmente é 1 ou zero o valor que tem que aparecer... mas dê um echo pra ver que valor aparece quando a paginação não é necessário ai é só substitiuir no que eu passei... Quanto a outra parte, isso acontece por causa de uma "preguiça" de tratar o que vem do GET... Assim isso:
if(!isset($_GET["pag"])) {
    $pag = 0;
}

#Pego o 1º registro
$inicio = $pag * $NumReg;
Deve ser trocado por isso:
if(!isset($_GET["pag"])) {
    $pag = 1;
}else{
$pag = $_GET["pag"];
}

#Pego o 1º registro
$pag = $pag-1;
$inicio = $pag * $NumReg;

Você vai ter que alterar nos links para começar a aparer agora a partir do 1... mas to com preguiça de pensar por você essa parte...

Link para o comentário
Compartilhar em outros sites

  • 0

Deixa eu recapitular, pelo que eu entedi o que acontece é, mesmo que não seja nacessária a página aparece o número "1" referente a página 1 (que é única), se for isso, a questão é de lógica, olha só, pelo seu script $tr é o número de registros contados no banco... agora olha se isso tem sentido:

if($tr > $Npg) {

Tradução:

Se(número total de registros do BD for maior que o número total de página){

Vê só como não tem sentido algum... o que você tem que fazer é ver a quantidade total de páginas, se for igual a 1 não exibe a páginação, caso contrário exibe...

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,3k
    • Posts
      652,1k
×
×
  • Criar Novo...