Ir para conteúdo

POWERED BY:

Arquivado

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

rafamzk

Dificuladade na paginação

Recommended Posts

Olá, sou iniciante em PHP e estou com dificuldade na paginação, agradeço desde já a ajuda.

É o seguinte... a paginação está funcionando normalmente quando listo o total de registros "mostraFilme()", porém através do método busca "buscaFilme()", a primeira página aparece normal, quando chamo a segunda não aparece nada.

O mesmo acontece no método categoria "categoriaFilme()", sendo q quando chamo a segunda aparece a lista geral do DB.

 

Segue os codigos:

 

 

<?php

    include_once("Paginacao.php");
    
    class Lista extends Paginacao{
        
        private $strNumPagina, $strPaginas, $strUrl;
        
        public function setNumPagina($valor){
            $this->strNumPagina = $valor;
        }
        
        public function setUrl($valor){
            $this->strUrl = $valor;
        }
        
        public function getPaginas(){
            return $this-> strNumPagina;
        }
        
        public function mostraFilme(){
            $sql = "SELECT * FROM filme ORDER BY id_filme desc";
            $this->setParametro($this->strNumPagina);
            $this->setFileName($this->strUrl);
            $this->setInfoMaxPag(10);
            $this->setMaximoLinks(250);
            $this->setSQL($sql);
            
            self::iniciaPaginacao();
            $cont = 0;
            
            while ($linha = self::results()){
                $cont++;
                echo "
                
                <ul>
                <li>
                <a href='index.php?link=2&id=$linha[id_filme]'>
                        <img src='admin/img/$linha[img_filme]' height='160'>
                </a>
                <nav>
                <span>Titulo Original:</span> $linha[titulo_original]<br>
                <span>Título em Português:</span> $linha[titulo_portugues]<br>
                <span>Gênero:</span> $linha[genero]<br>
                <span>Ano:</span> $linha[ano]<br>
                <span>Atores:</span> $linha[ator]<br>
                <span>Sinopse:</span> " . limitar( $linha[ 'sinopse' ], 280 ) . "
                </nav>
                </li>
                </ul>
                
                ";
                
                self::setContador($cont);
            }        
            
        }
        
        public function categoriaFilme(){
            $idcategoria = $_GET["idcategoria"];
            $sql = "SELECT * FROM filme WHERE id_categoria = '$idcategoria' ORDER BY ano desc";
            $this->setParametro($this->strNumPagina);
            $this->setFileName($this->strUrl);
            $this->setInfoMaxPag(10);
            $this->setMaximoLinks(250);
            $this->setSQL($sql);
            
            self::iniciaPaginacao();
            $cont = 0;
            
            while ($linha = self::results()){
                $cont++;
                echo "
                
                <ul>
                <li>
                <a href='index.php?link=2&id=$linha[id_filme]'>
                        <img src='admin/img/$linha[img_filme]' height='160'>
                </a>
                <nav>
                <span>Titulo Original:</span> $linha[titulo_original]<br>
                <span>Título em Português:</span> $linha[titulo_portugues]<br>
                <span>Gênero:</span> $linha[genero]<br>
                <span>Ano:</span> $linha[ano]<br>
                <span>Atores:</span> $linha[ator]<br>
                <span>Sinopse:</span> " . limitar( $linha[ 'sinopse' ], 280 ) . "
                </nav>
                </li>
                </ul>
                
                ";
                
                self::setContador($cont);
            }        
            
        }

        public function buscaFilme(){
            include "biblio.php";
            $txt_pesquisa = strip_tags($_POST["txt_pesquisa"]);
            $sql = "SELECT * FROM filme WHERE titulo_original LIKE'%".anti_sql_injection($txt_pesquisa)."%' or titulo_portugues LIKE'%".anti_sql_injection($txt_pesquisa)."%' or ator LIKE'%".anti_sql_injection($txt_pesquisa)."%'";
            $this->setParametro($this->strNumPagina);
            $this->setFileName($this->strUrl);
            $this->setInfoMaxPag(10);
            $this->setMaximoLinks(250);
            $this->setSQL($sql);
            
            self::iniciaPaginacao();
            $cont = 0;
            
            while ($linha = self::results()){
                $cont++;
                echo "
                
                <ul>
                <li>
                <a href='index.php?link=2&id=$linha[id_filme]'>
                        <img src='admin/img/$linha[img_filme]' height='160'>
                </a>
                <nav>
                <span>Titulo Original:</span> $linha[titulo_original]<br>
                <span>Título em Português:</span> $linha[titulo_portugues]<br>
                <span>Gênero:</span> $linha[genero]<br>
                <span>Ano:</span> $linha[ano]<br>
                <span>Atores:</span> $linha[ator]<br>
                <span>Sinopse:</span> " . limitar( $linha[ 'sinopse' ], 280 ) . "
                </nav>
                </li>
                </ul>
                
                ";
                
                self::setContador($cont);
            }        
            
        }

    }
    
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que o método results() faz? A implementação dele não está aí.

 

