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

Problemas com paginação, não conserva o valor da variável na segunda página em diante.


Kekes

Pergunta

Estou com um problema na paginação. A primeira página funciona muito bem, mas quando clico na pagina seguinte, percebi que a variável responsável pela busca, está perdendo o valor, ficando em branco.

Agradeceria muito se puderem me ajudar nesse problema.

o código está abaixo.

<?php include_once "mainCity.php"; ?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cidades / Estados</title>
    <link rel="stylesheet" href="adm_css/admCity.css" />
</head>
<body>
    <main>
        <div class="main-container">
            <div class="cities-container">
                <div class='cidade-container'>
                    <table>
                        <thead>
                            <tr id="coluns">
                                <th id="id">ID</th>
                                <th id="cidade">Cidade / Estado</th>
                                <th id="opcoes">Opções</th>
                            </tr>
                        </thead>
                    <?php 
                        $estado = htmlspecialchars(base64_decode(isset($_GET['e']) ? $_GET['e'] : ""), ENT_QUOTES);
                        echo 'Estado: '.$estado;
                        $sql = "SELECT * FROM cidades WHERE uf = ?";
                        $stmt = $conn->prepare($sql);
                        $stmt->bind_param('i', $estado);
                        $stmt->execute();
                        $result = $stmt->get_result();
                           
                        $porPagina = 12; //registros por página

                        $totalRegistros = mysqli_num_rows($result); //total de registros encontrados

                        $totalPaginas = ceil($totalRegistros / $porPagina); //quantas páginas serão exibidas

                        $paginaAtual = isset($_GET['pagina']) ? $_GET['pagina'] : 1;

                        $indicePrimeiroRegistro = ($paginaAtual - 1) * $porPagina;
                            
                        $resultadosPaginados = "SELECT * FROM cidades WHERE uf = ? ORDER BY nome ASC LIMIT $indicePrimeiroRegistro, $porPagina";
                        $stmt = $conn->prepare($resultadosPaginados);
                        $stmt->bind_param('i', $estado);
                        $stmt->execute();
                        $resultadoPaginado = $stmt->get_result();
                            
                        while ($linha = $resultadoPaginado->fetch_assoc()) {
                            $idCidade = $linha['id'];
                            $nomeCidade = $linha['nome'];
                            $c = base64_encode($idCidade);
                            echo '<thead>
                                <tr id="list">
                                    <th id="id">'.$idCidade.'</th>
                                    <th id="cidade"><a href="admEditCity.php?c='.$c.'">'.$nomeCidade. '</a></th>';
                                    echo '<th id="opcoes"><a href="admEditCity.php?c='.$c.'"><i class="bi-pencil-square"></i></a></th>
                                </tr>
                            </thead>';
                        } ?>
                    </table>
                </div>
                <div class='pagination-container'>
                    <!-- Exibe a paginação   --> 
                    <ul class="pagination">
                <?php
                    for ($pagina = 1; $pagina <= $totalPaginas; $pagina++) {
                        echo '<li class=page-item' .($pagina == $paginaAtual ? 'active' :''). '"><a class="page-link" href="?pagina=' .$pagina.'">' .$pagina .'</a></li>';
                    }
                ?>
                    </ul>    
                </div>
            </div>
        </div>
    </main>
    <footer>
        <?php include_once '../footer.html'; ?>
    </footer>
</body>   
</html>

 

erro.png.391a939b252f20e70c367fd7c9b92801.png

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 1

Depois que terminei de publicar a mensagem abaixo é que eu vi o erro, o problema é esse código:

$estado=(isset($_GET['e'])) ? $_GET['e'] : "SP";

Eu escrevi "SP" e você escreveu "". Você precisa dar um jeito de definir o estado que você quer paginar através desse código:

<li><a href="?pagina=<?=$pagina?>&e=<?=$estado?>"><?=$pagina?></a>

Ou seja, não basta solicitar a página seguinte, você precisa informar ao PHP qual o estado com que você está trabalhando.

 

==================== Desconsiderar o código abaixo, ele está 100% errado ==

Testei o seu código, ele funciona. Eu não conhecia os métodos do mysqli que você usou, eu pensei que fosse PDO.

Para testar o seu código, eu simplifiquei assim:

<?php 
// mysql cidades(id int pk nn ai,nome varchar,uf varchar)
// (1,Diadema,SP)(2,São Paulo,SP)(3,S Bernardo do Campo,SP)
// (4,Mauá,SP)(5,Campinas,SP)(6,Jundiaí,SP)
    $conn=new mysqli("localhost","root","","teste"); 
    $estado=(isset($_GET['e'])) ? $_GET['e'] : "SP";
    $stmt=$conn->prepare("select * from cidades where uf=?");
    $stmt->bind_Param("i",$estado);
    $stmt->execute();
    $result=$stmt->get_result();
    $porPagina=3;
    $totalRegistros= mysqli_num_rows($result);
    $totalPaginas = ceil($totalRegistros / $porPagina);
    $paginaAtual = isset($_GET['pagina']) ? $_GET['pagina'] : 1;
    $indicePrimeiroRegistro = ($paginaAtual - 1) * $porPagina;
    $resultadosPaginados = "SELECT * FROM cidades WHERE uf = ? 
        ORDER BY nome ASC LIMIT $indicePrimeiroRegistro, $porPagina";
    $stmt = $conn->prepare($resultadosPaginados);
    $stmt->bind_param('i', $estado);
    $stmt->execute();
    $cidades = $stmt->get_result();
?>
<table>
    <tr><th>ID<th>Cidade do Estado de <?=$estado?><th>Opções
    <?php foreach($cidades as $cidade): ?>
    <tr><td><?=$cidade['id']?>
        <td><?=$cidade['nome']?>
        <td><a href=explodir.php>Explodir</a>
    <?php endforeach; ?>
</table>
<ul>
    <?php for ($pagina = 1; $pagina <= $totalPaginas; $pagina++) : ?>
    <li><a href="?pagina=<?=$pagina?>"><?=$pagina?></a>
    <?php endfor; ?>
</ul>

 

Editado por Frank K Hosaka
Link para o comentário
Compartilhar em outros sites

  • 0
6 horas atrás, Frank K Hosaka disse:

Depois que terminei de publicar a mensagem abaixo é que eu vi o erro, o problema é esse código:

$estado=(isset($_GET['e'])) ? $_GET['e'] : "SP";

Eu escrevi "SP" e você escreveu "". Você precisa dar um jeito de definir o estado que você quer paginar através desse código:

<li><a href="?pagina=<?=$pagina?>&e=<?=$estado?>"><?=$pagina?></a>

Ou seja, não basta solicitar a página seguinte, você precisa informar ao PHP qual o estado com que você está trabalhando.

 

==================== Desconsiderar o código abaixo, ele está 100% errado ==

Testei o seu código, ele funciona. Eu não conhecia os métodos do mysqli que você usou, eu pensei que fosse PDO.

Para testar o seu código, eu simplifiquei assim:

<?php 
// mysql cidades(id int pk nn ai,nome varchar,uf varchar)
// (1,Diadema,SP)(2,São Paulo,SP)(3,S Bernardo do Campo,SP)
// (4,Mauá,SP)(5,Campinas,SP)(6,Jundiaí,SP)
    $conn=new mysqli("localhost","root","","teste"); 
    $estado=(isset($_GET['e'])) ? $_GET['e'] : "SP";
    $stmt=$conn->prepare("select * from cidades where uf=?");
    $stmt->bind_Param("i",$estado);
    $stmt->execute();
    $result=$stmt->get_result();
    $porPagina=3;
    $totalRegistros= mysqli_num_rows($result);
    $totalPaginas = ceil($totalRegistros / $porPagina);
    $paginaAtual = isset($_GET['pagina']) ? $_GET['pagina'] : 1;
    $indicePrimeiroRegistro = ($paginaAtual - 1) * $porPagina;
    $resultadosPaginados = "SELECT * FROM cidades WHERE uf = ? 
        ORDER BY nome ASC LIMIT $indicePrimeiroRegistro, $porPagina";
    $stmt = $conn->prepare($resultadosPaginados);
    $stmt->bind_param('i', $estado);
    $stmt->execute();
    $cidades = $stmt->get_result();
?>
<table>
    <tr><th>ID<th>Cidade do Estado de <?=$estado?><th>Opções
    <?php foreach($cidades as $cidade): ?>
    <tr><td><?=$cidade['id']?>
        <td><?=$cidade['nome']?>
        <td><a href=explodir.php>Explodir</a>
    <?php endforeach; ?>
</table>
<ul>
    <?php for ($pagina = 1; $pagina <= $totalPaginas; $pagina++) : ?>
    <li><a href="?pagina=<?=$pagina?>"><?=$pagina?></a>
    <?php endfor; ?>
</ul>

 

Amigo muitíssimo obrigado, matou a xarada. Consegui resolver o problema fazendo assim:

$e = base64_encode($estado);
for ($pagina = 1; $pagina <= $totalPaginas; $pagina++) {
	     echo '<li class=page-item' .($pagina == $paginaAtual ? 'active' :''). '"><a class="page-link" href="?pagina=' .$pagina.'&e='.$e.'">' .$pagina .'</a></li>';
}

Frank nem sei como ti agradecer.

 

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