Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal
Tenho um código em PHP que faz uma paginação no resultado do MYSQL, mais o código tem problema que quando passa para outra página, repeti os registros da página anterior tirando uma.
Tipo assim:
1ª Página
José
Silva
Rodrigues
2ª Página
Silva
Rodrigues
Farias
Teria como deixar na segunda página apenas os registros referentes a página atual?
Segue meu Código
<?php
// definir o numero de itens por pagina
$itens_por_pagina = 5;
// pegar a pagina atual
$pagina = intval($_GET['pagina']);
echo $pagina;
// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, auxiliar_evento_usuario from festa_usuario LIMIT $pagina, $itens_por_pagina";
$execute = $mysqli->query($sql_code) or die($mysqli->error);
$produto = $execute->fetch_assoc();
$num = $execute->num_rows;
// pega a quantidade total de objetos no banco de dados
$num_total = $mysqli->query("select distinct auxiliar_evento_usuario from festa_usuario")->num_rows;
// definir numero de páginas
$num_paginas = ceil($num_total/$itens_por_pagina);
if($num > 0){ ?>
<?php echo $produto['nome']?>
<?php do{ ?>
<?php } while($produto = $execute->fetch_assoc()); ?>
<nav>
<ul class="pagination">
<li>
<a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<?php
for($i=0;$i<$num_paginas;$i++){
$estilo = "";
if($pagina == $i)
$estilo = "class=\"active\"";
?>
<li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
<?php } ?>
<li>
<a href="festas-cadastradas.php?pagina=<?php echo $num_paginas-1; ?>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
<?php } ?>Estou fazendo o que você falou, diminui 1 e então multipliquei pelo número de registros por página,
$pagina = (intval($_GET['pagina'])-1)*5;
**Mais na primeira página fica com valor -5 a variavel $pagina, retornando esse erro**
**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 '-5, 5' at line 1 **O problema é esse:
intval($_GET['pagina'])
Se o $_GET não for um inteiro ou não estiver setado ele retornará como 0,
Logo:
(0-1)*5 = -5.Na primeira página o ** intval($_GET['pagina'])** é setado como zero pois ele não pega o valor de nenhum lugar ficando com valor '0', isso eu entendi.
Como fazer para que fica setado como valor '1' do intval($_GET['pagina']) na primeira página?$pagina = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
Olha como eu fiz ESerra,
$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =($pagina_1-1)*5;
// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, auxiliar_evento_usuario from festa_usuario LIMIT $pagina_2, $itens_por_pagina";
Na primeira página funcionou mais na segunda ja não funcionaQuantos registros tem o BD? Quantos registros por página? $pagina_2 está retornando o valor correto?
Uma dia, evite dizer que "deu erro", isso não define nada, você tem que especificar:
Na segunda página não apareceu nada;
Na segunda página apareceu um erro na query;
Etc.Quantos registros tem o BD?
6
Quantos registros por página?
5
$pagina_2 está retornando o valor correto?
está retornando 0 (zero)
Na segunda página como $pagina_2 é 0 (zero), fica como na primeira página, minha dúvida é fazer a lógica que você falou
Sendo que com iso
$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =($pagina_1-1)*5;
$pagina_2 vai ser sempre igual a zero e precisa ser apenas na primeira página
Página 1 (5 registros por página)
(1-1)*5 => 0 (iniciará no registro "0", ou seja no primeiro;
Página 2 (5 registros por página)
(2-1)*5 => 5
Página 3
(3-1)*5 => 10Fiz assim
// pegar a pagina atual
$pagina_1 = (intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']);
$pagina_2 =((intval($_GET['pagina']+$pagina_1))-1)*5;
Deu certo, mostrou na segunda página apenas o registro referente, porém ali na numeração das páginas não fica selecionado o numero '2' quando vai pra segunda página, essa é a parte do código, pode me dizer porque ocorre isso?
<nav style="text-align:center; font-size:26px;">
<ul class="pagination">
<li>
<a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<?php
for($i=0;$i<$num_paginas;$i++){
$estilo = "";
if($pagina == $i)
$estilo = "class=\"active\"";
?>
<li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
<?php } ?>
<li>
<a href="festas-cadastradas.php?pagina=<?php echo $num_paginas; ?>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>estou fazendo assim, e está quase, mais só que agora a paginação começa de trás para frente
tipo
Primeira Página
Farias
Segunda Página
José
Silva
Rodrigues
$pagina_1 = ((intval($_GET['pagina']) == 0)?1:intval($_GET['pagina'])-1)*5;
teria alguma sugestão?Consegui fazendo assim
$itens_por_pagina = 5;
// pegar a pagina atual
if ((intval($_GET['pagina'])<=0)){
$pagina_1 =0;
}
if ((intval($_GET['pagina'])>=1)){
echo" um";
$pagina_1 = ((intval($_GET['pagina']) == 1)?1:intval($_GET['pagina'])-1)*5;
}$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, auxiliar_evento_usuario from festa_usuario LIMIT $pagina_1, $itens_por_pagina";
**Só que não fica selecionado o numero da página quando troca de página**
<?php } while($produto = $execute->fetch_assoc()); ?>
<nav style="text-align:center; font-size:26px;">
<ul class="pagination">
<li>
<a href="festas-cadastradas.php?pagina=0" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<?php
for($i=0;$i<$num_paginas;$i++){
$estilo = "";
if($pagina == $i)
$estilo = "class=\"active\"";
?>
<li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i+1; ?>"><?php echo $i+1; ?></a></li>
<?php } ?>
<li>
<a href="festas-cadastradas.php?pagina=<?php echo $num_paginas; ?>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
<?php } ?>Oi ESerra não precisava ter me dado uma advertência só queria solucionar a paginação, acho que esse é propósito do Fórum, mais tudo bem...
Segue o código funcionando para quem precisar, já foi testado
<?php
// definir o numero de itens por pagina
$itens_por_pagina = 5;
if(intval($_GET['pagina'])<=0){
echo intval($_GET['pagina']);
$pagina =0;
}
if(intval($_GET['pagina'])>=1){
echo intval($_GET['pagina']);// pegar a pagina atual
$pagina = ((intval($_GET['pagina']) == 0)?1:intval($_GET['pagina']))*5;
}
// puxar produtos do banco
$sql_code = "select distinct tipo_evento_usuario, nome_evento, data, hora, auxiliar_evento_usuario from festa_usuario LIMIT $pagina, $itens_por_pagina";
$execute = $mysqli->query($sql_code) or die($mysqli->error);
$produto = $execute->fetch_assoc();
$num = $execute->num_rows;
// pega a quantidade total de objetos no banco de dados
$num_total = $mysqli->query("select distinct auxiliar_evento_usuario from festa_usuario")->num_rows;
// definir numero de páginas
$num_paginas = ceil($num_total/$itens_por_pagina);
if($num > 0){ ?>
<?php do{ $i++;?>
<h3><i class="entypo-lamp"></i> <?php echo $produto['tipo_evento_usuario']?></h3>
<?php } while($produto = $execute->fetch_assoc()); ?>
<nav style="text-align: center;font-size: 29px;">
<ul class="pagination">
<li>
<a href="festas-cadastradas.php?pagina=<?php echo $_GET['pagina']-1 ?>" aria-label="Previous">
<span aria-hidden="true">«</span>
</a>
</li>
<?php
for($i=0;$i<$num_paginas;$i++){
$estilo = "";
if($_GET['pagina'] == $i)
$estilo = "class=\"active\"";
?>
<li <?php echo $estilo; ?> ><a href="festas-cadastradas.php?pagina=<?php echo $i; ?>"><?php echo $i+1; ?></a></li>
<?php } ?>
<li>
<a href="festas-cadastradas.php?pagina=<?php echo $_GET['pagina']+1 ?>" aria-label="Next">
<span aria-hidden="true">»</span>
</a>
</li>
</ul>
</nav>
<?php } ?>
A lógica da sua paginação está errada:
LIMIT $pagina, $itens_por_pagina
Após o limit o primeiro item marca onde a paginação vai começar, o segundo a quantidade de registros por página, por isso você tem que calcular de forma exata o valor do primeiro item.
De forma básica você deve pegar a página atual, diminuir 1 e então multiplicar pelo número de registros por página, assim:
Página 1 (5 registros por página)