Ir para conteúdo

POWERED BY:

Arquivado

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

cassiano óliver

[Resolvido] Paginação...

Recommended Posts

To com um problema em uma paginação e não consigo achar onde tá o erro...

funciona perfeitamente quando testo local, mas no site não funciona...

 

noticias.php

<div class="noticias">
<table class="noticias" cellpadding="0" cellspacing="1">
<?php
// Quantos registros por página vai ser mostrado
$NumReg = 10; 

// Se a pagina não for setada, recebe o valor 1
if (!isset($_GET["pag"])) {
	$pag = 0;
}

// Primeiro registro
$inicio = $pag * $NumReg;

$sql   = "SELECT * FROM noticias ORDER BY data DESC LIMIT $inicio, $NumReg";
$query = mysql_query($sql);
$total = mysql_num_rows($query);

$sql2 = "SELECT * FROM noticias";
$query2 = mysql_query($sql2);
$tr = mysql_num_rows($query2);

while($noticia = mysql_fetch_array($query)) {
	$nid	  = $noticia["id"];
	$titulo   = $noticia["titulo"];
	$data	 = $noticia["data"];
	$datahora = explode("-", $data);
	$data	 = $datahora["0"];
	$hora	 = $datahora["1"];
	$views	= $noticia["cliques"];
?>
<tr>
	<td class="data"><?php echo $data . "<br />" . $hora; ?></td>
	<td class="titulo"><a href="index.php?pagina=noticia&nid=<?php echo $nid; ?>" class="noticia"><?php echo $titulo; ?></a></td>
</tr>
<?php
}
?>
</table>
</div>
<?php include "paginacao/registros.php"; ?>

paginacao

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

# Verifica se esta na primeira página, se nao estiver ele libera o link para anterior
if ($pag > 0) {
	echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag-1) ." title=\"Registros anteriores\"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."?pagina=" . $_GET["pagina"] . "&pag=$i2 class='pg'>$i</a>";
	}
}

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

Caso queiram ver online: CLIQUE AQUI

se alguém puder me ajudar...

 

no aguardo....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueça o que falei. Falta de atenção minha. :rolleyes:

 

Você tem razão. Não está paginando.

 

 

Troque esta parte:

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

 

 

por esta:

if (!isset($_GET["pag"])) {
	$pag = 0;
}
else
{
	$pag = (int)$_GET['pag'];
}

ou de forma compacta:

$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 0;

 

OBS: Não faz sentido página zero. :blink:

Compartilhar este post


Link para o post
Compartilhar em outros sites

agora sim ta paginando...

esse else é para o caso da register_globals estar off né?

agora que me liguei aqui...

 

OBS: Não faz sentido página zero.

também acho, já tentei várias vezes fazer inicar com 1 mas não consigo....

 

como faço para que comece do 1?

 

trecho que vai na página

<?php
// Quantos registros por página vai ser mostrado
$NumReg = 10; 

// Se a pagina não for setada, recebe o valor 1
!isset($_GET["pag"]) ? $pag = 0 : $pag = $_GET["pag"];

// Primeiro registro
$inicio = $pag * $NumReg;
?>

paginacao.php

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

# Verifica se esta na primeira página, se nao estiver ele libera o link para anterior
if ($pag > 0) {
	echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag-1) ." title=\"Registros anteriores\"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."?pagina=" . $_GET["pagina"] . "&pag=$i2 class='pg'>$i</a>";
	}
}

# Verifica se esta na ultima página, se nao estiver ele libera o link para próxima
if (($pag + 2) < $Npg) {
	echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag + 1)." title=\"Próximos registros\" 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

OBS: Não faz sentido página zero.

também acho, já tentei várias vezes fazer inicar com 1 mas não consigo....

 

como faço para que comece do 1?

 

Assim:

$inicio = ($pag - 1) * $NumReg;

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

aí deu erro...

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/curtindo/public_html/noticias/noticias.php on line 18

 

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/curtindo/public_html/noticias/noticias.php on line 24

Compartilhar este post


