Ir para conteúdo

POWERED BY:

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 violin101
      Caros amigos, saudações.
       
      Por favor, me permita tirar uma dúvida com os amigos.

      Tenho um Formulário onde o Usuário digita todos os Dados necessários.

      Minha dúvida:
      --> como faço após o usuário digitar os dados e salvar, o Sistema chamar uma Modal ou mensagem perguntando se deseja imprimir agora ?

      Grato,
       
      Cesar
    • Por Carcleo
      Tenho uma abela de usuarios e uma tabela de administradores e clientes.
      Gostaria de uma ajuda para implementar um cadastro
       
      users -> name, login, passord (pronta) admins -> user_id, registratiom, etc.. client -> user_id, registratiom, etc...
      Queria ajuda para extender de user as classes Admin e Client
      Olhem como estáAdmin
      <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Admin extends User {     use HasFactory;            protected $fillable = [         'name',         'email',         'password',         'registration'     ];      private string $registration;     public function create(         string $name,          string $email,          string $password,         string $registration     )     {         //parent::create(['name'=>$name, 'email'=>$email, 'password'=>$password]);         parent::$name = $name;         parent::$email = $email;         parent::$password = $password;         $this->registration = $registration;     } } User
      <?php namespace App\Models; // use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Illuminate\Database\Eloquent\Relations\BelongsToMany; class User extends Authenticatable {     /** @use HasFactory<\Database\Factories\UserFactory> */     use HasFactory, Notifiable;     static string $name;     static string $email;     static string $password;     /**      * The attributes that are mass assignable.      *      * @var list<string>      */     protected $fillable = [         'name',         'email',         'password',     ];          /**      * The attributes that should be hidden for serialization.      *      * @var list<string>      */     protected $hidden = [         'remember_token',     ];     /**      * Get the attributes that should be cast.      *      * @return array<string, string>      */     protected function casts(): array     {         return [             'email_verified_at' => 'datetime',             'password' => 'hashed',         ];     }          public function roles() : BelongsToMany {         return $this->belongsToMany(Role::class);     }       public function hasHole(Array $roleName): bool     {                 foreach ($this->roles as $role) {             if ($role->name === $roleName) {                 return true;             }         }         return false;     }         public function hasHoles(Array $rolesName): bool     {                 foreach ($this->roles as $role) {             foreach ($rolesName as $rolee) {             if ($role->name === $rolee) {                 return true;             }          }         }         return false;     }         public function hasAbility(string $ability): bool     {         foreach ($this->roles as $role) {             if ($role->abilities->contains('name', $ability)) {                 return true;             }         }         return false;     }     } Como gravar um Admin na tabela admins sendo que ele é um User por extensão?
      Tentei assim mas é claro que está errado...
      public function store(Request $request, Admin $adminModel) {         $dados = $request->validate([             "name" => "required",             "email" => "required|email",             "password" => "required",             "registration" => "required"         ]);         $dados["password"] =  Hash::make($dados["password"]);                  $admin = Admin::where("registration",  $dados["registration"])->first();                  if ($admin)              return                    redirect()->route("admin.new")                             ->withErrors([                                 'fail' => 'Administrador já cadastrados<br>, favor verificar!'                   ]);                            $newAdmin = $adminModel->create(                                    $dados['name'],                                    $dados['email'],                                    $dados['password'],                                    $dados['registration']                                 );         dd($newAdmin);         $adminModel->save();         //$adminModel::create($admin);                  return redirect()->route("admin.new")->with("success",'Cadastrado com sucesso');     }  
    • Por violin101
      Caros amigos, saudações.
       
      Gostaria de tirar uma dúvida com os amigos, referente a PDV.
       
      Estou escrevendo um Sistema com Ponto de Vendas, a minha dúvida é o seguinte, referente ao procedimento mais correto.

      Conforme o caixa vai efetuando a venda, o Sistema de PDV já realiza:
      a baixa direto dos produtos no estoque
      ou
      somente após concretizar a venda o sistema baixa os produtos do estoque ?
       
      Grato,
       
      Cesar
       
    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
×

Informação importante

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