Duas observações:

 

1. Você precisa de dois SELECTs: um para contar o total de registros para a busca e outro para buscar apenas os registros para a página corrente

 

1. O primeiro SELECT, para contar o total de registros, pode ser feito com a função COUNT da SQL. É bem mais eficiente

Compartilhar este post


Link para o post
Compartilhar em outros sites

O método results() está na classe paginação, no caso este:

 

 

<?php
include_once("conexaoMySQL.php");

    class Paginacao extends conexaoMySQL{
                
        private $ida, $param;
        private $maxPage, $maxLink, $numeroPaginas;
        private $sqlA, $sqlB;
        private $fileName, $nomeArquivoHTML;
        private $temp;
        private $passoA, $passoB;
        private $qrA, $qrB;
        private $totRegA, $totRegB;
        private $resultadoTotal, $resultadoParcial, $resultadoDiv, $numeroInt;
        private $pagAtual, $proxPag, $ultPag, $pagAnt;
        private $regInicial;
        private $dadosGerados;
        private $registroFinal;
        
        public function setParametro($cod){
            $this->ida = $cod;
        }
        
        public function setFileName($file){
            $this->fileName = $file;
        }
        
        public function setInfoMaxPag($max){
            $this->maxPage = $max;
        }
        
        public function setMaximoLinks($max){
            $this->maxLink = $max;
        }
        
        public function setSQL($qr){
            $this->sqlA = $qr;
        }
        
        public function setContador($cont){
            $this->registroFinal = $this->param + $cont;
        }
        
        public function setNomeArquivoHTML($arq){
            $this->nomeArquivoHTML = $arq;
        }
        
/**********************************************************************************************************/        

        protected function iniciaPaginacao(){
        
            if (empty($this->ida)){
                $this->param = 0;
            } else {
                $this->temp = $this->ida;
                $this->passoA = $this->temp - 1;
                $this->passoB = $this->passoA * $this->maxPage;
                $this->param = $this->passoB;
            }    
                //$parametroTemp = $this->parametro - 1;
                $this->sqlB = $this->sqlA." LIMIT ".$this->param.",".$this->maxPage;
                
                //cria as conexões
                $this->qrA = self::executarSQL($this->sqlA);
                $this->qrB = self::executarSQL($this->sqlB);
                  $this->totRegA = self::contaDados($this->qrA);
                $this->totRegB = self::contaDados($this->qrB);
                $this->totRegB = self::contaDados($this->qrB);

                //carrega as variáveis
            
                $this->resultadoTotal = $this->totRegA;
                $this->resultadoParcial = $this->totRegB;
                $this->resultadoDiv = $this->resultadoTotal / $this->maxPage;
                $this->numeroInt = (int)$this->resultadoDiv;
                if ($this->numeroInt < $this->resultadoDiv){
                    $this->numeroPaginas = $this->numeroInt + 1;
                }else{
                    $this->numeroPaginas = $this->resultadoDiv;
                }
                $this->pagAtual = $this->param / $this->maxPage + 1;
                $this->regInicial = $this->param + 1;
                $this->pagAnt = $this->pagAtual - 1;
                $this->proxPag = $this->pagAtual + 1;
        }
        protected function results(){
            $this->dadosGerados = self::listar($this->qrB);
            return $this->dadosGerados;
        }

/**********************************************************************************************************/        

        public function geraNumeros(){                  
            if ($this->ida > 1) {
                           echo "<a href=\"$this->fileName&pg=$this->pagAnt\" title=\"$this->pagAnt\">Anterior</a>\n";
                       }
                       if ($this->temp >= $this->maxLink){
                         if ($this->numeroPaginas > $this->maxLink){
                             $n_maxlnk = $this->temp + 6;
                             $this->maxLink = $n_maxlnk;
                             $n_start = $this->maxLink - 6;
                             $lnk_impressos = $n_start;
                         }
                       }
                       //mostra os números das páginas
                       while(($lnk_impressos < $this->numeroPaginas) and ($lnk_impressos < $this->maxLink)){
                           $lnk_impressos ++;
                              // Mostra a página atual sem o link
                              if ($this->pagAtual == $lnk_impressos){
                                 echo "$lnk_impressos \n";
                           //mostra os números das
                           }else{
                              echo "<a href=\"$this->fileName&pg=$lnk_impressos\" title=\"$lnk_impressos\">$lnk_impressos</a>\n";
                              }
                           }
                      // mostra o link PRÓXIMO >>
                      if ($this->registroFinal < $this->resultadoTotal){
                            echo"<a href=\"$this->fileName&pg=$this->proxPag\" title=\"$this->proxPag\">Próximo</a>\n";
                     }                
        }
        public function getTime(){
            list($sec, $usec) = explode(" ",microtime());
            return ($sec + $usec);
        }
    }
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Montei esse site com base em outro, somente fui adaptando as minhas necessidades, estou nos primeiros passos do PHP. Para dizer a verdade nem sei como cheguei tão longe, mas aos poucos está indo.

