Jump to content
playnet

Paginação usando form html

Recommended Posts

Boa noite!

 

Gostaria de uma ajuda para ajustar o funcionamento de paginação com os dados enviados através de um form, vou utilizar um exemplo fictício para descrever o que preciso.

Form para obter duas informações (loja e produto) através de uma lista de opções extraídas do BD:

 

<?php

//Conectar ao BD
    include_once("connection.php");

?>    

<html>

    <head>
        <title>Test</title>    
    </head>
        <body bgcolor="DAEBE1">
            <div id="report">
                
                <form action="view_produtos.php" method="POST" enctype="multipart/form-data">

                    Loja: <select name="loja"> 
                            <option value="">Selecione a Loja</option>
                        <?php
                        $query = "SELECT nome FROM lojas WHERE ativo='S' order by nome asc";
                        $result = mysqli_query($conn, $query) or die ("Error ao selecionar loja");
                        foreach ($result as $loja) {
                        ?>    
                            <option value="<?php echo $loja["nome"]; ?>"><?php echo $loja["nome"];?></option>
                        <?php
                        }
                        ?>
                            </select>&emsp;

                    Produto: <select name="produto">
                            <option value="">Selecione o produto</option>
                        <?php
                        $query = "SELECT nome FROM produtos order by nome asc";
                        $result = mysqli_query($conn, $query) or die ("Error ao selecionar produtos");
                        foreach ($result as $produto) {
                        ?>    
                            <option value="<?php echo $produto["nome"]; ?>"><?php echo $produto["nome"];?></option>
                        <?php
                        }
                        ?>
                            </select>    

                        <p><input type="submit" value="Enviar" style="width: 120px; height: 30px"></p>
                        <p><input type="hidden" name="test" value="ok"></p>    
                </form>                  

            </div>

        </body>      
</html>      

 

PHP - view_produtos.php

Pego as informações enviadas pelo submit e uso suas respectivas variáveis na consulta sql. Mostro o resultado da consulta com o código de paginação ativada.

 

<?php

//Conectar ao BD
    include_once("connection.php");

    @session_start();
?>    

<html>

    <head>
        <title>Test</title>    
    </head>
        <body bgcolor="DAEBE1">

                <?php

                if(isset($_POST['test']) && $_POST['test'] == "ok"){

                    $loja = $_POST['loja'];
                    $produto = $_POST['produto'];

                ?>
            <p>
            <table border='2'>
                <tr bgcolor='#A9A9A9' align='center'>
                    <td>Loja</td>
                    <td>Produto</td>
                </tr>    

                <?php

            //Paginação
                $page = (isset($_GET['page']))? $_GET['page'] : 1;   
                
                $query = "SELECT loja, produto FROM ... WHERE $loja ... AND $produto ...";
                $result = mysqli_query($conn, $query) or die ("Erro na consulta");    
                $rows = mysqli_num_rows($result);

                $total_reg = "10"; // Número de registros por página
                $numpage = ceil($rows/$total_reg);
                $inicio = ($total_reg*$page)-$total_reg;
                $limit_result = mysqli_query($conn, "$query LIMIT $inicio, $total_reg") or die ("Erro na consulta"); 

                
            while ($row = mysqli_fetch_object($limit_result))
            {        
                    echo "<tr align='center'>";
                    echo "<td>".$row->loja."</td>";
                    echo "<td>".$row->produto."</td>";
                    echo"</tr>";    
            }

            //Exibe a Paginação 
            for($i = 1; $i < $numpage + 1; $i++) { 
                echo "<a href='?page=$i'>Page".$i."</a>&emsp;"; 
            }
                                
            }    
                
            ?>    
                
            </table>

        </body>     
</html>    

        

Tanto a consulta como o código de paginação estão funcionando... o problema é:

Se eu executo o view_produtos.php individualmente tudo funciona, a quebra de página fica certinha mostrando o resultado exato em cada page. Agora se pego os dados a partir do form que eu descrevi acima, ao clicar no link da page 2 por exemplo, ele mostra o resultado em branco, sendo necessário dar submit novamente pra exibir a page 2. 

