1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.
  2. Informação: A partir das 9:00 (8:00 nos Açores) deste Sábado, 15 de Dezembro, haverá um breve período de inacessibilidade ao fórum e restantes sites da ZWAME (Comparador, Jogos, Portal, etc).
    Se necessário faremos actualizações via Twitter e Facebook.
    Remover anúncio

Filtrar por ordem, quantidade e paginação - PHP

Discussão em 'Web Development' iniciada por AndreLC, 17 de Maio de 2012. (Respostas: 3; Visualizações: 1526)

  1. AndreLC

    AndreLC Power Member

    Boa tarde a todos,

    No Front-End, na visualização de imóveis estou a fazer uns filtros de pesquisa e necessito de ajuda.

    O que estou a desenvolver está visível nesta página de teste: http://andre-lc.webuda.com/index2.php

    À frente do Total de imóveis a ideia será visualizar o total de imóveis da query de filtragem que se faz. Pois, ao escolher por exemplo por número de quartos, aqui o total irá variar.
    1.Sei que é fazer um count, mas não estou a ver onde colocá-lo, até porque só depois aplico as querys e aqui inicialmente é que queria que aparecesse o respectivo total.

    Depois a possibilidade de ordenar por preço, área útil ou tipologia tanto crescente como decrescente e por fim quantos imóveis por página o utilizador quer visualizar. Aqui tenho uma div a englobar os imóveis que por defeito "fica bem" com três imóveis, se escolher as outras opções de resultados: 5, 10, 20 ou 50 irá ultrapassar a div.
    2. Como faço para que a div se adapte aos resultados?

    3. Por defeito, a ideia inicial é quando se entra na página poder visualizar-se os imóveis ordenados por id, por ordem decrescente com limite de 3 imóveis por página e até aqui tudo bem. Posteriormente se se escolher uma opção no filtro, está a filtrar, mas quando se mexe na paginação dá problema porque volta ao select inicial. Sei que na query estou a fazer a consulta para mostrar todos os imóveis e que é daí, mas não estou a ver como interligar, pois se colocar a query de filtro retorna que a ordem, sentido e quant, não estão definidos. Como corrijo a paginação para que esteja certa de acordo com o filtro que se efectuou?

    4. Quando se filtra, ao carregar no botão, a página faz refresh e a opção que se escolheu não fica seleccionada, como coloco-a com selected depois do refresh para que o utilizador possa ver o que seleccionou? Como é que filtro com botão e/ou sem botão (utilizando o onchange)?

    O código que tenho (sem a paginação s/refresh à página para que seja mais fácil de perceber):

    Código:
    <?php
    session_start();
    if (count($_GET) == 0) {
        unset($_SESSION['pesq']); // entrada na pagina pela 1 vez;
        unset($_SESSION['nreg']);
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Imóveis | Ver Imóveis</title>
        <link rel="icon" type="image/x-icon" href="../favicon.ico" /> 
        <link href="../css/template.css" rel="stylesheet" type="text/css" />
        <link href="../css/pages.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <div id="ajaxContent">
    
       <form name="filtrar" action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
          <label>Total de imóveis: <?php $total; ?> </label><br /><br />
          
          <label>N.º de Quartos: </label>
          <select name="quarto">
                <?php
    
                    require 'config/connect.php';
                    $iselCats = "SELECT * FROM quartos";
                    $iqrCats  = mysql_query($iselCats);
                    while ($ilinhaCat = mysql_fetch_array($iqrCats)) {
                ?>
                        <option value="<?php echo $ilinhaCat['designacao'];?>"><?php echo $ilinhaCat['designacao'];?></option>
                <?php
                    }
                ?>
          </select>
              
          <br /><br />
          <label>Ordenar por:</label>
          
          <select name="ordem">
            <option value="preco">Preço</option>
            <option value="area">Área</option>´
            <option value="tipologia">Tipologia</option>
          </select>
            
          <select name="sentido">
            <option value="asc">Crescente</option>
            <option value="desc">Decrescente</option>
          </select>
          <br /><br />
          <label>Imóveis p/ pág: </label>
          <input type="radio" value="5"  name="quant" id="5">5
          <input type="radio" value="10" name="quant" id="10">10
          <input type="radio" value="25" name="quant" id="25">20
          <input type="radio" value="50" name="quant" id="50">50    
          
          <input type="hidden" name="accao" value="filtrar" />
          <input type="submit" name="button" value="Filtrar"/> <br /><br />
     </form>
      
      
      <?php
    
    //Área para visualizar os imóveis ordenados pelo id antes de filtrar
    
    //inclusão da ligação com a BD
    require("../config/connect.php");
    //A quantidade de valor a ser exibida
    $quantidade = 5;
    //a pagina actual
    $pagina     = (isset($_GET['pagina'])) ? (int) $_GET['pagina'] : 1;
    //Calcula a pagina de qual valor será exibido
    $inicio     = ($quantidade * $pagina) - $quantidade;
    
    //$sql = "SELECT * FROM imoveis ORDER BY ID DESC LIMIT $inicio, $quantidade";
    //Mostrar resultados - De 0 ate ao nr que queremos mostrar por pagina
    if (!isset($_POST['accao'])) {
        if (!isset($_SESSION['pesq'])) {
            $sql = "SELECT * FROM imoveis ORDER BY id DESC LIMIT $inicio, $quantidade";
        } else {
            $sql = $_SESSION['pesq'] . " ORDER BY id LIMIT $inicio, $quantidade";
        }
        
        // echo $sql;
        //Executa o SQL
        $qr = mysql_query($sql) or die(mysql_error());
        //Nr de Linhas retornado
        //$total = mysql_num_rows($qr);
        //Percorre os campos da tabela
        while ($ln = mysql_fetch_assoc($qr)) {
            $id             = $ln['id'];
            $id_para        = $ln['id_para'];
            $id_tipologia   = $ln['id_tipologia'];
            $id_categoria   = $ln['id_categoria'];
            $id_estado      = $ln['id_estado'];
            $area_util      = $ln['area_util'];
            $area_bruta     = $ln['area_bruta'];
            $area_terreno   = $ln['area_terreno'];
            $montante       = $ln['montante'];
            $id_distrito    = $ln['id_distrito'];
            $id_concelho    = $ln['id_concelho'];
            $id_freguesia   = $ln['id_freguesia'];
            $mini_descricao = $ln['mini_descricao'];
            $Imagem1        = $ln['Imagem1'];
            
            echo "<div class=\"area_reservada_pesquisa_txt1\">";
            
            if ($Imagem1 != "") {
                echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/$Imagem1' alt='' /></a>";
            } else {
                echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/default.png' alt='' /></a>";
            }
            
            echo "Tipo de Negócio: " . $negocio . "<br>";
            echo "Estado: " . $id_estado . "<br>";
            //echo "Estado: ".$id_estado."  | Tipo de Negócio: (".$negocio.")<br>";
            echo "Área útil: " . $area_util . " <label>m²</label><br>";
            echo "Área Bruta: " . $area_bruta . " <label>m²</label><br>";
            echo "Área Terreno: " . $area_terreno . " <label>m²</label><br>";
            echo "Valor: " . $montante . " <label>€</label>";
            echo "<br><br>";
            echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informa&ccedil;&atilde;o</font></a>";
            echo "</div>";
            
        } //while 
    } //if accao        
    ?>
    
    </div>
    
        <!-- Área de Filtros -->
         <?php
    if (isset($_POST['accao']) && $_POST['accao'] == 'filtrar') {
        switch (isset($_POST['ordem'])) {
            case 'preco':
                $ordem = "ORDER BY montante ";
                break;
            case 'area':
                $ordem = "ORDER BY area_util ";
                break;
            case 'tipologia':
                $ordem = "ORDER BY id_tipologia ";
                break;
            default:
                $ordem = "ORDER BY id ";
        }
        
        switch (isset($_POST['sentido'])) {
            case 'asc':
                $sentido = "ASC ";
                break;
            case 'desc':
                $sentido = "DESC ";
                break;
            default:
                $sentido = "DESC ";
        }
        
        switch (isset($_POST['quant'])) {
            case '5':
                $quantidade = 5;
                break;
            case '10':
                $quantidade = 10;
                break;
            case '25':
                $quantidade = 25;
                break;
            case '50':
                $quantidade = 50;
                break;
            default:
                $quantidade = 5;
        }
        
        
        if (!empty($_POST['quarto'])) {
            $quarto = " WHERE id_quarto = '" . $_POST['quarto'] . "' ";
        } else {
            $quarto = "";
        }
        
        $sql = "SELECT * FROM imoveis $quarto $ordem $sentido LIMIT $quantidade";
        echo $sql;
        
        
        //Executa o SQL
        $qr = mysql_query($sql) or die(mysql_error());
        //Nr de Linhas retornado
        $total    = mysql_num_rows($qr);
        //Percorre os campos da tabela
        $contador = 0;
        while ($ln = mysql_fetch_assoc($qr)) {
            $id             = $ln['id'];
            $id_para        = $ln['id_para'];
            $id_tipologia   = $ln['id_tipologia'];
            $id_categoria   = $ln['id_categoria'];
            $id_estado      = $ln['id_estado'];
            $area_util      = $ln['area_util'];
            $area_bruta     = $ln['area_bruta'];
            $area_terreno   = $ln['area_terreno'];
            $montante       = $ln['montante'];
            $id_distrito    = $ln['id_distrito'];
            $id_concelho    = $ln['id_concelho'];
            $id_freguesia   = $ln['id_freguesia'];
            $mini_descricao = $ln['mini_descricao'];
            $Imagem1        = $ln['Imagem1'];
            
            $contador++;
            if ($contador > $quantidade)
                break;
            
            echo "<div class=\"area_reservada_pesquisa_txt1\">";
            
            if ($Imagem1 != "") {
                echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/$Imagem1' alt='' /></a>";
            } else {
                echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><img width='150' height='150' src='img/Imoveis/default.png' alt='' /></a>";
            }
            
            echo "Tipo de Negócio: " . $negocio . "<br>";
            echo "Estado: " . $id_estado . "<br>";
            //echo "Estado: ".$id_estado."  | Tipo de Negócio: (".$negocio.")<br>";
            echo "Área útil: " . $area_util . " <label>m²</label><br>";
            echo "Área Bruta: " . $area_bruta . " <label>m²</label><br>";
            echo "Área Terreno: " . $area_terreno . " <label>m²</label><br>";
            echo "Valor: " . $montante . " <label>€</label>";
            echo "<br><br>";
            echo "<a href='ver_imoveis_maisinfo.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informa&ccedil;&atilde;o</font></a>";
            echo "</div>";
            
        }
    ?>
    
    <!-- Paginação -->
    <div class="pesquisa_page">
    
        <?php
        
        /* Sei que é daqui o "problema" porque estou a mostrar todos os imóveis
        Mas como interligo isto aqui?
        Se colocar a query de filtro retorna que o post de ordem, sentido e quant, não estão definidos!      
        */
        $sqlTotal = "SELECT * FROM imoveis";
        //echo $sqlTotal;
        //Executa o SQL
        $qrTotal = mysql_query($sqlTotal) or die(mysql_error());
        //Total de Registos na tabela
        $numTotal    = mysql_num_rows($qrTotal);
        //Calculo do Total de páginas a serem exibidas
        $totalPagina = ceil($numTotal / $quantidade);
        //Defini o valor máximo a ser exibido na página tanto para a direita como para a esquerda
        $exibir      = 5;
        //Pagina Anterior - Caso o valor seja zero, por padrão ficará o valor 1
        $anterior    = (($pagina - 1) == 0) ? 1 : $pagina - 1;
        //Pagina Seguinte - Caso a pagina +1 for maior ou igual ao total, terá o valor do total 
        //caso contrario fica com o valor da página + 1
        $posterior   = (($pagina + 1) >= $totalPagina) ? $totalPagina : $pagina + 1;
        //Primeira Página e Anterior
        
        echo '<a href="?pagina=1">Primeira</a> | ';
        echo "<a href=\"?pagina=$anterior\">Anterior</a> | ";
        
        //Exibe (expande) as páginas à esquerda
        
        for ($i = $pagina - $exibir; $i <= $pagina - 1; $i++) {
            if ($i > 0)
                echo '<a href="?pagina=' . $i . '"> ' . $i . ' </a>';
        }
        //Pagina actual
        
        echo '<a href="?pagina=' . $pagina . '"><strong><font color=#BC202C>' . $pagina . '</font></strong></a>';
        //Exibe (expande) as páginas à direita
        
        for ($i = $pagina + 1; $i < $pagina + $exibir; $i++) {
            if ($i <= $totalPagina)
                echo '<a href="?pagina=' . $i . '"> ' . $i . ' </a>';
        }
        //Proxima e Ultima Pagina
        echo " | <a href=\"?pagina=$posterior\">Seguinte</a> | ";
        echo "   <a href=\"?pagina=$totalPagina\">&Uacute;ltima</a>";
    
    ?>
    </div>
    
    </body>
    </html>
    
    Obrigado pela vossa ajuda e atenção.
     
    Última edição: 18 de Maio de 2012
  2. AndreLC

    AndreLC Power Member

    Podem dar uma vista de olhos, por favor?

    Obrigado.
     
  3. AndreLC

    AndreLC Power Member

    Boa noite,

    O 4 e o 2 já consegui resolver. o 4 tinha que passar para a variável de sessão para não perder a informação. O 2 tinha a height definida na div por isso é que não estava a ajustar aos resultados, mas já está ok.

    Agora a minha dificuldade mantém-se no 3 e no 1.

    Agora já tenho o quarto e os distritos, mas mesmo assim a ideia será mesmo que os outros só alterem a ordem, apresentem à mesma o total à frente onde diz "Total de Imóveis". Quando se entra na página aparece os totais, e quando se filtra (pelos quartos, distritos e/ou pela ordem) vai alterando e mostrando o total para que o utilizador tenha essa informação em vista.

    Coloquei comentários no código que é mais fácil tentar indicar as dúvidas. Preciso de uma grande limpeza no código, pois já estou perdido e
    preciso que vocês com mais experiência me corrijam. Vejam por favor:

    Código:
    <?php
    session_start();
    //inclusão da ligação com a BD
    require("config/connect.php");
    if(count($_GET)==0){
      unset($_SESSION['pesq']);// entrada na pagina pela 1 vez;
      //unset($_SESSION['nreg']); //este seria para o n.º dos registos
      unset($_SESSION['quarto']);
      unset($_SESSION['distrito']);
      //unset($_SESSION['ordem']);
      //unset($_SESSION['sentido']);
      unset($_SESSION['quant']);
    }
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[URL]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd[/URL]">
    <html xmlns="[URL]http://www.w3.org/1999/xhtml[/URL]">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>Imóveis | Ver Imóveis</title>
        <link rel="icon" type="image/x-icon" href="../favicon.ico" /> 
        <link href="../css/template.css" rel="stylesheet" type="text/css" />
        <link href="../css/pages.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <div id="ajaxContent">
       <form name="filtrar" action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
            <label>Total de imóveis:</label>
      
            <!--
        
            Aqui a ideia é ser o total do n.º de registos dos filtros
        
            Como vou buscar o total para apresentar aqui?
        
            -->
       <?php $total ?>
        
       <br /><br />
            <?php
       $quarto_post = $distrito_post = $ordem_post = $sentido_post = $quant_post = false;
      
       //Quartos
       if(isset($_POST['quarto']) && !empty($_POST['quarto'])){
            $quarto_post = $_POST['quarto'];
       }elseif(isset($_SESSION['quarto'])){
            $quarto_post = $_SESSION['quarto'];
       }
      
       //Distritos
       if(isset($_POST['distrito']) && !empty($_POST['distrito'])){
            $distrito_post = $_POST['distrito'];
       }elseif(isset($_SESSION['distrito'])){
            $distrito_post = $_SESSION['distrito'];
       }
      
       //Ordem
       if(isset($_POST['ordem']) && !empty($_POST['ordem'])){
            $ordem_post = $_POST['ordem'];
       }elseif(isset($_SESSION['ordem'])){
            $ordem_post = $_SESSION['ordem'];
       }
      
       //Sentido
       if(isset($_POST['sentido']) && !empty($_POST['sentido'])){
            $sentido_post = $_POST['sentido'];
       }elseif(isset($_SESSION['sentido'])){
            $sentido_post = $_SESSION['sentido'];
       }
      
       //Quantidade
       if(isset($_POST['quant']) && !empty($_POST['quant'])){
            $quant_post = $_POST['quant'];
       }elseif(isset($_SESSION['quant'])){
            $quant_post = $_SESSION['quant'];
       }
      
       /*
      
       Ali no select dos quartos o que está a mostrar primeiro é o 0, em vez do seleccione. Como coloco primeiro o seleccione?
      
       */
      
       echo '<label>N.º de Quartos:    </label>
            <select name="quarto">
            <option value="seleccione">Seleccione</option>
                    <option value="0" '.(($quarto_post == 0)?('selected=selected'):('')).'>0</option>
            <option value="1" '.(($quarto_post == 1)?('selected=selected'):('')).'>1</option>
            <option value="2" '.(($quarto_post == 2)?('selected=selected'):('')).'>2</option>
            <option value="3" '.(($quarto_post == 3)?('selected=selected'):('')).'>3</option>
            <option value="4" '.(($quarto_post == 4)?('selected=selected'):('')).'>4</option>
            <option value="5 ou mais" '.(($quarto_post == "5 ou mais")?('selected=selected'):('')).'>5 ou mais</option>
            </select>
            <label>Distrito:        </label>
        
            <select name="distrito">
            <option value="0">Seleccione o Distrito</option>
            <option value="1" '.(($distrito_post == 1)?('selected=selected'):('')).'>Aveiro</option>
            <option value="2" '.(($distrito_post == 2)?('selected=selected'):('')).'>Beja</option>
            <option value="3" '.(($distrito_post == 3)?('selected=selected'):('')).'>Braga</option>
            <option value="4" '.(($distrito_post == 4)?('selected=selected'):('')).'>Bragança</option>
            <option value="5" '.(($distrito_post == 5)?('selected=selected'):('')).'>Castelo Branco</option>
            <option value="6" '.(($distrito_post == 6)?('selected=selected'):('')).'>Coimbra</option>
            <option value="7" '.(($distrito_post == 7)?('selected=selected'):('')).'>Évora</option>
            <option value="8" '.(($distrito_post == 8)?('selected=selected'):('')).'>Faro</option>
            <option value="9" '.(($distrito_post == 9)?('selected=selected'):('')).'>Guarda</option>
            <option value="10" '.(($distrito_post == 10)?('selected=selected'):('')).'>Leiria</option>
            <option value="11" '.(($distrito_post == 11)?('selected=selected'):('')).'>Lisboa</option>
            <option value="12" '.(($distrito_post == 12)?('selected=selected'):('')).'>Portalegre</option>
            <option value="13" '.(($distrito_post == 13)?('selected=selected'):('')).'>Porto</option>
            <option value="14" '.(($distrito_post == 14)?('selected=selected'):('')).'>Santarém</option>
            <option value="15" '.(($distrito_post == 15)?('selected=selected'):('')).'>Setúbal</option>
            <option value="16" '.(($distrito_post == 16)?('selected=selected'):('')).'>Viana do Castelo</option>
            <option value="17" '.(($distrito_post == 17)?('selected=selected'):('')).'>Vila Real</option>
            <option value="18" '.(($distrito_post == 18)?('selected=selected'):('')).'>Viseu</option>
            <option value="19" '.(($distrito_post == 19)?('selected=selected'):('')).'>Açores</option>
            <option value="20" '.(($distrito_post == 20)?('selected=selected'):('')).'>Madeira</option>
            </select>
            <br><br>
        
                    <label>Ordenar por:          </label>
                    <select name="ordem">
                    <option value="seleccione">Seleccione</option>
            <option value="preco" '.(($ordem_post == "preco")?('selected=selected'):('')).'>Preço</option>
            <option value="area" '.(($ordem_post == "area")?('selected=selected'):('')).'>Área</option>
            <option value="tipologia" '.(($ordem_post == "tipologia")?('selected=selected'):('')).'>Tipologia</option>
            </select>
        
            <select name="sentido">
                    <option value="seleccione">Seleccione</option>
            <option value="asc" '.(($sentido_post == "asc")?('selected=selected'):('')).'>Crescente</option>
            <option value="desc" '.(($sentido_post == "desc")?('selected=selected'):('')).'>Decrescente</option>
            </select>
            <br /><br />
        
            <label>Imóveis p/ pág: </label>
                    <input type="radio" value="5"  name="quant" id="5" '.(($quant_post == 5)?('checked=checked'):('')).'>5
            <input type="radio" value="10" name="quant" id="10" '.(($quant_post == 10)?('checked=checked'):('')).'>10
            <input type="radio" value="25" name="quant" id="25" '.(($quant_post == 25)?('checked=checked'):('')).'>25
            <input type="radio" value="50" name="quant" id="50" '.(($quant_post == 50)?('checked=checked'):('')).'>50';
     
            ?>
            <input type="hidden" name="accao" value="filtrar" />
            <input type="submit" name="button" value="Filtrar"/>
    </form>
      
      
       <?php
                    //A quantidade de valor a ser exibida
            if(isset($_SESSION['quant'])){
            $quantidade = $_SESSION['quant'];
            } else {
            $quantidade = 5;
            }
     
            //a pagina actual
            $pagina         = (isset($_GET['pagina'])) ? (int)$_GET['pagina'] : 1;
            //Calcula a pagina de qual valor será exibido
            $inicio         = ($quantidade * $pagina) - $quantidade;
     
        
            //Mostrar resultados
            if (!isset($_POST['accao'])) {
     
            if (!isset($_SESSION['pesq'])) {
            $sql = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3) ORDER BY id DESC LIMIT $inicio, $quantidade";
            } else {
          
            /*
          
            Aqui coloco o $_SESSION['quarto'] e $_SESSION['estado'] ou em outros ifs? Tentei juntar mas não deu...
          
            */
          
            $sql = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3) ".$_SESSION['pesq']." LIMIT $inicio, $quantidade";       }
        
            echo $sql;
        
      /*
     
      Tinha pensado acrescentar esta parte aqui mas está a gerar conflito:
     
      //Contar registos
      if(!isset($_SESSION['nreg'])){
       $registos_count = mysql_num_rows(mysql_query($sql));
      }
      else{
       $registos_count=$_SESSION['nreg'];
      }
     
      //Também tenho agora os distritos, também terá que se acrescentar, não sei como interligar...
     
      if(isset($_SESSION['quarto']) && !empty($_SESSION['quarto'])){ // !empty() = nao vazio
                    $q_total   = "SELECT COUNT(id) FROM imoveis ".$_SESSION['quarto']." ".$_SESSION['pesq']." AND (estado = 1 OR estado = 3)";
      
            //Acrescenando o AND, na var de sessão quarto não há problema, mas juntamente com a var de sessão pesq já dá problema
        
            $result_total = mysql_query($q_total);
            //Total de Registos na tabela
            $numTotal   = mysql_num_rows($result_total);
            } else {
                    $q_total   = "SELECT COUNT(id) FROM imoveis WHERE (estado = 1 OR estado = 3)";
            $result_total = mysql_query($q_total);
            //Total de Registos na tabela
            $numTotal   = mysql_num_rows($result_total);
            }
     
      */
        
            //Executa o SQL
            $qr  = mysql_query($sql) or die(mysql_error());
            //Nr de Linhas retornado
            $total = mysql_num_rows($qr);
            //Percorre os campos da tabela
            while($ln = mysql_fetch_assoc($qr)){
            $id     = $ln['id'];
            $id_para        = $ln['id_para'];
            $id_tipologia  = $ln['id_tipologia'];
            $id_categoria   = $ln['id_categoria'];
            $id_estado  = $ln['id_estado'];
            $area_util  = $ln['area_util'];
            $area_bruta  = $ln['area_bruta'];
            $area_terreno  = $ln['area_terreno'];
            $montante   = $ln['montante'];
            $id_distrito    =   $ln['id_distrito'];
            $id_concelho    =   $ln['id_concelho'];
            $id_freguesia   = $ln['id_freguesia'];
            $mini_descricao = $ln['mini_descricao'];
            $Imagem1                = $ln['Imagem1'];
     
            echo "<div class=\"content_pesquisa_txt4\">";
              
            if ($Imagem1 != ""){
                    echo "<a href='visualiza_imovel.php?id=$id' target='_self'><img width='150' height='150' src='area/img/Imoveis/$Imagem1' alt='' /></a>";
            }else{
                    echo "<a href='visualiza_imovel.php?id=$id' target='_self'><img width='150' height='150' src='area/img/Imoveis/default.png' alt='' /></a>";
            }  
      
      
          
            ?>
     
    <?php
    $result = mysql_query("SELECT * FROM categoria WHERE codigo = '$id_distrito'");
    while($row = mysql_fetch_array($result)){
     
      $dis = $row['descricao'];
        
    ?>
    <?php
    $resulta = mysql_query("SELECT * FROM marca WHERE codigo = '$id_concelho'");
    while($rowa = mysql_fetch_array($resulta)){
     
      $cons = $rowa['descricao'];
    ?>
     
    <?php
    $resultb = mysql_query("SELECT * FROM para WHERE id_para = '$id_para'");
    while($rowb = mysql_fetch_array($resultb)){
     
      $negocio = $rowb['designacao'];
    ?>
    <?php
     
            echo "<div class='content_pesquisa_txt_i'>
            <font color='#BC202C'><strong>".$id_tipologia." ".$id_categoria." - ".$id_freguesia." - ".$cons." - ".$dis."</strong></font><br><br>";
          
        
    ?>
     
     
    <?php    
              
            echo "Tipo Negócio: ".$negocio."<br>";
            echo "Estado: ".$id_estado."<br>";
            echo "Área Útil: ".$area_util." <label>m²</label><br>";
            echo "Área Terreno: ".$area_terreno." <label>m²</label><br>";
            echo "Valor: ".$montante." <label>€</label>";
            echo "<br><br>";
      
            echo "<a href='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
      
            echo "</div></div>";
      
        
       } //fecha while dos imoveis
     
      } // fecha while dos concelhos
     
    } // fecha o tipo de negócio
     
       } //fecha o while dos distritos
    }//fecha if
      ?>
            <?php if(isset($_POST['accao']) && $_POST['accao'] == 'filtrar'){
            //QUARTOS
            $_SESSION['quarto'] = $_POST['quarto'];
            if (!empty($_POST['quarto'])) {
            $quarto = " WHERE id_quarto = '".$_POST['quarto']."' ";
            }
            else{
            $quarto = "";
            }
      
            //DISTRITOS
            $_SESSION['distrito'] = $_POST['distrito'];
            if (!empty($_POST['distrito'])) {
            $distrito = " WHERE id_categoria = '".$_POST['distrito']."' ";
            }
            else{
            $distrito = "";
            }
        
            //ORDEM
            $_SESSION['ordem'] = $_POST['ordem'];
            switch ($_POST['ordem']) {
            case 'preco': $ordem = "ORDER BY montante ";
            break;
            case 'area': $ordem = "ORDER BY area_util ";
            break;
            case 'tipologia': $ordem = "ORDER BY id_tipologia ";
            break;
            case 'seleccione': $ordem = "";
                    break;
            default: $ordem  = "ORDER BY id ";
            }
      
            //SENTIDO
            $_SESSION['sentido'] = $_POST['sentido'];
            switch ($_POST['sentido']) {
            case 'asc': $sentido = "ASC ";
            break;
            case 'desc': $sentido = "DESC ";
            break;
            case 'seleccione': $sentido = "";
                    break;
            default: $sentido  = "DESC ";
            }
                    //QUANTIDADE
            $_SESSION['quant'] = $_POST['quant'];
            switch ($_POST['quant']) {
            case '5':  $quantidade = 5;
            break;
            case '10': $quantidade = 10;
            break;
            case '25': $quantidade = 25;
            break;
            case '50': $quantidade = 50;
            break;
            default:   $quantidade = 5;
            }
     
        
            //Passando os parametros do filtro para a sessao
            $_SESSION['quarto'] = $quarto;
            $_SESSION['distrito'] = $distrito;
            $_SESSION['pesq']   = "$ordem $sentido"; // ou $_SESSION['pesq'] = $ordem $sentido; ?
            $_SESSION['quant']  = $quantidade;
     
            /*
      
            query -> como o $distrito tem o WHERE vai dar problema ao seleccionar os quartos que também tem, como se poderá resolver?
            Talvez com array e implode? Mas não estou a ver como formular perante o código que já se tem ...
          
            */
            $sql = "SELECT * FROM imoveis $quarto $distrito $ordem $sentido LIMIT $inicio, $quantidade";
            echo $sql;
      
       //Executa o SQL
            $qr  = mysql_query($sql) or die(mysql_error());
       //Nr de Linhas retornado
       // $total = mysql_num_rows($qr);
            //Percorre os campos da tabela
       $contador=0;
            while($ln = mysql_fetch_assoc($qr)){
            $id     = $ln['id'];
            $id_para        = $ln['id_para'];
            $id_tipologia  = $ln['id_tipologia'];
            $id_categoria   = $ln['id_categoria'];
            $id_estado  = $ln['id_estado'];
            $area_util  = $ln['area_util'];
            $area_bruta  = $ln['area_bruta'];
            $area_terreno  = $ln['area_terreno'];
            $montante   = $ln['montante'];
            $id_distrito    =   $ln['id_distrito'];
            $id_concelho    =   $ln['id_concelho'];
            $id_freguesia   = $ln['id_freguesia'];
            $mini_descricao = $ln['mini_descricao'];
            $Imagem1                = $ln['Imagem1'];
      
            $contador++;
            if($contador>$quantidade)break;
      
            echo "<div class=\"content_pesquisa_txt4\">";
                                      
                            if ($Imagem1 != ""){
                                    echo "<a href='visualiza_imovel.php?id=$id' target='_self'><img width='150' height='150' src='area/img/Imoveis/$Imagem1' alt='' /></a>";
                            }else{
                                    echo "<a href='visualiza_imovel.php?id=$id' target='_self'><img width='150' height='150' src='area/img/Imoveis/default.png' alt='' /></a>";
                            }  
            ?>
     
    <?php
    $result = mysql_query("SELECT * FROM categoria WHERE codigo = '$id_distrito'");
    while($row = mysql_fetch_array($result)){
     
      $dis = $row['descricao'];
        
    ?>
    <?php
    $resulta = mysql_query("SELECT * FROM marca WHERE codigo = '$id_concelho'");
    while($rowa = mysql_fetch_array($resulta)){
     
      $cons = $rowa['descricao'];
    ?>
     
    <?php
    $resultb = mysql_query("SELECT * FROM para WHERE id_para = '$id_para'");
    while($rowb = mysql_fetch_array($resultb)){
     
      $negocio = $rowb['designacao'];
    ?>
    <?php
     
            echo "<div class='content_pesquisa_txt_i'>
            <font color='#BC202C'><strong>".$id_tipologia." ".$id_categoria." - ".$id_freguesia." - ".$cons." - ".$dis."</strong></font><br><br>";
          
        
    ?>
     
     
    <?php    
              
            echo "Tipo Negócio: ".$negocio."<br>";
            echo "Estado: ".$id_estado."<br>";
            //echo "Estado: ".$id_estado."  | Tipo de Negócio: (".$negocio.")<br>";
            echo "Área Útil: ".$area_util." <label>m²</label><br>";
            echo "Área Terreno: ".$area_terreno." <label>m²</label><br>";
            echo "Valor: ".$montante." <label>€</label>";
            echo "<br><br>";
      
            echo "<a href='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
      
            echo "</div></div>";
      
        
       } //fecha while dos imoveis
     
      } // fecha while dos concelhos
     
    } // fecha o tipo de negócio
     
       } //fecha o while dos distritos
      
      ?>
          
      <?php
      }//if
            ?>
    </div> <!--id="ajaxContent"-->
    </div>
    <div class="pesquisa_page_i">
    <?php
     /*Este sql é para retornar o n.º de páginas que aparece entre o anterior e o seguinte, portanto penso que não poderá ser feito aqui a parte do contar para mostrar lá em cima o n.º de registos ou estarei equivocado?
      
            A paginação aqui não está a bater certo...
       Pois se filtrar por somente dois quartos e escolher 10 imóveis por página está a retornar uma data de páginas e só deveria ir até à terceira, pois só tenho 21 registos com essa característica...
        
       */
       
            if(isset($_SESSION['pesq'])){ //Aqui coloquei pesq
            $sqlTotal   = "SELECT * FROM imoveis ".$_SESSION['pesq']." (AND estado = 1 OR estado = 3)";
       } else {
            $sqlTotal   = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3)";
       }
            //Executa o SQL
            $qrTotal        = mysql_query($sqlTotal) or die(mysql_error());
            //Total de Registos na tabela
            $numTotal   = mysql_num_rows($qrTotal);
            //Calculo do Total de páginas a serem exibidas
            $totalPagina= ceil($numTotal/$quantidade);
            //Defini o valor máximo a ser exibido na página tanto para a direita como para a esquerda
            $exibir = 5;
            //Pagina Anterior - Caso o valor seja zero, por padrão ficará o valor 1
            $anterior  = (($pagina - 1) == 0) ? 1 : $pagina - 1;
            //Pagina Seguinte - Caso a pagina +1 for maior ou igual ao total, terá o valor do total
       //caso contrario fica com o valor da página + 1
       $posterior = (($pagina + 1) >= $totalPagina) ? $totalPagina : $pagina + 1;
            //Primeira Página e Anterior
      
            echo '<a href="index2.php?pagina=1">Primeira</a> | ';
            echo "<a href=\"index2.php?pagina=$anterior\">Anterior</a> | ";
          
            //Exibe (expande) as páginas à esquerda
      
            for($i = $pagina-$exibir; $i <= $pagina-1; $i++){
                    if($i > 0)
                    echo '<a href="index2.php?pagina='.$i.'"> '.$i.' </a>';
            }
            //Pagina actual
      
            echo ' <a href="index2.php?pagina='.$pagina.'"><strong><font color=#BC202C>'.$pagina.'</font></strong></a>';
            //Exibe (expande) as páginas à direita
          
            for($i = $pagina+1; $i < $pagina+$exibir; $i++){
                    if($i <= $totalPagina)
                    echo '<a href="index2.php?pagina='.$i.'"> '.$i.' </a>';
            }
            //Proxima e Ultima Pagina
            echo " | <a href=\"index2.php?pagina=$posterior\">Seguinte</a> | ";
            echo "  <a href=\"index2.php?pagina=$totalPagina\">Última</a>";
    ?>
    </div>
    </body>
    </html>
    
    Vou colocar as dúvidas em tópico talvez seja mais fácil:

    1. Dúvida: Obter sempre o total logo após o "Total de imóveis" (basicamente é os "Resultados").

    2. A questão é que a da paginação também não está bem, como adicionei essa parte dos distritos ainda me baralhou mais e não sei como colocar o WHERE (estado = 1 OR estado = 3) na query juntamente com as variáveis de sessão pesq, quarto, quant, distrito...

    Dúvida: A minha dificuldade é acertar as querys tanto que se filtre ou não por uma ou outra opção ter sempre certo a paginação e o total.

    São essas as minhas duas dúvidas...

    Como faziam para colocar isto tudo ok?

    Obrigado pela vossa ajuda e colaboração.
     
  4. AndreLC

    AndreLC Power Member

    Boa tarde,

    Não é um total "fixo" que pretendo Nuno, com isso estará sempre o total do número de imóveis que estiver na BD e o que pretendo é ter um total que varie consoante o que filtrar...

    Não sei como separar o código...

    Obrigado pela ajuda.
     

Partilhar esta Página