Consegui solucionar o problema da paginação por categoria, depois q vi era algo bem simples, mesmo com conhecimento ínfimo nos comandos PHP deu certo, tentei aplicar a mesma solução para a paginação no sistema de busca, mas ñ deu certo, agradeço se alguém puder ajudar... abaixo mostro a solução do sistema categoria:

 

 

        public function geraNumCat(){                  
            $idcategoria = $_GET['idcategoria'];  //ACRESCENTEI ESSA LINHA
            if ($this->ida > 1) {
                           echo "<a href=\"$this->fileName&idcategoria=$idcategoria&pg=$this->pagAnt\" title=\"$this->pagAnt\">Anterior</a>\n";  //CHAMEI O LINK POR CATEGORIA
                       }
                       if ($this->temp >= $this->maxLink){
                         if ($this->numeroPaginas > $this->maxLink){
                             $n_maxlnk = $this->temp + 6;
                             $this->maxLink = $n_maxlnk;
                             $n_start = $this->maxLink - 6;
                             $lnk_impressos = $n_start;
                         }
                       }
                       //mostra os números das páginas
                       while(($lnk_impressos < $this->numeroPaginas) and ($lnk_impressos < $this->maxLink)){
                           $lnk_impressos ++;
                              // Mostra a página atual sem o link
                              if ($this->pagAtual == $lnk_impressos){
                                 echo "$lnk_impressos \n";
                           //mostra os números das
                           }else{
                              echo "<a href=\"$this->fileName&idcategoria=$idcategoria&pg=$lnk_impressos\" title=\"$lnk_impressos\">$lnk_impressos</a>\n";  //CHAMEI O LINK POR CATEGORIA
                              }
                           }
                      // mostra o link PRÓXIMO >>
                      if ($this->registroFinal < $this->resultadoTotal){
                            echo"<a href=\"$this->fileName&idcategoria=$idcategoria&pg=$this->proxPag\" title=\"$this->proxPag\">Próximo</a>\n";  //CHAMEI O LINK POR CATEGORIA
                     }                
        }

Abaixo mostro o q tentei fazer no sistema da busca, sem sucesso. O link chega a pegar a palavra digitada na busca, mas quando tento ir para outras páginas lista todo o resultado do DB.

 

 

        public function geraNumBusca(){                  
            $txt_pesquisa = $_POST["txt_pesquisa"];
            if ($this->ida > 1) {
                           echo "<a href=\"$this->fileName&txt_pesquisa=$txt_pesquisa&pg=$this->pagAnt\" title=\"$this->pagAnt\">Anterior</a>\n";
                       }
                       if ($this->temp >= $this->maxLink){
                         if ($this->numeroPaginas > $this->maxLink){
                             $n_maxlnk = $this->temp + 6;
                             $this->maxLink = $n_maxlnk;
                             $n_start = $this->maxLink - 6;
                             $lnk_impressos = $n_start;
                         }
                       }
                       //mostra os números das páginas
                       while(($lnk_impressos < $this->numeroPaginas) and ($lnk_impressos < $this->maxLink)){
                           $lnk_impressos ++;
                              // Mostra a página atual sem o link
                              if ($this->pagAtual == $lnk_impressos){
                                 echo "$lnk_impressos \n";
                           //mostra os números das
                           }else{
                              echo "<a href=\"$this->fileName&txt_pesquisa=$txt_pesquisa&pg=$lnk_impressos\" title=\"$lnk_impressos\">$lnk_impressos</a>\n";
                              }
                           }
                      // mostra o link PRÓXIMO >>
                      if ($this->registroFinal < $this->resultadoTotal){
                            echo"<a href=\"$this->fileName&txt_pesquisa=$txt_pesquisa&pg=$this->proxPag\" title=\"$this->proxPag\">Próximo</a>\n";
                     }                
        }

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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