Ir para conteúdo

Arquivado

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

DougCoder

Paginação não apresenta os dados corretamente

Recommended Posts

Bom dia a todos,

 

Estou ficando louco com um problema na minha paginação. Na verdade não é na paginação em sí, mas nas condicionais da minha página, o que implica de dar "bug" na paginação.

 

O problema é o seguinte:

Se eu clico em buscar, ele mostra todos os registros... OK! Se eu seleciono 3 autores por exemplo: Doug, Doug2, Doug3. A soma de arquivos destes 3 autores é 12 arquivos, ele irá me mostrar 3 páginas (porque eu limitei a 5 por página), até ai tudo OK. Se eu clicar na página 2, ou 3 ou próxima, ele volta a mostrar 6 páginas no total. Ele faz isso porque quando clico em outra página após realizar um filtro de busca, é como se ele fizesse refresh da página e dai eu não armazeno em lugar algum aquilo que eu estava buscando. Os meus selects ficam não selecionados após minha ação de busca.

 

Como posso resolver esse problemão? É o último "bug" do sistema, eu juro, rsrs.

 

Estive pensando: Posso armazenar as informações no meu combobox após refresh? Coloco minha table dentro de uma div e só ela atualiza sem dar refresh na página? Tem alguma solução de preferência sem usar ajax? Se puderem me ajudar com exemplos ficarei grato!

 

Uma boa parte do código aqui:

<button name="BUSCAR" id="BBUSCAR" class="btn btn-info" > REALIZAR PESQUISA </button><br>
                    
       <?php $pagina = (isset($_GET["pagina"])) ? $_GET["pagina"] : $pagina = 0; ?>
                    
        <?php if ( isset($_REQUEST['BUSCAR']) || ($pagina > 0))  {                  
            
           $id_disciplina = Array();
           $id_tema = Array();
           $id_palchave = Array();
           $id_autor = Array();           
           
       if (empty($_POST['txtnomearquivo'])){
           $txtnomearquivo = '';
       } else {
           $txtnomearquivo = $_POST['txtnomearquivo'];
       }
                   
       if (empty($_POST['id-edit'])){
           $id_editora = 0;
       } else {
           $id_editora = $_POST['id-edit'];
       }
       
       if (empty($_POST['id-tarq'])){
           $id_ta = 0;
       } else {
           $id_ta = $_POST['id-tarq'];
       }             
       
       if (empty($_POST['id-disciplina'])){          
           $id_disciplina = 0;
       } else {
           $id_disciplina = $_POST['id-disciplina'];  
       }
       
       if (empty($_POST['id-tema'])){
           $id_tema = 0;
       } else {
           $id_tema = $_POST['id-tema'];
       }              
       
       if (empty($_POST['id-autor'])){
           $id_autor = 0;
       } else {
           $id_autor = $_POST['id-autor'];
       }
       
       if (empty($_POST['id-pal-chave'])){
           $id_palchave = 0;
       } else {
           $id_palchave = $_POST['id-pal-chave'];
       }       
       
        // Registros por página
        $num_por_pagina = 5;
       
        /* 
        Isto é pra verificar se existe alguma variável de url
        se existir a variável "$pagina" recebe o valor da variável de url $_GET["pagina"]
        se não recebe 1
        */       
        if($pagina<1) $pagina = 1;
        
        $primeiro_registro = ($pagina*$num_por_pagina) - $num_por_pagina;
               
        $tema = join(',',(array)$id_tema);
        $autor = join(',',(array)$id_autor);
        $chave = join(',',(array)$id_palchave);
        $disciplina = join(',',(array)$id_disciplina);  
        
        $codigo = "SELECT DISTINCT ARQ_ID,ARQ_NOME,conc_busca_autores(ARQ_ID) as AUT_NOME, 
                conc_busca_temas(ARQ_ID) as TEM_NOME,EDI_NOME, conc_busca_disciplina(ARQ_ID) as DIS_NOME,conc_busca_palchave(ARQ_ID) as PAL_CHA_NOME,
                TIP_ARQ_NOME,ARQ_CAM_ARQ FROM `arquivos` a
                            
                            LEFT JOIN arquivos_has_disciplinas b ON a.ARQ_ID = b.Arquivos_ARQ_ID
                            LEFT JOIN disciplinas dis ON b.Disciplinas_DIS_ID = dis.DIS_ID
                           
                            LEFT JOIN arquivos_has_temas c ON a.ARQ_ID = c.Arquivos_ARQ_ID
                            LEFT JOIN temas tem ON c.Temas_TEM_ID = tem.TEM_ID
                            
                            LEFT JOIN autores_has_arquivos d ON a.ARQ_ID = d.Arquivos_ARQ_ID
                            LEFT JOIN autores aut ON d.Autores_AUT_ID = aut.AUT_ID
                            
                            LEFT JOIN palavraschave_has_arquivos e ON a.ARQ_ID = e.Arquivos_ARQ_ID
                            LEFT JOIN palavraschave pal ON e.PalavrasChave_PAL_CHA_ID = pal.PAL_CHA_ID
                            
                            LEFT JOIN editoras edi ON edi.EDI_ID = a.Editoras_idEditoras
                            LEFT JOIN tipoarquivo tip ON tip.TIP_ARQ_ID = a.TipoArquivo_idTipoArquivo";
        $codigo = $codigo." ";
        
        if($txtnomearquivo != '' or $id_editora != 0 or $id_ta != 0 or $id_disciplina != 0 or $id_tema != 0 or $id_autor != 0 or $id_palchave != 0){
            $codigo = $codigo."where ( a.ARQ_NOME LIKE '%$txtnomearquivo%' or '$txtnomearquivo' LIKE '' )
                            and ( a.editoras_ideditoras = $id_editora or $id_editora = '' )
                            and ( a.TipoArquivo_idTipoArquivo = $id_ta or $id_ta = '' )
                            and ( b.Disciplinas_DIS_ID in ($disciplina) or '$disciplina' = 0 )
                            and ( c.Temas_TEM_ID in($tema) or '$tema' = 0 )
                            and ( d.Autores_AUT_ID in ($autor) or '$autor' = 0 )
                            and ( e.PalavrasChave_PAL_CHA_ID in ($chave) or '$chave' = 0 )";
        }
        $codigo2 = $codigo;
        $codigo = $codigo." LIMIT $primeiro_registro, $num_por_pagina";
        
        $sqlbusca = $conn->query($codigo);
        
        //construa e exiba um painel de navegabilidade entre as páginas
        $consulta = "select count(1) as qtd from (".$codigo2." ) porra";
        
        list($total_usuarios) = mysqli_fetch_array(mysqli_query($conn2,$consulta));

        $total_paginas = $total_usuarios/$num_por_pagina;

        $prev = $pagina - 1;
        $next = $pagina + 1;
                
        // se página maior que 1 (um), então temos link para a página anterior
        if ($pagina > 1) {            
            $prev_link = "<a href=\"" . $_SERVER['PHP_SELF']. "?pagina=$prev\">Anterior</a>";
        } else { // senão não há link para a página anterior
            $prev_link = "Anterior";
        }

        // se número total de páginas for maior que a página corrente, então temos link para a próxima página
        if ($total_paginas > $pagina) {           
            $next_link = "<a href=\"" . $_SERVER['PHP_SELF'] . "?pagina=" . $next . " \">Próxima";        
        } else { // senão não há link para a próxima página
            $next_link = "Próxima";
        }        

        $total_paginas = ceil($total_paginas);
        $painel = "";

        for ($x=1; $x<=$total_paginas; $x++) {
          if ($x==$pagina) { // se estivermos na página corrente, não exibir o link para visualização desta página
            $painel .= " [$x] ";
          } else {
            $painel .= " <a href=\"". $_SERVER['PHP_SELF']."?pagina=$x\">[$x]</a>";  
          }
        }

        echo "$prev_link | $painel | $next_link"; 
             

        while ($linha = $sqlbusca->fetch(PDO::FETCH_ASSOC)) { ?>  
             //aqui fica o html/php da minha tabela

Bem mais acima deste código eu possuo um único form:

<form name="form_busca" id="form-busca" method="POST" action="?pagina=1" >

Exemplo de um dos meus selects (combobox):

<!-- Autor -->
                <th>
                    <div id="hr"> Autores </div>
                    <select name="id-autor[]" id="selautor" class="selectpicker show-tick form-control" data-live-search="true" multiple data-max-options="5">
                        
                    <?php                  
                    $sql = $conn->query("select * from autores");
   
                        while ($linha = $sql->fetch(PDO::FETCH_ASSOC)) { ?>    
                        <?php if ($linha["AUT_ACESSO"] == "B") { ?>
                            <option disabled value="<?php echo $linha["AUT_ID"];?>"><?php echo $linha["AUT_NOME"]; ?></option>
                        <?php } else { ?>
                            <option value="<?php echo $linha["AUT_ID"];?>"><?php echo $linha["AUT_NOME"]; ?></option>
                        <?php } } ?>
                                                    
                    </select>
                </th>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta você passar os parâmetros no próprio link da paginação...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Basta você passar os parâmetros no próprio link da paginação...

 

Como ficaria ESerra?

 

O link da paginação você fala URL ou esse aqui:

$painel .= " <a href=\"". $_SERVER['PHP_SELF']."?pagina=$x\">[$x]</a>";

Pois são vários parâmetros (autor, disciplina, tema, etc.), sempre que preciso manipular todos eles eu passo apenas o ID, geralmente do arquivo e a partir deste ID eu faço uma $sqlbusca para identificar o arquivo e manipular seus dados, foi assim com outras páginas, igual a de editar arquivo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O imasters está extremamente lento para mim... Demora mais de 2 minutos para carregar qualquer página do fórum, não sei se está havendo algum problema, não estou conseguindo editar o post acima...

 

Exemplo:

$painel .= " <a href=\"". $_SERVER['PHP_SELF']."?pagina=$x&aut=$autor\">[$x]</a>"; 

Desta forma eu passo os ID's do autor para a URL, acredito que não seria os id's mas sim os nomes que deveria passar, então faço variáveis para armazenar os nomes dos autores, temas, etc. e armazeno isso na url? Em seguida... Como posso fazer a leitura deste parâmetro ao clicar na página [2], [3] ou próxima, anterior?

 

Se entendi bem é mais ou menos isso?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Negrito
      Olá Pessoal, 
       
      Converti o banco de dados de uma app em ASP Classico de MSSQL para MySQL para redução de custos e percebi que alguns componentes ou recursos não estão mais funcionando devido a não compatibilidade com o MySQL , como por exemplo a função : RecordCount
       
      Já consegui converter e atualizar 95% de aplicação para rodar com o MySQL, mas tem 1 item que esta tirando meu sono e após dias pesquisando, resolvi pedir ajuda.
       
      Segue o meu codigo abaixo , onde estou com problema no resultado dessa operação:
       
      <%
      ...
      Set RS = Server.CreateObject("ADODB.Recordset")
      RS.CursorLocation = 3
      RS.CursorType = 3
      RS.ActiveConnection = Cn
      RS.Open strSQL, Cn, 3, 3
      RS.PageSize = 25
      RS.CacheSize = RS.PageSize
      intPageCount = RS.PageCount
      intRecordCount = RS.RecordCount
          If NOT (RS.BOF AND RS.EOF) Then
      If CInt(intPage) > CInt(intPageCount) Then intPage = intPageCount
          If CInt(intPage) <= 0 Then intPage = 1
              If intRecordCount > 0 Then
                  RS.AbsolutePage = intPage
                  intStart = RS.AbsolutePosition
                  If CInt(intPage) = CInt(intPageCount) Then
                      intFinish = intRecordCount
                  Else
                      intFinish = intStart + (RS.PageSize - 1)
                  End if
              End If
          If intRecordCount > 0 Then
              For intRecord = 1 to RS.PageSize
          QntExibicoes = QntExibicoes + Rs.fields("views")
      ...
      %>
       
       
      Já percebi que a função RecordCount não pode ser usada com o MySQL ou pelo menos não é compativel.
       
      A paginação esta funcionando ! 
      Porem , não consigo fazer ele calcular a quantidade de linhas (rows) do MySQL com a função RecordCount e acredito que possa ter alguma outra função que não esta compativel , mas como não conheço MySQL , não posso afirmar.
       
      Enfim, algum pode me dar uma luz ?
       
      Desde já agradeço pela atenção.
       
      Obrigado.
    • Por RodrigoWD3
      Pessoal boa tarde, estou criando uma galeria com categorias no php e mysql, gostaria de saber como faço para colocar um botão -  Exibir Mais Fotos - fazendo exibir o restante dos registros na mesma pagina, teria alguma forma de limitar as fotos sem usar o LIMIT do sql? pode ser usando jQuery algo assim , obrigado
    • Por Inside
      Olá amigos,
       
      Eu estou precisando de uma paginação ASP que exiba tipo de 1 até 3 páginas e depois Próxima Página ou de 1 até 6 depois Próxima Página. De 3 em 3 ou ou de 6 em 6.
       
      Alguém já viu algum exemplo desse tipo?
       
      Paginação, 1 2 3 próxima
       
      Eu procurei na web não achei nada do tipo em ASP. Aqui no fórum também não achei.
       
      Obrigado pela atenção.
    • Por mkboy
      Olá,
       
      Uso MySQL no dia a Dia, mas tenho essa consulta em uma aplicação em uma base SQL Server onde conecto via PHP.
       
      Tenho 5000 registros na tabela, preciso trazer de 500 em 500.
      Assim, atualizo todos que preciso.

      No MySQL eu faria ASSIM
       
      SELECT campos FROM tabela CONDICAO Limit 0,500 SELECT campos FROM tabela CONDICAO Limit 500,500 SELECT campos FROM tabela CONDICAO Limit 1000,500  
      Então, eu passaria por todos os registros até chegar no 5000.
       
      Estou fazendo o select abaixo no SQL, mas fica um intervalo de produtos que não vem a cada select.
       
      Veja como fiz: (Um amigo ajudou na época que foi feito, não entendo bem)
       
      $sql = "SELECT TOP 500 data.CodigoInterno, data.CodigoFabricante, data.Fabricante, data.PrecoVenda, data.SaldoEstoque, data.Titulo, data.Aplicacao FROM ( SELECT ROW_NUMBER() OVER(ORDER BY CodigoInterno ASC) AS Row, CodigoInterno, CodigoFabricante, Fabricante, PrecoVenda, SaldoEstoque, Titulo, Aplicacao FROM PRODUTOS ) AS data WHERE data.Row >= ".addslashes($_GET['qtdRegistro'])." ORDER BY data.CodigoInterno ASC";  
      Então na Query envio o 0...500....
       
      Podem me ajudar por favor?
       
       
       
    • Por Alberto Nascimento
      Como faço para que esta consulta exiba 5 registros por página?
       
      <?php if(isset($_SESSION['msg'])){ echo $_SESSION['msg']; unset($_SESSION['msg']); } $result_msg_cont = "SELECT * FROM internautas ORDER BY id ASC"; $resultado_msg_cont = $conn->prepare($result_msg_cont); $resultado_msg_cont->execute(); while ($row_msg_cont = $resultado_msg_cont->fetch(PDO::FETCH_ASSOC)) {  
×

Informação importante

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