Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cassiano óliver

Paginação php/mysql

Recommended Posts

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
<?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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

putz, era isso mesmo...

brigadão beraldo...

 

Agora o limite de registros da funcionando, mas os links da paginação não...

eles aparecem como texto, e não como link...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você colocou no echo somente os números, sem eles estarem dentro da tag <a>. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Use a variável $url no atributo href.

 

http://forum.imasters.com.br/public/style_emoticons/default/natal_noel.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Assim que fiz o último post eu corrigi, coloquei os links...

mas não está paginando...

 

PHP
<?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>";

}

?>

Aparece os links, mas quando clico nos links aparece assim na url:

e retorna para a página inicial...

Compartilhar este post


Link para o post
Compartilhar em outros sites

acabei te testar outro script, mas ocorre o mesmo...

faz a limitação dos registros, mostra os links de navegação, mas simplemente não pagina....

tá dificil...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

PHP
if (isset($_SERVER['QUERY_STRING'] && $_SERVER['QUERY_STRING'] != '')

{

    $url = $_SERVER["PHP_SELF"]. "?". $_SERVER['QUERY_STRING'] . "&pagina=10";

}

else

{

    $url = $_SERVER["PHP_SELF"]."?pagina=10";

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, não entendi muito bem essa parte, fiquei confuso...

mas o probleminha consegui resolver, para pegar o pg=pagina na url, usei $_GET["pg"], aí já não preciso mais alterar no código..

 

problema ta resolvido, 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
<?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"

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

a 1ª parte resolvi, já não exibe mais a paginação caso não seja necessário...

 

já a parte de deixar "pag" na url igual ao nº na paginação não consegui ainda...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu costumo fazer assim: na URL, se o valor de "pagina" é 1, uso 0 para criar o $inicio, para ser usado na consulta SQL. Ou seja, sempre uma unidade a menos.

 

Isso faz com que a página seja sempre exibida com a numeraçào correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

a 1ª parte resolvi, já não exibe mais a paginação caso não seja necessário...

resolvi nada, funciona em algumas páginas, outras não...

 

fiz assim

if($tr > $Npg) {
	echo "";
}
else {
	mostro a paginação...
}

Eu costumo fazer assim: na URL, se o valor de "pagina" é 1, uso 0 para criar o $inicio, para ser usado na consulta SQL. Ou seja, sempre uma unidade a menos.

 

Isso faz com que a página seja sempre exibida com a numeraçào correta.

não entendi..

Compartilhar este post


Link para o post
Compartilhar em outros sites

A paginação deve ser mostrada quando houver mais de uma página. Basta verificar se $Mpg é maior que 1.

 

Quanto ao que eu disse, veja:

 

quando a pimeira página for mostrada, o $inicio deve ser 0, pois a consulta SQL requer isso, já que o MySQL considera que o primeiro registro é o 0. Por isso, a página 1 usa o 0 para gerar $inicio.

Assim, a primeira página mostra de 0 a 9 (considerando 10 registros por página).

 

 

Na página 2, o registro começa no 10 e vai até 19. Ou seja, a multiplicação é feita com o total de páginas (10) e 1 (página atual (2) menos uma unidade).

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.