Link para o post
Compartilhar em outros sites

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10, 10' at line 1

bom pelo que entendi, ta retornando valor negativo....

é isso mesmo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

do jeito que citou aí não funciona a paginação...

 

a pagina ta assim:

<div class="noticias">
<table class="noticias" cellpadding="0" cellspacing="1">
<?php
// Quantos registros por página vai ser mostrado
$NumReg = 10; 

// Se a pagina não for setada, recebe o valor 1
!isset($_GET["pag"]) ? $pag = 0 : $pag = $_GET["pag"];

// Primeiro registro
$inicio = $pag * $NumReg;

$sql   = "SELECT * FROM noticias ORDER BY data DESC LIMIT $inicio, $NumReg";
$query = mysql_query($sql);
$total = mysql_num_rows($query);

$sql2 = "SELECT * FROM noticias";
$query2 = mysql_query($sql2);
$tr = mysql_num_rows($query2);

while($noticia = mysql_fetch_array($query)) {
	$nid	  = $noticia["id"];
	$titulo   = $noticia["titulo"];
	$data	 = $noticia["data"];
	$datahora = explode("-", $data);
	$data	 = $datahora["0"];
	$hora	 = $datahora["1"];
	$views	= $noticia["cliques"];
?>
<tr>
	<td class="data"><?php echo $data . "<br />" . $hora; ?></td>
	<td class="titulo"><a href="index.php?pagina=noticia&nid=<?php echo $nid; ?>" class="noticia"><?php echo $titulo; ?></a></td>
</tr>
<?php
}
?>
</table>
</div>
<?php include "paginacao/registros.php"; ?>

paginacao.php

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

# Verifica se esta na primeira página, se nao estiver ele libera o link para anterior
if ($pag > 0) {
	echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag-1) ." title=\"Registros anteriores\"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."?pagina=" . $_GET["pagina"] . "&pag=$i2 class='pg'>$i</a>";
	}
}

# Verifica se esta na ultima página, se nao estiver ele libera o link para próxima
if (($pag + 2) < $Npg) {
	echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag + 1)." title=\"Próximos registros\" 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

Estava ficando -10 pois você definiu $pag como zero, não como um

 

$pag = !isset($_GET["pag"]) ? 1 : (int)$_GET["pag"];

$inicio = ($pag - 1) * $NumReg;

Agora deve funcionar corretamente, e iniciando na página 1, não na zero.

 

 

Na SQL 2, use Count(*) para contar os registros, pis não é necessário selecionar todos os dados. Usando count(*), o script torna-se mais rápido.

Compartilhar este post


Link para o post
Compartilhar em outros sites

alterei, mas continua a mesma coisa...

só que agora a paginação já inicia na página 2, mas o valor da $pag ainda é -1 em relação a página atual..

EX:

na página 1 $pag=0

na página 2 $pag=1

 

e assim por diante...

 

ta assim o codigo

<?php
// Quantos registros por página vai ser mostrado
$NumReg = 10; 

// Se a pagina não for setada, recebe o valor 1
!isset($_GET["pag"]) ? $pag = 1 : $pag = (int)$_GET["pag"];

// Primeiro registro
$inicio = ($pag - 1) * $NumReg;

$sql   = "SELECT * FROM noticias ORDER BY data DESC LIMIT $inicio, $NumReg";
$query = mysql_query($sql);
$total = mysql_num_rows($query);

$sql2 = "SELECT * FROM noticias";
$query2 = mysql_query($sql2);
$tr = mysql_num_rows($query2);

