Ir para conteúdo

POWERED BY:

Arquivado

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

Remazela

PHP - Perde Paginação isso está me deixando louco

Recommended Posts

Caros amigos

Desculpa por recorrer novamente ajuda dos amigos.

Estou com um problema de Paginação com busca específica, por exemplo: busca tudo o que tiver CASA.

Fiz algumas pesquisas na NET e até assisti alguns vídeos sobre este assunto, mas continuo com o mesmo erro.

Quando digito: CASA, o sistema traz correto a 1ª página, quando passo para a 2ª página, perde totalmente o Foco da Busca, trazendo tudo.

Abaixo anexei a imagem do meu problema.

15181253_1609279362711372_30169967982950

Abaixo o Código fonte, que não consigo mais achar meu erro.

<?php 

  include"Connections/config.php";

      //Paginação da página
    $pag = "$_GET[pag]";
    if($pag >= '1'){
     $pag = $pag;
     } else {
       $pag = '1';
    }

    $maximo = '2'; //RESULTADOS POR PÁGINA P/ TESTE
    $inicio = ($pag * $maximo) - $maximo;

    $imovelTipo = $_POST['search']; //Pego a Variável através de um POST
    $dataVal = date('Y-m-d H:m:s');

    //Conexão BcoDados PDO
    $sql = 'SELECT * FROM imoveis WHERE imovelTermino >= :dataVal AND imovelTipo LIKE :imovelTipo ORDER BY imovelId DESC LIMIT '.$inicio.','.$maximo;
    try{
      $query = $conecta->prepare($sql);
      $query->bindValue(':dataVal',$dataVal,PDO::PARAM_STR);
      $query->bindValue(':imovelTipo','%'.$imovelTipo.'%',PDO::PARAM_STR);
      $query->execute();
      
      $resultado = $query->fetchAll(PDO::FETCH_ASSOC);
      
      }catch(PDOexception $error_imoveis){
        echo 'Erro ao selecionar os imoves!'.$error_imoveis->getMessage();  
      }

?>


<div id="pagina">
   
 
   <h1>Categoria</h1>
   <table width="100%" border="0" cellpadding="3" cellspacing="2" bordercolor="#666666";>
     <tr style="color:#005789; font-variant:small-caps; font:14px 'Trebuchet MS', Arial, Helvetica, sans-serif;">
       <td height="30" align="center" bgcolor="#E0E0E0"><strong>Ilustração:</strong></td>
       <td align="center" bgcolor="#E0E0E0"><strong>Categoria:</strong></td>
       <td align="center" bgcolor="#E0E0E0"><strong>Operação:</strong></td>
       <td align="center" bgcolor="#E0E0E0"><strong>Dormitórios:</strong></td>
       <td align="center" bgcolor="#E0E0E0"><strong>Data do Anúncio:</strong></td>
       <td align="center" bgcolor="#E0E0E0"><strong>Acessar:</strong></td>
     </tr>

       <?php 
        //Monto as Informações que desejo
        foreach($resultado as $res){
          $imovelID    = $res['imovelId'];
          $tipo        = $res['imovelTipo'];
          $negocio     = $res['imovelNegocio'];
          $valor       = $res['imovelValor'];
          $thumb       = $res['imovelThumb'];
          $titulo      = $res['imovelTitulo'];
          $dormitorios = $res['imovelComodos'];
          $data        = $res['imovelCadastro'];

           echo '<tr>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'"><img src="timthumb.php?src=midias/'.$thumb.'&h=60&w=100&zc=1" alt="'.$titulo.'" title="'.$titulo.'" border="0" /></a></td>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'">'.$tipo.'</a></td>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'"><strong>'.$negocio.'</strong></a></td>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'">'.$dormitorios.' Domitórios</a></td>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'">'.date('d/m/Y',strtotime($data)).'</a></td>';
           echo '<td align="center" bgcolor="#F0F0F0"><a href="index.php?pg=single&imovel='.$imovelID.'" class="veja_mais">Veja Mais</a></td>';
           echo '</tr>';

        }
       
      ?>       


   </table>
   
   <div class="paginator">

      <?php      

          //Faz a conexão com o Banco de Dados
          include"Connections/conecta.php";  

          $imovelTipo = $_POST['search'];

          $sql_res = $conecta->query("SELECT * FROM imoveis WHERE imovelTipo LIKE '%$imovelTipo%' ORDER BY imovelTermino ASC");
          $total = $sql_res->rowCount();     

          $paginas = ceil($total/$maximo);
          $links = '4'; //QUANTIDADE DE LINKS NO PAGINATOR

          echo "<a href=\"index.php?pg=search&search=$imovelTipo&pag=1\">Primeira Página</a>   ";

      //Daqui para frente perde todo o FOCO da Pesquisa
          for ($i = $pag-$links; $i <= $pag-1; $i++){
            if ($i <= 0){
            }else{
             echo"<a href=\"index.php?pg=search&search=$imovelTipo&pag=$i\">$i</a>   ";
            }
          } echo "$pag    ";

          for($i = $pag +1; $i <= $pag+$links; $i++){
            if($i > $paginas){
            }else{
             echo "<a href=\"index.php?pg=search&search=$imovelTipo&pag=$i\">$i</a>   ";
            }
          }
          echo "<a href=\"index.php?pg=search&search=$imovelTipo&pag=$paginas\">Última página</a>   ";
        
      ?>
   
   </div><!--paginator-->
   

