Ir para conteúdo
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

Compartilhar este post


Link para o post
Compartilhar em outros 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 ;) 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por kerven
      eae pessoal
      queria um javascript para associar a um botão.
      seria para usar em botoes de próximo e anterior, esse script tem que levar a uma pagina html q está na pasta do html atual
      as paginas são numeradas, por exemplo: 0.html, 1.html, 2.html, 3html...
       
      eu queria uma variável, que quando estivesse, por exemplo na numero 2.html, o botao "anterior" vá para a 1.html e o botao " próximo" vá para 3.html, 
       
      algo do tipo 
       
       Anterior= valor da pagina atual.html - valor da pagina atual -1.html e redirecionar para ela
      proximo= valor da pagina atual.html + valor da pagina atual + 1.html e redirecionar para ela
       
    • Por Maykel dos Santos Figueire
      Alguém por favor pode me ajudar, a paginação não funciona!
      <?php include 'configs/conecta.php'; $logado = $_SESSION['usuario']; $consultaSection = "SELECT * FROM motoristas WHERE id_logado = '$logado'"; $execSection = mysqli_query($conexao,$consultaSection) or die(error); ?> <div class="section">     <table>         <tr>             <td class="m">Matricula</td>             <td class="n">Nome</td>             <td class="c">CPF</td>             <td class="g">Ganhos</td>         </tr>         <?php             $pagina = (isset($_GET['pagina']))? $_GET['pagina'] : 1;              $banco = mysqli_query($conexao, "SELECT `id`, `nome`, `cpf`, `ganhos` FROM motoristas");             $total = mysqli_num_rows($banco);              $registros = 4;             $numPaginas = ceil($total/$registros);             $inicio = ($registros*$pagina)-$registros;              $banco = mysqli_query($conexao, "SELECT `id`, `nome`, `cpf`, `ganhos` FROM motoristas LIMIT $inicio,$registros");              $total = mysqli_num_rows($banco);             ?>          <?php while($exibe_pecas = mysqli_fetch_array($banco)) {?>             <?php while($logado = mysqli_fetch_array($execSection)) { ?>                          <tr>                 <td class="m"><?php echo $logado["id"];?></td>                 <td class="n"><?php echo $logado["nome"];?></td>                 <td class="c"><?php echo $logado['cpf'];?></td>                 <td class="g"><?php echo round($logado['ganhos'], 2);?></td>             </tr>             <?php } ?>         <?php } ?>         <?php             if($pagina > 1) {                 echo "<a href='painel.php?pagina=".($pagina - 1)."' class='controle'>&laquo; anterior</a>";             }             for($i = 1; $i < $numPaginas; $i++) {                 $ativo = ($i == $pagina) ? 'numativo' : '';                 echo "<a href='painel.php?pagina=".$i."' class='numero ".$ativo."'> ".$i." </a>";             }             if($pagina < $numPaginas) {                 echo "<a href='painel.php?pagina=".($pagina + 1)."' class='controle'>proximo &raquo;</a>";                     }         ?>     </table> </div> Grato!
    • Por son goku
      Boa tarde pessoal.
      Estou com o seguinte problema:
      ao clicar no numero da paginação,ela não exibe os dados,vou postar o código abaixo para voçês,verem.
      Quem poder me ajudar:
      <?php session_start(); if (!isset($_SESSION["id"]) || !isset($_SESSION["nome"])){     echo "Você não fez o login no sistema."; } ?> <html> <head> <title>Tipo de consulta</title> </head> <body> <table border="1"> <tr> <td>Descrição:</td>  <td>Forma de pagamento:</td> <td>Valor da parcela: </td> <td>Quantidade de parcelas:</td> <td>Numero da parcela:</td> <td>Pago:</td> <td>Cartão:</td> <td>Numero do cart&atildeo:</td> <td>Data de vencimento:</td> </tr> <?php include "conecta_banco.php"; $idusu = $_SESSION["id"]; $consulta =  isset( $_POST["tipo_consulta"] ) ? $_POST["tipo_consulta"] : null; switch ($consulta){          case "exibe_tudo":               $pagina = (isset($_GET['pagina']))? $_GET['pagina'] : 1;                  //seleciona todos os itens da tabela         $sent_sql = "SELECT * FROM gastos";         $result = mysql_query($sent_sql);                  //conta o total de itens         $total = mysql_num_rows($result);                  //seta a quantidade de itens por página, neste caso, 2 itens         $registros = 20;                  //calcula o número de páginas arredondando o resultado para cima         $numPaginas = ceil($total/$registros);                  //variavel para calcular o início da visualização com base na página atual         $inicio = ($registros*$pagina)-$registros;                  //seleciona os itens por página         $sent_sql = "SELECT * FROM gastos LIMIT $inicio,$registros";         $result = mysql_query($sent_sql);         $total = mysql_num_rows($result);                                     while($tbl = mysql_fetch_array($result))         {                         $descricao = $tbl["descricao_gasto"];             $formapagamento = $tbl["moeda"];             $valor = $tbl["valor_gasto"];             $quantidade = $tbl["quant_parcela"];             $numerodaparcela = $tbl["num_parcela"];             $tapago = $tbl["pago"];             $cartao = $tbl["cartao"];             $numcartao= $tbl["num_cartao"];             $datavencimento = $tbl["data_venc"];                                                                                                /* Aqui converto a data que vem do mysql no formato y/m/d              * para d/m/y */                          $datavencimentoconv = date("d/m/Y",strtotime($datavencimento));                                         echo "<tr>";             echo "<td>$descricao </td>";             echo "<td>$formapagamento </td>";             echo "<td>R$ $valor </td>";             echo "<td>$quantidade </td>";             echo "<td>$numerodaparcela</td>";             echo "<td>$tapago</td>";             echo "<td>$cartao </td>";             echo "<td>$numcartao </td>";             echo "<td>$datavencimentoconv </td>";             echo "</tr>";                      }                                    $sent_sql2 = "SELECT sum(valor_gasto) FROM gastos WHERE usu_id='$idusu'";         $result2 = mysql_query($sent_sql2);                  while($sum = mysql_fetch_array($result2)){             $soma = $sum['sum(valor_gasto)'];                          echo "<tr>";             echo "<td>Total: </td>";             echo "<td>R$ $soma</td>";             echo "</tr>";                        }                  //exibe a paginação         for($i = 1; $i < $numPaginas + 1; $i++) {             echo "<a href='tipoconsulta.php?pagina=$i'>".$i."</a> ";         }                 break; }   ?> </table> </body> </html> Acredito que seja algo,simpless porém já estou a um bom tempo quebrando a cabeça com isso.
    • Por Gustavo2503
      Olá!
      Eu preciso fazer uma tabela que contém muitos registros, para organizá-lo melhor eu necessitarei de uma paginação que não faça refresh na página, que não precise de um envio do método GET, que o usuário tivesse a opção de escolher quantos registros por página ele verá, e que só aparecesse no máximo 5 botões, por exemplo:
      < 1 2 3 4 5 >
      Ai o usuário foi pra página 8.
      < 6 7 8 9 10 >
      E detalhe, sem usar o DataTables. Agradeço.
    • Por Cesar Masserati Procopio
      Pessoal, boa Tarde!
      Pode me Ajudar com um probleminha que estou tendo hehehe...
      Fiz essa paginação via AJAX completa está tudo funcionando blz, porém quando tiver muitos registros está desconfigurando. 
      Gostaria de fazer, conforme pode ver nas imagens abaixo, a Imagem Original ficar igual a Imagem Modificada!
      Alguma Dica ou sugestão?


      function filtroProc(){ $('.pagination').html(''); var filtro = $('input[name=filtro]:checked').val(); filtros.setFiltro(filtro); var offset = getPaginacao.getOffsetAtual(); var maximo = getPaginacao.getMaximo(); var links = getPaginacao.getLink(); $.ajax({ url:'nav/conf/con_lis_pro_ajax.php', type:'POST', dataType:'json', data:{offset:offset, maximo:maximo, filtro:filtro}, success:function(json){ filtros.setTotalFiltro(json.totalFil); getPaginacao.setTotal(json.totalItem); var totalFiltros = filtros.getTotalFiltro(); var totalItens = getPaginacao.getTotal(); $('.tabela tbody').empty(); $(".contagem").html(totalFiltros); $(".total").html(totalItens); var verif = 0; if(verif === json){ var html = '<tr>'; html += '<td colspan=5><div class="msg_no">Não existe cadastro de Processos de Emissão!</div></td>'; html += '</tr>'; $('.tabela tbody').append(html); }else{ for(var i in json.lista){ var html = '<tr>'; html += '<td align="center">'+json.lista[i].id+'</td>'; if(json.lista[i].status === 'a'){ html += '<td align="center"><img src="../image/semaforo/verde.png" data-id="'+json.lista[i].id+'" data-name="i" onclick="atualizaStatus(this)"/></td>'; }else{ html += '<td align="center"><img src="../image/semaforo/vermelho.png" data-id="'+json.lista[i].id+'" data-name="a" onclick="atualizaStatus(this)" /></td>'; } html += '<td align="center">'+json.lista[i].identificador+'</td>'; html += '<td>'+json.lista[i].descricao+'</td>'; html += '<td><a class="lista_bt2" href="#" data-id="'+json.lista[i].id+'" onclick="editarPro(this)"></a></td>'; html += '</tr>'; $('.tabela tbody').append(html); } } // ---- PAGINAÇÃO ------ // var maximo = getPaginacao.getMaximo(); var totalPaginas = Math.ceil((totalFiltros / maximo)); htmlPag = '<a href=\"#" data-id="1" onclick="dispara(this);">Primeira Página</a>&nbsp;&nbsp;&nbsp;'; for (var i = 1; i <= totalPaginas; i++){ htmlPag += '<a href="#" data-id="'+i+'" onclick="dispara(this)" class="">'+i+'</a>&nbsp;&nbsp;&nbsp;'; } htmlPag += '<a href=\"#" data-id="'+totalPaginas+'" onclick="dispara(this);">Ultima Página</a>&nbsp;&nbsp;&nbsp;'; $('.pagination').append(htmlPag); $('.pagination').find('.active_pag').removeClass('active_pag'); $('.pagination').find('a[data-id='+getPaginacao.getPagAtual()+']').addClass('active_pag'); } }); }  
×

Informação importante

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