Como eu faria para mostrar os resultados da page 2, page 3, etc.. sem precisar enviar os dados de form novamente? Acredito também que eu precisaria manter os dados no form após o submit.

 

Alguma sugestão?

 

Obrigado,

Alex

Share this post


Link to post
Share on other sites

E AÍ, então, creio que seja pois o $_POST é necessário o primeiro gatilho ( do form ), se você atualiza a página view_produtos automaticamente não existe mais $_POST, então você deve trocar o $_POST por $_SESSION

start_session();

$_SESSION['loja'] = $_POST['loja'];

assim os dados enviados do form ficarão armazenados ;) 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By vicentepc
      Desenvolvi um código em java em um Servlet para gerar uma página dinamicamente, que faz parte de uma API. De imediato, a página apresenta um cabeçalho com um botão Imprimir, um corpo padrão e um rodapé. Quando o usuário clicar no botão Imprimir, o conteúdo da página é visualizado em duas colunas (formatado com css para o navegador Chrome). Assim, o usuário poderá imprimi-la ou gravar o arquivo pdf como um documento em duas colunas.
      No entanto, desejo apresentar o número de cada página na parte superior direita. Como essa formatação está sendo realizada com CSS de forma dinâmica pelo Servlet, não estou conseguindo apresentar a numeração contínua em cada página. Como resolver isso? Por favor, se alguém possuir a solução, postar um código de exemplo.Uma parte do código Java está em anexo.
       Grato.
      html="<html>"+salto; html+="<head>"+salto; // html+="<link rel=\"stylesheet\" type=\"text/css\" href=\" + request.getContextPath() + \"style.css\" />"+salto; html+="<link rel=\"stylesheet\" type=\"text/css\" href=\"stylexx.css\" />"+salto; html+="<script type=\"text/javascript\" src=\"https://gc.kis.v2.scr.kaspersky-labs.com/A889A9A6-7DDA-F641-9080-50A30A6B2DB6/main.js\" charset=\"UTF-8\"></script>"+salto; //>>>>> script para number page /*html+="<script>"+salto; html+="pdfInfo = {};"+salto; html+="var x = document.location.search.substring(1).split('&');"+salto; html+="for (var i in x) { var z = x[i].split('=',2); pdfInfo[z[0]] = unescape(z[1]); }"+salto; html+="function getPdfInfo() {"+salto; html+=" var page = pdfInfo.page || 1;"+salto; html+=" var pageCount = pdfInfo.topage || 1;"+salto; html+=" document.getElementById('pdfkit_page_current').textContent = page;"+salto; html+=" document.getElementById('pdfkit_page_count').textContent = pageCount;"+salto; html+="}"+salto; html+="</script>"; */ html+="</head>"+salto; html+="<body onload=\"getPdfInfo()\">"+salto; //>> // html+="h1 { page-break-before: always;}"+salto; // html+="<h1>pág</h1>"; //> html+="<div class=\"page-header\" style=\"text-align: center\">"+salto; // html+=identificacao; html+="<br/>"+salto; html+="<button type=\"button\" onClick=\"window.print()\" style=\"background: #FFD700\">"+salto; html+="Imprimir"; html+="</button>"+salto; html+="</div>"+salto; html+="<div class=\"page-footer\">"+salto; html+="<div class=\"footer\">"+salto; //<input type="nome" name="" id="test" placeholder="Insira sua matéria aqui!"> //<button id="anexar">Anexar</button> html+="<div id=\"footer\"></div>"+salto; html+="</div>"+salto; html+="<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js\"></script>"+salto; html+="<script>"+salto; html+=" $(document).ready(function(){"+salto; html+=" $(\"#anexar\").click(function(){"+salto; html+=" $(\"#anexar\").hide();"+salto; html+=" var texto = $(\"#test\").val();"+salto; html+=" $(\"#test\").hide();"+salto; html+=" $(\"#footer\").html(texto);"+salto; html+=" $(\"#footer\").show();"+salto; html+=" });"+salto; html+=" });"+salto; html+="</script>"+salto; html+=" </div>"+salto; html+="<table>"+salto; html+=" <thead>"+salto; html+=" <tr>"+salto; html+=" <td>"+salto; html+=" <!--place holder for the fixed-position header-->"+salto; html+=" <div class=\"page-header-space\"></div>"+salto; html+=" </td>"+salto; html+=" </tr>"+salto; html+=" </thead>"+salto; html+="<tbody>"+salto; html+="<tr>"+salto; html+=" <td>"+salto; html+=" <!--*** CONTENT GOES HERE ***-->"+salto; html+=" <div class=\"page\">"+salto; html+=" <div class=\"content\">"+salto; //elemento que mostra numero da pagina // html+="<div id=\"pdfkit_page_current\"></div>"+salto; rs = st.executeQuery(sql); String inicioP="";//"<p>"; String fimP="";//"</p>" String strBR="</br>"; while (rs.next()) { String texto1=inicioP+"<b>QUESTÃO No.: "+rs.getInt("numeroQuestao")+"</b><p/>"+salto; String texto2=inicioP+rs.getString("enunciado")+inicioP+strBR+salto; String alternativa=rs.getString("alternativaA"); int posicao=alternativa.indexOf("<p"); int posicaoPosP=-1; String alternativaParte1 = alternativa.substring(0,posicao+2); String novaAlternativa=""; if (posicao>=0) { for(int k=posicao;k<alternativa.length();k++) { if (alternativa.charAt(k)=='>') { posicaoPosP=k; break; } } if (posicaoPosP>0) { String alternativaP=alternativa.substring(0,posicaoPosP+1); novaAlternativa=alternativaP+"A) "+alternativa.substring(posicaoPosP+1); alternativa = novaAlternativa; } } String texto3=alternativa+fimP+strBR+salto; alternativa=rs.getString("alternativaB"); posicao=alternativa.indexOf("<p"); posicaoPosP=-1; alternativaParte1 = alternativa.substring(0,posicao+2); novaAlternativa=""; if (posicao>=0) { for(int k=posicao;k<alternativa.length();k++) { if (alternativa.charAt(k)=='>') { posicaoPosP=k; break; } } if (posicaoPosP>0) { String alternativaP=alternativa.substring(0,posicaoPosP+1); novaAlternativa=alternativaP+"B) "+alternativa.substring(posicaoPosP+1); alternativa = novaAlternativa; } } String texto4=alternativa+fimP+strBR+salto; alternativa=rs.getString("alternativaC"); posicao=alternativa.indexOf("<p"); posicaoPosP=-1; alternativaParte1 = alternativa.substring(0,posicao+2); novaAlternativa=""; if (posicao>=0) { for(int k=posicao;k<alternativa.length();k++) { if (alternativa.charAt(k)=='>') { posicaoPosP=k; break; } } if (posicaoPosP>0) { String alternativaP=alternativa.substring(0,posicaoPosP+1); novaAlternativa=alternativaP+"C) "+alternativa.substring(posicaoPosP+1); alternativa = novaAlternativa; } } String texto5=alternativa+fimP+strBR+salto; // texto5="<p>C)"+texto5+"</p>"; alternativa=rs.getString("alternativaD"); posicao=alternativa.indexOf("<p"); posicaoPosP=-1; alternativaParte1 = alternativa.substring(0,posicao+2); novaAlternativa=""; if (posicao>=0) { for(int k=posicao;k<alternativa.length();k++) { if (alternativa.charAt(k)=='>') { posicaoPosP=k; break; } } if (posicaoPosP>0) { String alternativaP=alternativa.substring(0,posicaoPosP+1); novaAlternativa=alternativaP+"D) "+alternativa.substring(posicaoPosP+1); alternativa = novaAlternativa; } } String texto6=alternativa+fimP+strBR+salto; String textor=""+salto; textor= texto1+ texto2+ texto3+ texto4+ texto5+ texto6; html+=textor; } } finally { // out.close(); } html+=" </div>"+salto;// fecha page html+=" </div>"+salto;// fecha page html+=" </td>"+salto; html+=" </tr>"+salto; html+=" </tbody>"+salto; html+="<tfoot>"+salto; html+=" <tr>"+salto; html+=" <td>"+salto; html+=" <!--place holder for the fixed-position footer-->"+salto; html+=" <div class=\"page-footer-space\"></div>"+salto; html+=" </td>"+salto; html+=" </tr>"+salto; html+="</tfoot>"+salto; html+="</table>"+salto; /* html+="<div class=\"footer\">"+salto; html+=" <div id=\"btnBox\"></div>"+salto; html+=" <input type=\"nome\" name=\"\" id=\"test\" placeholder=\"\">"+salto; html+=" <button id=\"anexar\">Anexar</button>"+salto; html+=" </div>"+salto; html+=" <div id=\"footer\"></div>"+salto; html+="</div>"+salto; */ contaPaginas++; html+="<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js'></script>"+salto; html+="<script>"+salto; //footer+=" $(document).ready(function(){"+salto; //footer+=" $('#anexar').click(function(){"+salto; html+=" $(\"#anexar\").hide();"+salto; html+=" var texto ='"+rodape+"';"+salto; // $('#test').val(); // String auxiliar = rodape +" - pág:"+contaPaginas; // html+=" var texto ='"+auxiliar+"';"+salto; // $('#test').val(); // $("#test").hide(); html+=" $('#footer').html(texto);"+salto; html+=" $('#footer').show();"+salto; // }); // }); html+="</script>"+salto; html+="</div>"+salto; html+="</body>"+salto; html+="</html>"+salto; out.println(html); /* * * <script> $(document).ready(function(){ $("#anexar").click(function(){ $("#anexar").hide(); var texto = $("#test").val(); $("#test").hide(); $("#footer").html(texto); $("#footer").show(); }); }); </script>  
    • By infonet
      Poderiam me ajudar com esta consulta SQL?   Acontece que ela roda normal, mas quando coloco na paginação ela não funciona:   mysqli_query ($conn, "SET @a := 0"); $_pagi_sql = "SELECT *, LPAD( @a := @a + 1, 5, '0' ) 'sequencial' FROM tb_his WHERE idclih = $idclientHis ORDER BY dt_his DESC, idhis DESC, sequencial DESC";   O erro acontece somente por causa do final: sequencial DESC, pois quando eu retiro, funciona normalmente.   Obrigado!
    • By ygorme
      Por favor, alguém me ajuda? Limitei para 12 imagens por página. Fiz o upload de 24 fotos.. mas só aparece a primeira página (numéro 1). Ou seja, era para ter aparecido as próximas páginas (2 e 3) No site, a paginação não é clicável.É algum erro bobo que estou deixando passar :(
       
      <?php session_start(); require_once '_header.php'; require_once '_database.php'; if (!empty($_GET['act']) && $_GET['act'] == 'logout') { unset($_SESSION["id"]); header('location:index.php'); exit(); } $arr_cat[] = array(); $records = $conn->prepare('SELECT * FROM categoria order by nome'); if ($records->execute()) { $arr_cat = $records->fetchAll(PDO::FETCH_ASSOC); } $_POST['paginaAtual'] = !empty($_POST['paginaAtual']) ? trim($_POST['paginaAtual']) : 1; $_POST['qtdeItensPagina'] = !empty($_POST['qtdeItensPagina']) ? $_POST['qtdeItensPagina'] : 12; // always initialize a variable before use! $conditions = array(); $parameters = array(); // conditional statements if (!empty($_POST['legenda'])) { // here we are using LIKE with wildcard search // use it ONLY if really need it $conditions[] = 'legenda LIKE ?'; $parameters[] = '%'.$_POST['legenda']."%"; }else $_POST['legenda'] = ''; if (!empty($_POST['id_categoria'])) { // here we are using equality $conditions[] = 'id_categoria = ?'; $parameters[] = $_POST['id_categoria']; }else $_POST['id_categoria'] = 0; // the main query $sql = "SELECT * FROM post"; // a smart code to add all conditions, if any if ($conditions) { $sql .= " WHERE ".implode(" AND ", $conditions); } $parameters[] = ($_POST['paginaAtual'] - 1) * $_POST['qtdeItensPagina']; $parameters[] = $_POST['qtdeItensPagina']; $sql_post = $sql . " ORDER BY id DESC LIMIT ?, ?"; // the usual prepare/execute/fetch routine $stmt = $conn->prepare($sql_post); $stmt->execute($parameters); $arr_post = $stmt->fetchAll(PDO::FETCH_ASSOC); $stmt_qtde = $conn->prepare($sql); $stmt_qtde->execute($parameters); $vet = $stmt_qtde->fetch( PDO::FETCH_ASSOC ); $qtdeTotal = (int)$vet['qtde']; ?> <main role="main"> <section class="shadow-md p-3 bg-white rounded"> <div class="container"> <form method="post"> <div class="form-row align-items-center"> <div class="col-sm-12 col-md-8 "> <input type="text" name="legenda" value="<?=$_POST['legenda']?>" class="form-control" placeholder="Busque por um assunto ou hashtag..."> </div> <div class="col-sm-12 col-md-3 "> <select class="custom-select" name="id_categoria"> <option value="0">Todas categorias...</option> <?php foreach ($arr_cat as $row) {?> <option <?=$row['id'] == $_POST['id_categoria'] ? 'selected' : ''?> value="<?=$row['id'];?>"><?=$row['nome'];?></option> <?php }?> </select> </div> <button type="submit" class=" col-sm-12 col-md-1 btn btn-primary"><i class="fas fa-search"></i></button> </div> <input type="hidden" name="paginaAtual" value="<?=$_POST['paginaAtual']?>" /> </form> </section> <div class="album py-5"> <div class="container"> <?php if (count($arr_post) > 0) { ?> <div class="row"> <?php foreach ($arr_post as $row) {?> <div class="col-sm-12 col-md-3"> <div class="card mb-4 shadow-sm"> <img class="card-img-top" src="<?=$file_path . $row['nome_file']?>"> <div class="card-body"> <div class="card-title"><h6><?=$row['nome']?></h6></div> <div class="d-flex justify-content-between align-items-center"> <div class="btn-group"> <?php if(!$limite_alcancado){?> <a data-toggle="tooltip" title="Ao pressionar download, será copiado a legenda para área de transferência" data-text="<?=$row['legenda']?>" target="_blank" href="_download.php?q=<?=base64_encode($row['id'].$separador.$row['nome'])?>" class="btn btn-sm btn-outline-primary btn_legend"><i class="fas fa-download"></i> Download</a> <a href="detalhe.php?q=<?=base64_encode($row['id'].$separador.$row['nome'])?>" class="btn btn-sm btn-outline-secondary"><i class="fas fa-info-circle"></i> Visualizar Legenda</a> <?php }else{?> <a target="_blank" href="https://www.odontop.com" class="btn btn-sm btn-success"><i class="fas fa-up"></i> Limite alcançado - realizar upgrade?</a> <?php }?> </div> <!-- <small class="text-muted">9 mins</small> --> </div> </div> </div> </div> <?php } //foreach?> </div> <div class="row shadow-md p-3 bg-white rounded"> <div class="col-sm-12 col-md-6"> <div id="paginacao"></div> </div> </div> <?php } else { //if echo '<div class="alert alert-warning">Nenhuma imagem encontrada</div>'; } ?> </div> </div> </main> <footer class="text-muted"> <div class="container"> <p class="float-right"> <a href="#navbarHeader"></a> </p> <p>Odontop - Copyright © 2019</p> </div> </footer> <script type="text/javascript"> const totalItens = <?=$qtdeTotal?>; const itensPorPagina = <?=$_POST['qtdeItensPagina']?>; </script> <script src="js/jquery-3.3.1.slim.min.js"></script> <script src="js/popper.min.js"></script> <script src="js/bootstrap.min.js"></script> <script src="js/pagination.min.js"></script> <script src="js/post.js"></script> </body> </html>  

    • By adrianno
      Fala pessoal beleza?
      Tenho um problema para resolver,  tenho um sistema em PHP com MySQL, mas preciso melhorar a paginação,  tenho uma 2 lógicas de paginação em mente, uma delas é a que mais se encontra e videos, blogs, postagens  mostrando na web,
       
      onde damos um primeiro select CAMPO from TABELA, contamos  o resultado e temos o total de registros para tratar a quantidade de páginas, limite, quantidade que vai aparecer por página etc,  apos isso damos novamente o select CAMPOS from TABELA limite x, y  de acordo com o que obtivemos na lógica da paginação com a primeira SQL. esta lógica até que funciona, mas, não consegui aplicar ela usando JOIN  agrupando 2 ou mais tabelas, pois ai, eu teria  que fazer esta contagem  lá a primeira SQL, ou seja no fim, teria 2 SQL sendo executadas , uma mais rápida devido ao limit passado, mesmo assim ainda seriam 2 consultas.
      Outras lógica seria dar um SELECT count(CAMPO) from TABELA  seria uma SQL mais rápida,  mas...  se eu tiver um JOIN agrupando dados de uma tabela de categoria + produtos, eu teria que contar o resultado já agrupado das 2.
      Já pensei em executar a consulta normal, retornar o array dos dados, e depois paginar este array  com array_slice, e dividir ele de acordo com a quantidade de páginas e registros de cada.
      Já fiz paginação com JS/AJAX  mas mesmo assim, ainda preciso passar os dados totalizados, consigo uma boa visualização final na interface, mas por tras, sei que o processamento no MYSQL pesa
       
      Lembrando que em cada caso citado, cada vez que alteramos entre as páginas, é novamente executado os calculos.
       
      Alguem tem uma lógica bacana para paginação? de forma que nao fique pesado, lento em uma tabela muito grande?
       
       
       
       
       
       
       
    • By rgrtorres
      Boa noite galera, fiz um sistema de página, porém quando uso .html para mostrar o resultado no jQuery, ele me retorna apenas um valor, e quando uso outros tipo append, ele me retorna todos os valores que desejo, como resolvo essa questão, não quero usar append.
       
      PHP:
      <?php include '../assets/app/config.php'; $conexao = new Conexao($config); $pagina = (isset($_POST['pagina'])) ? $_POST['pagina'] : 1; $sqlPaginacao = $conexao->conectar()->query("SELECT * FROM noticias"); $total = $sqlPaginacao->num_rows; $qtd = 2; $paginas = ceil($total / $qtd); $inicio = ($qtd * $pagina) - $qtd; $tudo[] = array("paginas" => $paginas); $sql = $conexao->conectar()->query("SELECT * FROM noticias LIMIT $inicio, $qtd"); while($mostra = $sql->fetch_assoc()) {     $tudo[] = array("titulo" => $mostra['titulo']); } echo json_encode($tudo); ?>  
       
       
      jQuery:
      var paginacao = {     atual: 1,     next: function(tipo){         paginacao.atual++         $.ajax({             type: "POST",             url: "paginacao.php?pagina=" + paginacao.atual,             data: {'pagina' : paginacao.atual},             dataType: 'json',             success: function (result) {                 var botao = $(".arrow.next")                 for (var i = 0; i < result.length; i++) {                     var html =     "<article class='news'>";                         html +=        result[i]['titulo'];                         html +=    "</div>";                     $('.all').html(html);                 }                 if(tipo == 'next') {                     $(".arrow.back").removeClass('disabled');                 }                 if(paginacao.atual >= result[0]['paginas']) {                     botao.removeAttr('onclick');                     $(".arrow.next").addClass('disabled');                     $(".arrow.back").removeClass('disabled');                 }else if (paginacao.atual > 1){                     $(".arrow.back").removeClass('disabled');                 }             }         });     },     prev: function(tipo){         paginacao.atual--         $.ajax({             type: "POST",             url: "paginacao.php?pagina=" + paginacao.atual,             data: {'pagina' : paginacao.atual},             dataType: 'json',             success: function (result) {                 var botao = $(".arrow.next")                 botao.attr('onclick', 'paginacao.next()');                 for (var i = 0; i < result.length; i++) {                     var html =     "<article class='news'>";                         html +=        result[i]['titulo'];                         html +=    "</div>";                     $('.all').html(html);                 }                 if(tipo == 'next') {                     $(".arrow.back").removeClass('disabled');                 }                 if (paginacao.atual <= 1) {                     $(".arrow.back").addClass('disabled');                     $(".arrow.next").removeClass('disabled');                 } else {                     $(".arrow.back").removeClass('disabled');                 }             }         });     } }  
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.