</div><!--fecha pagina-->  

Agradeço a todos.

Atenciosamente,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala @Remazela, você já notou a forma como está tentando pegar os dados do GET pag ? está errado.

$pag = "$_GET[pag]";
if($pag >= '1'){
$pag = $pag;
} else {
$pag = '1';
}

Faça o seguinte:

$pag = isset($_GET['pag']) ? (int)$_GET['pag']  : 1;

E testa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

Alaerte

Fiz a correção conforme mencionado e continua perdendo o Foco da Busca.

Tudo me leva a crer, que o problema está nessas linhas, mas não consigo achar.

      //Daqui para frente perde todo o FOCO da Pesquisa
          for ($i = $pag-$links; $i <= $pag-1; $i++){
            if ($i <= 0){
            }else{
             echo"<a href=\"index.php?pg=search&search=$imovelTipo&pag=$i\">$i</a>   ";
            }
          } echo "$pag    ";

          for($i = $pag +1; $i <= $pag+$links; $i++){
            if($i > $paginas){
            }else{
             echo "<a href=\"index.php?pg=search&search=$imovelTipo&pag=$i\">$i</a>   ";
            }
          }
          echo "<a href=\"index.php?pg=search&search=$imovelTipo&pag=$paginas\">Última página</a>   ";
        

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade o que o Alaerte disse não tem muito sentido, como você estava fazendo também funciona, só não é o correto.

O que está acontecendo é o seguinte:

Você está passando o filtro ("Casa"), por POST, como a baixo:

$imovelTipo = $_POST['search'];

Quando você troca de página este POST é apagado, consequentemente ele não vai filtrar por "Casa", por exemplo.

Solução:

Você pode fazer as seguintes alterações em seu código

$imovelGet = isset($_GET['search']) ? $_GET['search'] : false;
$imovelTipo = isset($_POST['search']) ? $_POST['search'] : $imovelGet;

Se não existir nada no POST, ele retorna o GET, se não exisitir nem no POST, nem no GET, significa que não foi passado um filtro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos

Agradeço ajuda de cada um.

Amigo Mateus, conforme mencionado fiz a alteração e deu CERTO.

Apenas uma dúvida, se fizer uma busca com mais de um Tipo, ex.: CATEGORIA, BAIRRO, ESTADO e ETC.

Devo fazer como mencionado ou tem de ser outra forma ?

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Passe sempre todos os parâmetros da busca via $_GET.

pagina.php?categoria=tal&bairro=bairro01&estado=PR&busca=casa

Além de ficar mais fácil de manipular entre uma página e outra, você pode sempre que quiser copiar a URL com a pesquisa já feita, poupando de ter que fazê-la novamente (ao dar ctrl+c na URL).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro amigo

