Ir para conteúdo

Arquivado

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

Tiago Bruno

Problemas com paginação no php

Recommended Posts

Pessoal é o seguinte estou com um script de paginação em php utilizando PDO que pega os itens do banco no intervalo de duas datas

a consulta e a paginação esta sendo feita corretamente o problema é quando clico no link da paginação que deveria ir para

exemplo para a pagina 2 ele na verdade faz um refresh da página segue o codigo.

// arquivo teste2.php que é o arquivo da paginação  

<?php
/* Constantes de configuração */  
 define('QTDE_REGISTROS', 2);   
 define('RANGE_PAGINAS', 1);   






   
 /* Recebe o número da página via parâmetro na URL */  
 $pagina_atual = (isset($_GET['page'])) ? $_GET['page'] : 1;   
   
 /* Calcula a linha inicial da consulta */  
 $linha_inicial = ($pagina_atual-1) * QTDE_REGISTROS;  
   
 /* Cria uma conexão PDO com MySQL */  
 $opcoes = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8');  
 $pdo = new PDO("mysql:host=localhost; dbname=materiais;", "root", "", $opcoes);  
   
 /* Instrução de consulta para paginação com MySQL */  
 $sql = "select p.nome_prod, p.descricao, pd.quantidade, DATE_FORMAT(pd.data_entrada,'%d/%m/%Y') from produtos p inner join prod_entrada pd on p.id_prod = pd.id_prod where pd.data_entrada between '$data1' and DATE_ADD('$data2', INTERVAL 1 DAY) LIMIT {$linha_inicial}, " . QTDE_REGISTROS;  
 $stm = $pdo->prepare($sql);   
 $stm->execute();   
 $dados = $stm->fetchAll(PDO::FETCH_OBJ);   
   
 /* Conta quantos registos existem na tabela */  
 $sqlContador = "SELECT COUNT(*) AS total_pedido FROM produtos p inner join prod_entrada pd on p.id_prod = pd.id_prod where pd.data_entrada between '$data1' and DATE_ADD('$data2', INTERVAL 1 DAY)";   
 $stm = $pdo->prepare($sqlContador);   
 $stm->execute();   
 $valor = $stm->fetch(PDO::FETCH_OBJ);   
   
 /* Idêntifica a primeira página */  
 $primeira_pagina = 1;  


 /* Cálcula qual será a última página */  
 $ultima_pagina  = ceil($valor->total_pedido/QTDE_REGISTROS);   
   
 /* Cálcula qual será a página anterior em relação a página atual em exibição */   
 $pagina_anterior = ($pagina_atual > 1) ? $pagina_atual -1 : 0 ;   
   
 /* Cálcula qual será a pŕoxima página em relação a página atual em exibição */   
 $proxima_pagina = ($pagina_atual < $ultima_pagina) ? $pagina_atual +1 : 0 ;  
   
 /* Cálcula qual será a página inicial do nosso range */    
 $range_inicial  = (($pagina_atual - RANGE_PAGINAS) >= 1) ? $pagina_atual - RANGE_PAGINAS : 1 ;   
   
 /* Cálcula qual será a página final do nosso range */    
 $range_final   = (($pagina_atual + RANGE_PAGINAS) <= $ultima_pagina ) ? $pagina_atual + RANGE_PAGINAS : $ultima_pagina ;   
   
 /* Verifica se vai exibir o botão "Primeiro" e "Pŕoximo" */   
 $exibir_botao_inicio = ($range_inicial < $pagina_atual) ? 'mostrar' : 'esconder'; 
   
 /* Verifica se vai exibir o botão "Anterior" e "Último" */   
 $exibir_botao_final = ($range_final > $pagina_atual) ? 'mostrar' : 'esconder';  
?>
// arquivo teste.php

  <form class="form-search" action="" method="post">
            <p> <strong><h3> Escolha o Período de entrada de Produtos </h3></strong></p>
     <table> 
         <tr> 
             <td><strong>Data Inicial </strong> </td>
           <td>      </td> 
         <td><strong>Data Final </strong>   </blockquote></td>
         </tr>
         <tr>
             <td>  <input type="text" name="data1" id="cdata1" >  </td> 
             <td>       </td> 
         <td><input type="text" name="data2" id="cdata2"/> </td>  
         <td>    <button type="submit" class="btn btn-primary" name="btbusca">Busca</button>  </td>
         </tr>
        </table>
            <br>
         <?php
       
        if (isset($_POST['btbusca'])) {
          
            $data1 = null;
             $data1 = $_POST['data1']; 
             $data2 = $_POST['data2'];
      
      $data1 =  date('Y-d-m', strtotime($data1));
      $data2 =  date('Y-d-m', strtotime($data2));  
      
      include_once 'teste2.php';
      $data = "DATE_FORMAT(pd.data_entrada,'%d/%m/%Y')";
      
      ?>
       <?php if (!empty($dados)): ?>  
     <table class="table table-striped table-bordered">    
     <thead>    
       <tr class='active'>    
        <th>Produto</th>    
        <th>Descrição</th>    
        <th>Quantidade</th>    
        <th>Data</th>    
       </tr>    
     </thead>    
     <tbody>    
       <?php foreach($dados as $artigo):?>   
         
       <tr>    
        <td><?=$artigo->nome_prod?></td>    
        <td><?=$artigo->descricao?></td>    
        <td><?=$artigo->quantidade?></td>    
        <td><?=$data?></td>    
       </tr>    
       <?php endforeach; ?>   
     </tbody>    
     </table>    
     
     <div class='box-paginacao'>     
       <a class='box-navegacao <?=$exibir_botao_inicio?>' href="teste.php?page=<?=$primeira_pagina?>" title="Primeira Página">Primeira</a>    
       <a class='box-navegacao <?=$exibir_botao_inicio?>' href="teste.php?page=<?=$pagina_anterior?>" title="Página Anterior">Anterior</a>     
   
      <?php  
      /* Loop para montar a páginação central com os números */   
      for ($i=$range_inicial; $i <= $range_final; $i++):   
        $destaque = ($i == $pagina_atual) ? 'destaque' : '' ;  
   
          
          echo "<a href='teste.php?page=$i'>".$i."</a> "; ?>  
      <?php endfor; ?>    
   
       <a class='box-navegacao <?=$exibir_botao_final?>' href="teste.php?page=<?=$proxima_pagina?>" title="Próxima Página">Próxima</a>    
       <a class='box-navegacao <?=$exibir_botao_final?>' href="teste.php?page=<?=$ultima_pagina?>" title="Última Página">Último</a>    
     </div>   
    <?php else: ?>   
     <p class="bg-danger">Nenhum registro foi encontrado!</p>  
    <?php endif; ?>   


    
        
    <?php    }?>


Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Ou você pode fazer uma função genérica de paginação que funcione não com os registros, mais sim com números;