while($noticia = mysql_fetch_array($query)) {
	$nid	  = $noticia["id"];
	$titulo   = $noticia["titulo"];
	$data	 = $noticia["data"];
	$datahora = explode("-", $data);
	$data	 = $datahora["0"];
	$hora	 = $datahora["1"];
	$views	= $noticia["cliques"];
?>

e não consegui usar o count na sql, como ficaria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

alterei, mas continua a mesma coisa...

só que agora a paginação já inicia na página 2, mas o valor da $pag ainda é -1 em relação a página atual..

EX:

na página 1 $pag=0

na página 2 $pag=1

 

e assim por diante...

É assim mesmo. O primeiro registro no banco de dados é o zero. Por isso, no Limit, é necessário iniciar por zero. Para isso, é necessário subtrair uma unidade do número da página corrente. Seguindo a lógica.

Página 1: Limit, 0,10 = (1 - 1) * 10, 10 -> de 0 a 9

Página 2: Limit 10, 10 = (2 -1 ) * 10, 10 -> de 10 a 19

e assim vai

 

Entendeu por que é necessário subtrair?

 

 

 

e não consegui usar o count na sql, como ficaria?

$sql = mysql_query("select count(*) as total From tabela");
$total = mysql_result($sql, 0, 'total');

 

 

E use $_SERVER['PHP_SELF'] em vez de $PHP_SELF

Compartilhar este post


Link para o post
Compartilhar em outros sites

É assim mesmo. O primeiro registro no banco de dados é o zero. Por isso, no Limit, é necessário iniciar por zero. Para isso, é necessário subtrair uma unidade do número da página corrente. Seguindo a lógica.

Página 1: Limit, 0,10 = (1 - 1) * 10, 10 -> de 0 a 9

Página 2: Limit 10, 10 = (2 -1 ) * 10, 10 -> de 10 a 19

e assim vai

 

Entendeu por que é necessário subtrair?

essa parte tinha entendido já...

 

mas o que ta ocorrendo acho q você não entendeu...

quando eu entro na página, na url ta assim:

...pagina=noticias&pag=0, mas na paginação mostra página "1"

...pagina=noticias&pag=1, mas na paginação mostra página "2" dos registros...

 

eu keria, que ficasse o mesmo número, tanto na $pag quanto na página atual dos registros...tendeu?

 

o código que me passou faz com que já inicie na página "2" dos registros, mas a $pag está 1 e também dá erro quando volta uma página...

 

dá uma olhada: http://www.curtindonabalada.com/index.php?pagina=noticias

 

código atual:

// Quantos registros por página vai ser mostrado
$NumReg = 10;

// Se a pagina não for setada, recebe o valor 1
!isset($_GET["pag"]) ? $pag = 1 : $pag = (int)$_GET["pag"];

// Primeiro registro
$inicio = ($pag - 1) * $NumReg;

$sql   = "SELECT * FROM noticias ORDER BY data DESC LIMIT $inicio, $NumReg";
$query = mysql_query($sql);
$total = mysql_num_rows($query);

$sql2 = "SELECT * FROM noticias";
$query2 = mysql_query($sql2);
$tr = mysql_num_rows($query2);

será que também não deve alterar algo no script da paginação?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ocorre ao clicar nos links da paginação, né?

Veja que você está subtraindo os números na paginação, também. Aí dá esse problema.

<?php

# Número total de páginas

$Npg = ceil($tr / $NumReg);

$Npg++;

 

# Verifica se esta na primeira página, se nao estiver ele libera o link para anterior

if ($pag > 0) {

echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag-1) ." title=\"Registros anteriores\"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."?pagina=" . $_GET["pagina"] . "&pag=$i2 class='pg'>$i</a>";

}

}

 

# Verifica se esta na ultima página, se nao estiver ele libera o link para próxima

if (($pag + 2) < $Npg) {

echo "<span class='AntProx'><a href=".$PHP_SELF."?pagina=" . $_GET["pagina"] . "&pag=".($pag + 1)." title=\"Próximos registros\" class=\"prox\">Próxima</a></span>";

}

else {

echo ""; # Caso contrário oculta o link "próxima"

}

?>

seria aqui?

$i2 = $i - 1;
deixar assim:

$i2 = $i;
ainda não testei porque to no trabalho agora...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Exatamente. Ess parte também é uma das que deve ser alterada.

 

 

Reveja bem seu script. Há estes erros:

if ($pag > 0)

 

<a href=".$PHP_SELF."?

&pag=".($pag-1)

if($pag == ($i - 1)) {

if (($pag + 2) < $Npg) {

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.