Mateus

Por favor, me perdoa por incomodar o amigo, com minha dúvida.

Em caso de mais de uma tipo de escolha, como mencionei, BAIRRO, ESTADO, CATEGORIA.

Como devo montar a tabela para trazer os dados que quero (SELECIONADO), abaixo coloquei a imagem da tabela que trago depois de filtrar.

15181401_1609321969373778_59613090931217

Como devo montar os comandos para poder paginar ?

Trecho do código abaixo:

   <div class="paginator">  
     
     <?php
     
       //Faço a conexão com o Banco de Dados para saber quantos dados Buscou.      
       $sql_res = $conecta->query("SELECT * FROM imoveis WHERE imovelNegocio LIKE '%$negocio%'
                          AND imovelTipo LIKE '%$tipo%'
                          AND ImovelBairro LIKE '%$bairro%' 
                          AND imovelComodos LIKE '%$quarto%' 
                ORDER BY imovelTermino ASC") or die(mysql_error());         
       
        $total = $sql_res->rowCount();

        $paginas = ceil($total / $maximo);

        $links = '3'; //QUANTIDADE DE LINKS NO PAGINATOR           

        echo "<a href=\"index.php?pg=filtro&pag=1\">Primeira Página</a>   ";

        for ($i = $pag-$links; $i <= $pag-1; $i++){
          if ($i <= 0){
          }else{
           echo"<a href=\"index.php?pg=filtro&pag=$i\">$i</a>   ";
          }
        } echo "$pag    ";

        for($i = $pag +1; $i <= $pag+$links; $i++){
          if($i > $paginas){
          }else{
           echo "<a href=\"index.php?pg=filtro&pag=$i\">$i</a>   ";
          }
        }
        echo "<a href=\"index.php?pg=filtro&pag=$paginas\">Última página</a>   ";
        
       
    ?>

   </div><!--paginator-->

Grato,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz da mesma forma que eu falei porém passando mais de um dado, ou seja, 3 POSTS e 3 GETS, na paginação, ao invés de somente imovelTipo você passa, por exemplo:

index.php?pg=suapagina&categoria=casa&bairro=algum_bairro&quartos=4

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caros amigos

Agradeço pela paciência e ajuda.

Abaixo posto meu código com as alterações feitas com SUCESSO.

<?php function paginarFiltro(){

    include"Connections/config.php";

    $imovelStatus = 'pendente';
    $dataVal = date('Y-m-d H:m:s');

    //Paginação da página
    $pag = isset($_GET['pag']) ? (int)$_GET['pag']  : 1;

    //Variáveis
    $getTipo = isset($_GET['tipo']) ? $_GET['tipo'] : false;
    $tipo   = isset($_POST['tipo']) ? $_POST['tipo'] : $getTipo;

    $getCat    = isset($_GET['categoria']) ? $_GET['categoria'] : false;
    $categoria = isset($_POST['categoria']) ? $_POST['categoria'] : $getCat;

    $getSub = isset($_GET['sub-cat']) ? $_GET['sub-cat'] : false;
    $subcat = isset($_POST['sub-cat']) ? $_POST['sub-cat'] : $getSub;

    $getBar = isset($_GET['bairro']) ? $_GET['bairro'] : false;
    $bairro = isset($_POST['bairro']) ? $_POST['bairro'] : $getBar;        


    $maximo = '15'; //RESULTADOS POR PÁGINA P/ TESTE
    $inicio = ($pag * $maximo) - $maximo;
   
    //Seleção no Banco de Dados
    $sql = 'SELECT * FROM imoveis WHERE imovelStatus LIKE :imovelStatus 
                      AND imovelNegocio LIKE :tipo 
                      AND imovelTipo LIKE :categoria
                      AND ImovelBairro LIKE :subcat 
                      AND imovelComodos LIKE :bairro 
                      AND imovelStatus LIKE :imovelStatus  
            ORDER BY imovelTermino >= :dataVal ASC LIMIT '.$inicio.','.$maximo;

    try{
      $query = $conecta->prepare($sql);
      $query->bindValue(':imovelStatus',$imovelStatus,PDO::PARAM_STR);      
      $query->bindValue(':dataVal',$dataVal,PDO::PARAM_STR);
      $query->bindValue(':tipo','%'.$tipo.'%',PDO::PARAM_STR);
      $query->bindValue(':categoria','%'.$categoria.'%',PDO::PARAM_STR);
      $query->bindValue(':subcat','%'.$subcat.'%',PDO::PARAM_STR);
      $query->bindValue(':bairro','%'.$bairro.'%',PDO::PARAM_STR);
      $query->execute();      
      
      $resultado = $query->fetchAll(PDO::FETCH_ASSOC);
      
      }catch(PDOexception $error){
         echo 'Erro ao selecionar pendentes'.$error->getMessage();
      }

        //Seleção no Banco de Dados para efetuar a Paginação
        $sql_res = $conecta->query("SELECT * FROM imoveis WHERE imovelStatus = 'pendente' 
        	                                  AND imovelTipo LIKE '%$categoria%'
						                      AND imovelNegocio LIKE '%$tipo%'
						                      AND ImovelBairro LIKE '%$subcat%' 
						                      AND imovelComodos LIKE '%$bairro%'
        	                             ORDER BY imovelTermino ASC");
        //Total de Registros encontrados
        $total = $sql_res->rowCount();      

      	$paginas = ceil($total/$maximo);
	$links = '4'; //QUANTIDADE DE LINKS NO PAGINATOR
  
                //Efetuo a Paginação
		echo "<a href=\"index.php?pg=filtro&tipo=$tipo&categoria=$categoria&sub-cat=$subcat&bairro=$bairro&pag=1\">Primeira Página</a>   ";

		for ($i = $pag-$links; $i <= $pag-1; $i++){
			if ($i <= 0){
			}else{
			 echo"<a href=\"index.php?pg=filtro&tipo=$tipo&categoria=$categoria&sub-cat=$subcat&bairro=$bairro&pag=$i\">$i</a>   ";
			}
		} echo "$pag    ";

		for($i = $pag +1; $i <= $pag+$links; $i++){
			if($i > $paginas){
			}else{
			 echo "<a href=\"index.php?pg=filtro&tipo=$tipo&categoria=$categoria&sub-cat=$subcat&bairro=$bairro&pag=$i\">$i</a>   ";
			}
		}
		echo "<a href=\"index.php?pg=filtro&tipo=$tipo&categoria=$categoria&sub-cat=$subcat&bairro=$bairro&pag=$paginas\">Última página</a>   ";

  }

?>

Amigos que DEUS o abençoa e devolva em dobro a paciência e atenção.

Agradeço a todos.

Atenciosamente,

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na verdade o que o Alaerte disse não tem muito sentido, como você estava fazendo também funciona, só não é o correto.

O que está acontecendo é o seguinte:

Você está passando o filtro ("Casa"), por POST, como a baixo:

$imovelTipo = $_POST['search'];

Quando você troca de página este POST é apagado, consequentemente ele não vai filtrar por "Casa", por exemplo.

Solução:

Você pode fazer as seguintes alterações em seu código

$imovelGet = isset($_GET['search']) ? $_GET['search'] : false;
$imovelTipo = isset($_POST['search']) ? $_POST['search'] : $imovelGet;

Se não existir nada no POST, ele retorna o GET, se não exisitir nem no POST, nem no GET, significa que não foi passado um filtro.

Não faz sentido ? Você está equivocado camarada, pode não resolver o problema dele em si, mais da forma como ele estava tratando os dados nunca vai estar correta. E sim, faz sentido. Números inteiros devem ser tratados como inteiros e não como string. Sem contar que foi passado $_GET[pag]. pag não é uma constante e também deverá ser tratado da forma correta $_GET['pag']

Verificar sempre a ocorrência da requisição $_GET no caso dele, com isset para evitar Warning de índice indefinido.

Viu como faz sentido ? ;) Da forma como estava chama-se gambiarra.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

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