Quer um exemplo pronto?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

Manda ai cara por favor

OLHA AÊ...

/**
 * @parametro numérico $total_de_registros - total de registro vindo da tabela
 * @parametro numérico $registros_por_pagina - auto explicativa
 * @parametro numérico $offset (parâmetro que se possível sempre deixar em 5)
 * @parametro string   $pagina_base - url slug ou página com extensão (ex.: url-teste - ficará: site.com/url-teste?qp=123) 
 * @parametro string   $parametro_personalizado - parâmetro que irá informar a página (ex.: lol - ficará: site.com/url-teste?lol=123) 
 */
function paginacao($total_de_registros = 0, $registros_por_pagina = 10, $offset = 5, $link_do_site = "http://www.site.com.br" ,$pagina_base = './', $parametro_personalizado = 'page') {
    global $linguagem;

    $paginas = null;

    if ($total_de_registros >= $registros_por_pagina) {
        $numero_de_paginas = (int) floor($total_de_registros / $registros_por_pagina);

        $pagina_atual = 1;
        if (isset($_GET[$parametro_personalizado])) {
            $pagina_atual = (int) $_GET[$parametro_personalizado];
        }
        $paginas = "<paginacao><a href=\"" . $link_do_site . "$pagina_base\">" . $linguagem['paginacao']['primeira'] . "</a> | ";

        for ($i = ( $pagina_atual - 1 ); $i < ( $pagina_atual - 1 ) + $offset; $i++) {

            if ($i <= $numero_de_paginas && $i > 0) {
                $pagina = $i;
                $paginas .= "<a href=\"" . $link_do_site . "$pagina_base&$parametro_personalizado=$pagina\">$pagina</a> | ";
            }
        }
        $paginas .= "<a href=\"" . $link_do_site . "$pagina_base&$parametro_personalizado=$numero_de_paginas\">" . $linguagem['paginacao']['ultima'] . "</a></paginacao>";
    }
    $paginas .= '<div class="clear"></div>';

    return $paginas;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante

á "$linguagem['paginacao']['ultima']" é que eu uso linguagens diferentes no meu site, então remove e coloca "ultima página"

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
    • Por landerbadi
      Olá pessoal, boa tarde
       
      Tenho uma tabela chamada "produtos" com os seguintes campos (id, produto) e outra tabela chamada "itens" com os seguintes campos (id, prod_01, prod_02, prod_03, prod_04).
       
      Na tabela produtos eu tenho cadastrado os seguintes produtos: laranja, maçã, uva, goiaba, arroz, feijão, macarrão, etc.
       
      Na tabela itens eu tenho cadastrado os itens da seguinte maneira:
       
      1, laranja, uva, arroz, feijão;
      2, maçã, macarrão, goiaba, uva;
      3, arroz, feijão, maçã, azeite
       
      Meu problema é o seguinte: 
      Eu escolho um produto da tabela "produtos", por exemplo "uva".  Preciso fazer uma consulta na tabela "itens" para ser listado todos os registros que contenham o produto "uva" e que todos os demais produtos estejam cadastrados na tabela "produtos".
       
      No exemplo acima seria listado apenas dois registros, pois o terceiro registro não contém o produto "uva". 
       
      Alguém pode me ajudar? Pois estou quebrando a cabeça a vários dias e não consigo achar uma solução.
    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, plural, ativo. Nela tem cadastrado vários itens e seu respectivo plural. No campo ativo eu coloco a letra "S" para informar que esta palavra está ativa no sistema. Por exemplo: 1, casa, casas, S 2, mesa, mesas, S 3, cama, camas, S 4, moto, motos, S 5, rádio, rádios O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "variações" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, camas, moto 2, mesas, casas, radio 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela variações da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "casa". Preciso fazer com que o php me liste todos os registros da tabela "variações" que contenham a palavra "casa". Porém se tiver algum registro com a palavra "casas" também tem que ser listado. Neste caso ele irá encontrar dois registros. Agora eu preciso que o php verifique os demais itens e faça a listagem apenas dos item que estão ativos (que contenham um "S" no campo ativo. Neste caso ele irá encontrar apenas um registro, pois o segundo registro contém a palavra "rádio". E "rádio" não está ativo na tabela itens. Como faço isso?
×

Informação importante

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