Remazela 6 Denunciar post Postado Novembro 25, 2016 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. 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
Alaerte Gabriel 662 Denunciar post Postado Novembro 25, 2016 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
Remazela 6 Denunciar post Postado Novembro 25, 2016 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
ESerra 744 Denunciar post Postado Novembro 25, 2016 Troque: $_POST['search'] Por: $_REQUEST['search'] Compartilhar este post Link para o post Compartilhar em outros sites
Mateus Silva 64 Denunciar post Postado Novembro 25, 2016 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
Remazela 6 Denunciar post Postado Novembro 25, 2016 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
Mateus Silva 64 Denunciar post Postado Novembro 25, 2016 Então, ai vai depender do seu sistema, como você vai tratar os dados e fazer a busca Compartilhar este post Link para o post Compartilhar em outros sites
Maykel-ctba 233 Denunciar post Postado Novembro 25, 2016 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
Remazela 6 Denunciar post Postado Novembro 25, 2016 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. 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
Mateus Silva 64 Denunciar post Postado Novembro 25, 2016 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
Maykel-ctba 233 Denunciar post Postado Novembro 25, 2016 Para paginar o resultado da sua query, use LIMIT. Compartilhar este post Link para o post Compartilhar em outros sites
Remazela 6 Denunciar post Postado Novembro 26, 2016 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
Alaerte Gabriel 662 Denunciar post Postado Novembro 28, 2016 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