Jump to content

Ajuda nas Querys de Pesquisa e Optimização do Código


AndreLC
 Share

Recommended Posts

Bom dia a todos,

Estou a fazer a zona de pesquisa de um site de imóveis que estou a desenvolver em PHP.

Tenho um formulário para o efeito de pesquisa com os campos:

- Radio button Compra e Arrendamento que ao carregar no radio button respectiva aparecerá a a dropdown com o preço máximo e mínimo distintos

- Radio button Habitação e Comercial que ao carregar aparecerá a dropdown com a tipologia distinta

- Dropdown com o Estado do imóvel

- Dropdown com o N.º mínimo de quartos

- Dropdown com os distritos

- Dropdown com a referência (id) do imóvel

Código:

<!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>Inicio</title>
      <script language="JavaScript">
         function dropdown_yes()
         {
             document.getElementById("dynamic").innerHTML="<select name=\"tipologia\" id=\"tipologia\" class=\"form_pesquisa\"><option value=\"\">Seleccione a Tipologia</option><option value=\"Terrenos\">Terrenos</option><option value=\"Moradias\">Moradias</option><option value=\"Apartamentos\">Apartamentos</option><option value=\"Lojas\">Lojas</option><option value=\"Escritórios\">Escritórios</option><option value=\"Prédios\">Prédios</option><option value=\"Armazéns\">Armazéns</option><option value=\"Quintas e Herdades\">Quintas e Herdades</option><option value=\"Garagens\">Garagens</option></select>";
         }
         
         function dropdown_no()
         {
             document.getElementById("dynamic").innerHTML="<select name=\"tipologia\" id=\"tipologia\" class=\"form_pesquisa\"><option value=\"\">Seleccione a Tipologia</option><option value=\"Loja Comercial\">Loja Comercial</option><option value=\"Escritório\">Escritório</option><option value=\"Industrial\">Industrial</option><option value=\"Armazém\">Armazém</option><option value=\"Terreno\">Terreno</option><option value=\"Venda de Negócio\">Venda de Negócio</option><option value=\"Loja com Escritório\">Loja com Escritório</option><option value=\"Garagem\">Garagem</option></select>";
         }
         
         function dropdown_yes1()
         {
         document.getElementById("dynamic1").innerHTML="<select name=\"preco_min\" id=\"preco_min\" class=\"form_pesquisa\"><option value=\"\">Preço Mínimo</option><option value=\"25.000\">25 000,00€</option><option value=\"50.000\">50 000,00€</option><option value=\"75.000\">75 000,00€</option><option value=\"100.000\">100 000,00€</option><option value=\"125.000\">125 000,00€</option><option value=\"150.000\">150 000,00€</option><option value=\"175.000\">175 000,00€</option><option value=\"200.000\">200 000,00€</option><option value=\"225.000\">225 000,00€</option><option value=\"250.000\">250 000,00€</option><option value=\"275.000\">275 000,00€</option><option value=\"300.000\">300 000,00€</option></select>";
         
         document.getElementById("dynamic2").innerHTML="<select name=\"preco_max\" id=\"preco_max\" class=\"form_pesquisa\"><option value=\"\">Preço Máximo</option><option value=\"25.000\">25 000,00€</option><option value=\"50.000\">50 000,00€</option><option value=\"75.000\">75 000,00€</option><option value=\"100.000\">100 000,00€</option><option value=\"125.000\">125 000,00€</option><option value=\"150.000\">150 000,00€</option><option value=\"175.000\">175 000,00€</option><option value=\"200.000\">200 000,00€</option><option value=\"225.000\">225 000,00€</option><option value=\"250.000\">250 000,00€</option><option value=\"275.000\">275 000,00€</option><option value=\"300.000\">300 000,00€</option></select>";
         }
             
         
         
         function dropdown_no1()
         {
         document.getElementById("dynamic1").innerHTML="<select name=\"preco_min\" id=\"preco_min\" class=\"form_pesquisa\"><option value=\"\">Preço Mínimo</option><option value=\"100\">100,00€</option><option value=\"200\">200,00€</option><option value=\"300\">300,00€</option><option value=\"400\">400,00€</option><option value=\"500\">500,00€</option><option value=\"600\">600,00€</option><option value=\"700\">700,00€</option><option value=\"800\">800,00€</option><option value=\"900\">900,00€</option><option value=\"1.000\">1 000,00€</option></select>";
         
         document.getElementById("dynamic2").innerHTML="<select name=\"preco_max\" id=\"preco_max\" class=\"form_pesquisa\"><option value=\"\">Preço Máximo</option><option value=\"200\">200,00€</option><option value=\"300\">300,00€</option><option value=\"400\">400,00€</option><option value=\"500\">500,00€</option><option value=\"600\">600,00€</option><option value=\"700\">700,00€</option><option value=\"800\">800,00€</option><option value=\"900\">900,00€</option><option value=\"1.000\">1 000,00€</option><option value=\"1.100\">1 100,00€</option><option value=\"1.200\">1 200,00€</option><option value=\"1.300\">1 300,00€</option><option value=\"1.400\">1 400,00€</option><option value=\"1.500\">1 500,00€</option></select>";
         }
         
      </script>
   </head>
   <body>
      <form action="pesquisa_imoveis.php" method="post" name="form1">
         <input type="radio" name="id_para" id="id_para" value="1" onClick="dropdown_yes1()" /> 
         <span class="form_pesquisa1">Compra</span>   
         <input type="radio" name="id_para" id="id_para" value="2" onClick="dropdown_no1()" />
         <span class="form_pesquisa1"> Arrendamento<br /></span>
         <div id="dynamic1">
         </div>
         <div id="dynamic2">
         </div>
         <br />
         <input type="radio" id="id_tpimovel" name="id_tpimovel" value="1" onClick="dropdown_yes()" /> <span class="form_pesquisa1">Habitação</span> 
         <input type="radio" name="id_tpimovel" id="id_tpimovel" value="2" onClick="dropdown_no()" /> <span class="form_pesquisa1">Comercial</span>
         <label>
            <div id="dynamic">
            </div>
         </label>
         <label>
            <br />
            <select name="estado" class="form_pesquisa">
               <option value="">Estado</option>
               <?php
                  require 'config/connect.php';
                  $iselCats = "SELECT * FROM estado ORDER BY id_estado";
                  $iqrCats = mysql_query($iselCats);
                  while($ilinhaCat = mysql_fetch_array($iqrCats)){
                  ?>
               <option value="<?php echo $ilinhaCat['designacao'];?>"><?php echo $ilinhaCat['designacao'];?></option>
               <br />
               <?php
                  }
                  ?>
            </select>
         </label>
         <label>
            <br />
            <select name="quartos" class="form_pesquisa">
               <option value="">Número Minímo de Quartos</option>
               <?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>
               <br />
               <?php
                  }
                  ?>
            </select>
         </label>
         <br />
         <label>
            <select name="distrito" class="form_pesquisa">
               <option value="">Seleccione o Distrito</option>
               <?php
                  include("area/include/connect_data_base.php");
                  
                  $sql_cat=mysql_query("SELECT * FROM categoria ORDER BY codigo ASC") or die(mysql_error());
                  while($result_sql_cat = mysql_fetch_object($sql_cat)){
                  echo '<option value="'.$result_sql_cat->codigo.'">'.$result_sql_cat->descricao.'</option>';
                  }
                  ?>
            </select>
         </label>
         <br /><br />
         <label class="form_pesquisa">Referência:</label> <input type="text" name="referencia" id="referencia" class="form_pesquisa" /><br /><br />
         <input type="hidden" name="accao" value="pesquisar" />
         <input class="ok_btn_result" type="submit" name="Submit" value=">> ver resultados" />
      </form>
   </body>
</html>

A minha dúvida é que sei que estou a fazer uma data de querys sem necessidade, pois, sei que poderei reduzir bastante linhas, mas não estou a ver como resolver e tornar o código mais rápido e eficiente e gostava de poder contar com a vossa ajuda e sabedoria para contornar esta situação.

A pesquisa só poderá mostrar os imóveis que tenham como estado o valor "1" ou o "3" que é o Activo e o Reservado, todos os restantes (2,4 e 5) são o Desactivo, Suspenso e Vendido e só poderá estar visível na área reservada. Vi que na query se colocar "estado = '1' OR estado = '3'" que estava a dar problemas porque estava a colocar o estado sempre com o valor '3'. Então ali na parte da referência fiz um switch e resolveu, mas os restantes case estão com a query meio forçada porque forcei que tivessem o valor 1 de activo.

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>Imoveis | Resultados da Pesquisa</title>
<body>

<div class="visualiza">

<?php

require 'config/connect.php';

$sqlz = mysql_query("SELECT * FROM imoveis WHERE estado = 1 OR estado = 3");
while ($record = mysql_fetch_assoc($sqlz)) {
    $id          = $record['id'];
    $id_para     = $record['id_para'];
    $id_tpimovel = $record['id_tpimovel'];
    $id_distrito = $record['id_distrito'];
    $id_concelho = $record['id_concelho'];
    $situacao    = $record['estado'];
    
}

//Max mostrado por pag
$per_page = 4;

//GET var start para extrair resultados na BD
if (!isset($_GET['start']))
    $start = 0;
else
    $start = $_GET['start'];

//Contar registos
if (!isset($_SESSION['nreg'])) {
    $registos_count = mysql_num_rows(mysql_query("SELECT * FROM imoveis WHERE estado = 1 OR estado = 3"));
} else {
    $registos_count = $_SESSION['nreg'];
}

//Contar maximo de pags
$max_pages = $registos_count / $per_page;

if (!$start)
    $start = 0;

//Mostrar resultados - De 0 ate ao nr que queremos mostrar por pagina
if (!isset($_POST['accao'])) {
    if (!isset($_SESSION['pesq'])) {
        $local_query = "SELECT * FROM imoveis WHERE estado = '1' OR estado = '3' ORDER BY id DESC LIMIT $start, $per_page";
    } else {
        $local_query = $_SESSION['pesq'] . " ORDER BY id DESC LIMIT $start, $per_page";
        
    }
    $get = mysql_query($local_query);
    while ($linha = @mysql_fetch_array($get)) {
        //Resultados
        $id             = $linha['id'];
        $id_para        = $linha['id_para'];
        $id_tpimovel    = $linha['id_tpimovel'];
        $id_tipologia   = $linha['id_tipologia'];
        $id_categoria   = $linha['id_categoria'];
        $id_estado      = $linha['id_estado'];
        $quartos        = $linha['id_quarto'];
        $area_util      = $linha['area_util'];
        $area_bruta     = $linha['area_bruta'];
        $area_terreno   = $linha['area_terreno'];
        $montante       = $linha['montante'];
        $id_distrito    = $linha['id_distrito'];
        $id_concelho    = $linha['id_concelho'];
        $id_freguesia   = $linha['id_freguesia'];
        $mini_descricao = $linha['mini_descricao'];
        $Imagem1        = $linha['Imagem1'];
        $situacao       = $linha['estado'];
        
        
        echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linha['Imagem1'] . "' 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'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $dis . " - " . $cons . " - " . $id_freguesia . "</strong></font><br><br>";
                    
                    
                    echo "Tipo de Negócio: " . $negocio . "<br>";
                    echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
                    
                    echo "</div></div>";
                    
                }
            }
            
            
        } // fecha while dos concelhos
        
    } // fecha o tipo de negócio
    
} //fecha o while dos distritos
?>

<?php
if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
    $id_para     = @$_POST['id_para'];
    $preco_min   = @$_POST['preco_min'];
    $preco_max   = @$_POST['preco_max'];
    $id_tpimovel = @$_POST['id_tpimovel'];
    $tipologia   = @$_POST['tipologia'];
    $estado      = @$_POST['estado'];
    $quartos     = @$_POST['quartos'];
    $distrito    = @$_POST['distrito'];
    $referencia  = @$_POST['referencia'];
    
    
    if ($id_para != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN ROUND('$preco_min',0) AND ROUND('$preco_max',0) AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_tpimovel != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_tpimovel = '$id_tpimovel' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_tpimovel != "" && $tipologia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($estado != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_estado = '$estado' AND estado = '1' OR estado = '3'";
    }
    
    if ($quartos != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_quarto = '$quartos' AND estado = '1' OR estado = '3'";
    }
    
    if ($distrito != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_distrito = '$distrito' AND estado = '1' OR estado = '3'";
    }
    
    if ($referencia != "") {
        $qr       = "SELECT * FROM imoveis WHERE id = '$referencia'";
        $resultbc = mysql_query($qr);
        while ($rowbc = mysql_fetch_array($resultbc)) {
            $situacao1 = $rowbc['estado'];
            
            
            switch ($situacao1) {
                
                case 1:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 2:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 3:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '3'";
                    //echo $pesq;
                    break;
                
                case 4:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 5:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
            }
            
        } //fecha do while
        
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "" && $distrito != "" && $referencia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND id_distrito = '$distrito' AND id LIKE '$referencia' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "" && $distrito != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND id_distrito = '$distrito' AND estado = '1' OR estado = '3'";
    }
    
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND estado = '1' OR estado = '3'";
    }
    
    
    
    if (@$pesq == "") {
        echo "<br><br><br><p class='cz' align='center'>Não foram encontrados resultados.</p><br>";
        
    }
    
    
    
    @$_SESSION['pesq'] = $pesq;
    //echo "pesq: " .$pesq;
    $iqrPesquisa      = @mysql_query($pesq);
    $registos_count   = @mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (@mysql_num_rows($iqrPesquisa) == '0') {
        echo "<br><br>";
        echo "<p class='cz' align='center'>Não foram encontrados resultados.</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = @mysql_fetch_assoc($iqrPesquisa)) {
            $id             = $linhaPesquisa['id'];
            $id_para        = $linhaPesquisa['id_para'];
            $id_tpimovel    = $linhaPesquisa['id_tpimovel'];
            $id_tipologia   = $linhaPesquisa['id_tipologia'];
            $id_categoria   = $linhaPesquisa['id_categoria'];
            $id_estado      = $linhaPesquisa['id_estado'];
            $quartos        = $linhaPesquisa['id_quarto'];
            $area_util      = $linhaPesquisa['area_util'];
            $area_bruta     = $linhaPesquisa['area_bruta'];
            $area_terreno   = $linhaPesquisa['area_terreno'];
            $montante       = $linhaPesquisa['montante'];
            $id_distrito    = $linhaPesquisa['id_distrito'];
            $id_concelho    = $linhaPesquisa['id_concelho'];
            $id_freguesia   = $linhaPesquisa['id_freguesia'];
            $mini_descricao = $linhaPesquisa['mini_descricao'];
            $Imagem1        = $linhaPesquisa['Imagem1'];
            
            $contador++;
            if ($contador > $per_page)
                break;
?>
                
                <?php
            
            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' 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'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $dis . " - " . $cons . " - " . $id_freguesia . "</strong></font><br><br>";
                        
                        
                        echo "Tipo de Negócio: " . $negocio . "<br>";
                        echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
                        
                        echo "</div></div>";
                        
?>
                <?php
                    }
                }
            }
            
            
            
        } // fecha while dos concelhos
        
    } // fecha o tipo de negócio
    
} //fecha o while dos distritos
?>


<?php
/*?><?php echo $pesq ; ?><?php */
?>


<div class="pesquisa_pagee">

        <?php

//Anterior e Seguinte

$prev = $start - $per_page;
$next = $start + $per_page;
//  if ( $registos_count>$per_page){
//Mostrar Anterior
if (!($start <= 0) && $registos_count > $per_page)
    echo " <a href='pesquisa_imoveis.php?start=$prev'>Anterior</a> ";

//Mostrar o nr de pags

//Var para a primeira pag
$i = 1;

for ($x = 0; $x < $registos_count; $x += $per_page) {
    if ($start != $x)
        echo " <a href='pesquisa_imoveis.php?start=$x'>$i</a>";
    else
        echo " <a href='pesquisa_imoveis.php?start=$x'><b>$i</b></a> ";
    $i++;
}

//Mostrar Seguinte
if (!($start >= $registos_count - $per_page))
    echo " <a href='pesquisa_imoveis.php?start=$next'>Seguinte</a> ";
//}


?>

</div>
</div>

</div> <!-- div visualiza -->

</body>
</html>

A parte que queria, principalmente, optimizar seria a que está dentro do if:

<?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){

....

}

Porque sei que está com vários if's desnecessários (não se assustem), isto, levando a um sistema lento e sobrecarregado e o que se pede é que o sistema seja bastante rápido, possuindo código clean e estruturado, e para isso preciso da vossa ajuda.

Tentei com o operador lógico  || , mas devo ter feito algo mal.

Obrigado pela ajuda e atenção,

AndreLC

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

  • Replies 111
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Uma otimização que seria muito boa era dizer olá ao AJAX para quem tiver o js ativado.

Com AJAX não tens que te incomodar em processar interface para submeter o formulário.

Além disso, podes sempre mostrar os resultados por baixo gerando o HTML dinamicamente usando o js (por favor, não uses innerHTML. Má ideia usa o método createElement. Mais limpo e estruturado e +-60% das vezes mais rápido.)

O js q tens, por exemplo, no dropdown_yes() é uma coisa completamente horrível!!!! Edita as text elements diretamente.

Isto só para começar. (já edito e acrescento mais coisas a seguir)

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Primeiro, mais uma vez, agradeço a tua colaboração.

Ajax estou às escuras tal como jquery. E para quem não tenha o js activado, não há problema?

Com o createElement não corro o risco de não correr no IE? Tinha há algum tempo lido algo do género. Mas deve ser possível de contornar, caso isso se verificasse.

La está, eu sei que está horrível, por isso pedi ajuda. E não é só o js, também a parte de pesquisa aqueles if's todos desnecessários.

Mas entre deixar o código como estava, não fazendo nada e fazer melhor, prefiro aprender com a vossa ajuda e fazer melhor para que da próxima não cometer mais estas imperfeições.

Não percebi como editar as text elements directamente.

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Primeiro, mais uma vez, agradeço a tua colaboração.

Ajax estou às escuras tal como jquery. E para quem não tenha o js activado, não há problema?

Para quem tem o js desativado fazes como tens agora. Agora o que se faz é criar uma versão para quem tem o js ativado (+-90%). Só reler uma parte muito pequena da página e num formato muito simples (JSON ou XML) é muito mais fácil que uma página HTML completa.

Com o createElement não corro o risco de não correr no IE? Tinha há algum tempo lido algo do género. Mas deve ser possível de contornar, caso isso se verificasse.

Precisas de compatibilidade com IE5? Senão nem te preocupes com isso.

La está, eu sei que está horrível, por isso pedi ajuda. E não é só o js, também a parte de pesquisa aqueles if's todos desnecessários.

Mas entre deixar o código como estava, não fazendo nada e fazer melhor, prefiro aprender com a vossa ajuda e fazer melhor para que da próxima não cometer mais estas imperfeições.

Não percebi como editar as text elements directamente.

Obrigado pela ajuda.

K, passa o código php por aqui:

http://beta.phpformatter.com/

Com uma formatação e indentação q tens é muito complicado ler e perceber como deve ser. Pode provocar erros para quem estiver a ler.

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

À parte como assim? Não estou a perceber como fazer. Não percebo json.

Estou às escuras do que me estás a aconselhar.

Já editei o código html bem como o php que tinha colocado, está identado.

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

À parte como assim? Não estou a perceber como fazer. Não percebo json.

Estou às escuras do que me estás a aconselhar.

Já editei o código html bem como o php que tinha colocado, está identado.

Obrigado pela ajuda.

Já vemos isso. Por agora, o que temos no servidor agora. Depois otimiza-se mais para usares AJAX para reduzires dramaticamente o processamento no servidor.

É melhor ir 1 coisa de cda vez.

1º Segurança:

Exemplos:

O $start não é limpo antes de ir para uma query. (Como é um inteiro podes usar cast para int).

Tudo o que tens no programa não tem segurança do exterior. Qq gajo que usa isso consegue obter o que que quiser da DB.

2ª Legibilidade

Procura isto:

while ($row = mysql_fetch_array($result)) {

Entre cada conjunto destes tens tags php que abrem e outras que fecham e uma monte de espaço livre.

Apaga a maior parte do monte de espaço livre e as tags <?php ?> se não tens objetivo de enviar dados para o utilizador. Torna o código mais complicado e tb tem impacto na performance.

Tens: Á "I know 'A' is cute"[/joke] Se escreveres o ficheiro diretamente em UTF-8 (Aviso: Não pode ter BOM (vê no wiki)) e indicares ao browser que o ficheiro está em utf-8 ficas com isto legível para quem programa

"Dude!" (Meu!(?)) não uses @. É má prática e é só um fix super rápido e normalmente temporário. Programadores a sério usam o isset.

3º Principal de performance

while ($record = mysql_fetch_assoc($sqlz)) {

Usa um if e na query indica "limit 1".

if (!$start)
    $start = 0;

Isto serve para....

Nesta zona:

$resultb = 

Bem... Um algoritmo O(n^3) ... Ainda por cima usando queries SQL...

se usasses uma brincadeira como esta (que eu n uso) http://www.php.net/manual/en/mysqli.reap-async-query.php

Conseguias ganhar significativamente.

Para além de q a query que grava o resultado em $resultb  é executado #$result * #$resulta (O(n^2)) vezes. Não admira que seja lento. Uma query à DB é sempre lento. Se repetes a mesma coisa repetidamente já se sabe o que acontece.

Em relação se é melhor 3 queries ou é melhor menos queries e juntar tabelas, o mjamado sabe mais disso que eu. Eu sei que usando indices a coisa acelera ao ponto de uma pesquisa ser O(1) em vez de ser O(n) se o que pesquisarmos for só com o indice.

Não uses aliasing. Só faz com que percas a indicação que a informação veio de fora.

Tens razão. Aquela cadeia de if's é problemática. Mas não é o principal problema de performance do sistema.

Já agora, atualmente... Quando tempo é que isto demora a processar?

Usa o mysqli e não o mysql

Já me cansei. Volto depois

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Já vemos isso. Por agora, o que temos no servidor agora. Depois otimiza-se mais para usares AJAX para reduzires dramaticamente o processamento no servidor.

É melhor ir 1 coisa de cda vez.

1º Segurança:

Exemplos:

O $start não é limpo antes de ir para uma query. (Como é um inteiro podes usar cast para int).

Obrigado pelo reparo.

//GET var start para extrair resultados na BD
if(!isset($_GET['start']))      
	$start = 0; 
else      
	$start = (int)$_GET['start']; 

No else já apliquei, na outra linha de cima com o isset como aplico o cast? Supostamente da mesma maneira mas não estou a conseguir.

Tudo o que tens no programa não tem segurança do exterior. Qq gajo que usa isso consegue obter o que que quiser da DB.

Pois, eu sei e estou empenhado em mudar isso.

2ª Legibilidade

Procura isto:

while ($row = mysql_fetch_array($result)) {

Entre cada conjunto destes tens tags php que abrem e outras que fecham e uma monte de espaço livre.

Apaga a maior parte do monte de espaço livre e as tags <?php ?> se não tens objetivo de enviar dados para o utilizador. Torna o código mais complicado e tb tem impacto na performance.

La está, o objectivo é enviar dados ao utilizador, por isso fiz desta maneira não muito elegante. De certeza que há uma melhor solução e só compliquei. Porque o que fiz não está nada elegante. A ideia de estar a abrir essas tags e a fechar é devido a precisar de ir buscar à tabela de distrito, de concelho e das restantes o valor correspondente do campo descricao (a tabela imoveis tem o campo id_distrito, id_concelho como chave estrangeira).

Por isso é que fiz aquele while antes onde ia buscar o campo id_distrito que é chave estrangeira:

$id_distrito  = $linha['id_distrito']; 

e depois fiz a query à tabela de distrito comparando se o codigo (chave primária) é igual à chave estrangeira $id_distrito:

<?php

$result = mysql_query("SELECT * FROM categoria WHERE codigo = '$id_distrito'");
while($row = mysql_fetch_array($result)){

	$dis = $row['descricao'];
	   
?>

e fazia outro while onde retiro a variavel $dis que possui a descricao para apresentar depois aqui:

echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>".$id_tipologia." ".$id_categoria." - ".$dis." - ".$cons." - ".$id_freguesia."</strong></font><br><br>";

Daí essa 'salganhada' toda...

Tens: Á "I know 'A' is cute"[/joke] Se escreveres o ficheiro diretamente em UTF-8 (Aviso: Não pode ter BOM (vê no wiki)) e indicares ao browser que o ficheiro está em utf-8 ficas com isto legível para quem programa

Estás a falar da colocação do header, é isso?

header('Content-Type: text/html; charset=utf-8'); 

"Dude!" (Meu!(?)) não uses @. É má prática e é só um fix super rápido e normalmente temporário. Programadores a sério usam o isset.

Como estava a fazer com o while, daí o @ e não usar o isset.

3º Principal de performance

while ($record = mysql_fetch_assoc($sqlz)) {

Usa um if e na query indica "limit 1".

Neste caso, porquê o uso de LIMIT 1? Assim não me iria retornar só um resultado ou estou a ver mal as coisas?

if (!$start)
    $start = 0;

Isto serve para....

Esse if estava aí por alguma razão, mas realmente agora retirei e não fez diferença...

Nesta zona:

$resultb = 

Bem... Um algoritmo O(n^3) ... Ainda por cima usando queries SQL...

se usasses uma brincadeira como esta (que eu n uso) http://www.php.net/manual/en/mysqli.reap-async-query.php

Conseguias ganhar significativamente.

Para além de q a query que grava o resultado em $resultb  é executado #$result * #$resulta (O(n^2)) vezes. Não admira que seja lento. Uma query à DB é sempre lento. Se repetes a mesma coisa repetidamente já se sabe o que acontece.

Em relação se é melhor 3 queries ou é melhor menos queries e juntar tabelas, o mjamado sabe mais disso que eu. Eu sei que usando indices a coisa acelera ao ponto de uma pesquisa ser O(1) em vez de ser O(n) se o que pesquisarmos for só com o indice.

Essa 'brincadeira' não é orientado a objectos? Sei que ganhava se fizesse com POO mas não estou a utilizar neste momento.

Não uses aliasing. Só faz com que percas a indicação que a informação veio de fora.

Aliasing, como assim?

Tens razão. Aquela cadeia de if's é problemática. Mas não é o principal problema de performance do sistema.

Já agora, atualmente... Quando tempo é que isto demora a processar?

Como optimizo essa cadeia de if's problemática? Neste momento não está a demorar nada porque estou ainda a trabalhar em localhost. Mas quando passasse para servidor, calculo que demorasse um tempo que faz a diferença.

Usa o mysqli e não o mysql

Já me cansei. Volto depois

O mysqli, também, não é orientado a objectos? A questão é que o servidor não tem suporte para mysqli.

Obrigado pela ajuda e pelo feedback.

EDIT: Talvez se utilizar INNER JOIN evite um pouco daquela salganhada. Penso que seria mais correcto...

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Começa por separar o HTML do PHP. A partir daí fica tudo mais simples 😄

O que posso separar? A verdade é que já estou confuso com o que fiz, sei que se estou assim ainda mais complicado é para vocês, mas por isso peço a vossa ajuda e colaboração, pois uma pessoa com experiência que ve o código por fora mais facilmente dá críticas construtivas e ajudam-me a tirar linhas repetidas que fiz sem necessidade e a melhorar o código que se revela menos eficiente.

Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Tenho o html do form de pesquisa e depois essa página em php, não estou a ver o que separar nessa página em php. O código que tenho precisa de uma grande reviravolta, eu sei.

Estou confuso. Aquela parte que fiz para obter o valor na campo descrição está uma salganhada e aqueles ifs todos na pesquisa e o resto.. Mas preciso da vossa ajuda para fazer isto da melhor maneira, o mais clean possível.

Obrigado.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Poderiam-me ajudar, inicialmente, a colocar este bloco referente ao if, funcional?

 <?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){

....

}

Cito o que tinha referido: " A pesquisa só poderá mostrar os imóveis que tenham como estado o valor "1" ou o "3" que é o Activo e o Reservado, todos os restantes (2, 4 e 5) são o Desactivo, Suspenso e Vendido e só poderá estar visível na área reservada. Vi que na query se colocar "estado = '1' OR estado = '3'" que estava a dar problemas porque estava a colocar o estado sempre com o valor '3'. Então ali na parte da referência fiz um switch e resolveu, mas os restantes case estão com a query meio forçada porque forcei que tivessem o valor 1 de activo."

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Quando acabares de corrigir o que já foi indicado vai-se resolver isso. A outra parte afeta isso e mais.

Para continuar retira todos os @ que tens.

Depois de demonstrares que fizeste isso tudo (pondo o código aqui, por ex:), então ajudamos-te

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Coloquei INNER JOIN retirando algumas linhas de código assim desnecessárias.

A partir daquela parte que pedi ajuda se retirar o @ dá "barraca".

O que tenho:

<?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>Imoveis | Resultados da Pesquisa</title>
<body>

<div class="visualiza">



<?php

require 'config/connect.php';

$sqlz   = mysql_query("SELECT * FROM imoveis WHERE estado = 1 OR estado = 3");
$record = mysql_fetch_assoc($sqlz);

//Max mostrado por pag
$per_page = 4;

//GET var start para extrair resultados na BD
if (!isset($_GET['start']))
    $start = 0;
else
    $start = (int) $_GET['start'];

//Contar registos
if (!isset($_SESSION['nreg'])) {
    $registos_count = mysql_num_rows(mysql_query("SELECT i.*, c.descricao, m.descricao, p.designacao
                                                        FROM imoveis AS i
                                                        INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                        INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                        INNER JOIN para AS p ON i.id_para = p.id_para
                                                        WHERE i.estado = 1 OR i.estado = 3"));
} else {
    $registos_count = $_SESSION['nreg'];
}

//Contar maximo de pags
$max_pages = $registos_count / $per_page;

//if (!$start)
//    $start = 0;

//Mostrar resultados - De 0 ate ao nr que queremos mostrar por pagina
if (!isset($_POST['accao'])) {
    if (!isset($_SESSION['pesq'])) {
        $local_query = "SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                                                    FROM imoveis AS i
                                                    INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                    INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                    INNER JOIN para AS p ON i.id_para = p.id_para
                                                    WHERE (
                                                        i.estado = 1 OR i.estado = 3
                                                            )
                                                    ORDER BY i.id DESC IMIT $start, $per_page";
    } else {
        $local_query = $_SESSION['pesq'] . " ORDER BY id DESC LIMIT $start, $per_page";
        
    }
    $get   = mysql_query($local_query);
    $linha = mysql_fetch_array($get);
    
    echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linha['Imagem1'] . "' alt='' />
                </a>
             ";
    
?>


<?php
    
    
    echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $linha['dis'] . " - " . $linha['cons'] . " - " . $id_freguesia . "</strong></font><br><br>";
    
    
    echo "Tipo de Negócio: " . $linha['negocio'] . "<br>";
    echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
    
    echo "</div></div>";
    
}


?>

<?php
if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
    // Aqui se tirar o @ dá barraca. Tentei:
    //if (isset($_POST['id_para']) $id_para = $_POST['id_para'];
    
    $id_para     = @$_POST['id_para'];
    $preco_min   = @$_POST['preco_min'];
    $preco_max   = @$_POST['preco_max'];
    $id_tpimovel = @$_POST['id_tpimovel'];
    $tipologia   = @$_POST['tipologia'];
    $estado      = @$_POST['estado'];
    $quartos     = @$_POST['quartos'];
    $distrito    = @$_POST['distrito'];
    $referencia  = @$_POST['referencia'];
    
    
    
    if ($id_para != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN ROUND('$preco_min',0) AND ROUND('$preco_max',0) AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_tpimovel != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_tpimovel = '$id_tpimovel' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_tpimovel != "" && $tipologia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($estado != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_estado = '$estado' AND estado = '1' OR estado = '3'";
    }
    
    if ($quartos != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_quarto = '$quartos' AND estado = '1' OR estado = '3'";
    }
    
    if ($distrito != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_distrito = '$distrito' AND estado = '1' OR estado = '3'";
    }
    
    if ($referencia != "") {
        $qr       = "SELECT * FROM imoveis WHERE id = '$referencia'";
        $resultbc = mysql_query($qr);
        while ($rowbc = mysql_fetch_array($resultbc)) {
            $situacao1 = $rowbc['estado'];
            
            
            switch ($situacao1) {
                
                case 1:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 2:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 3:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '3'";
                    //echo $pesq;
                    break;
                
                case 4:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
                
                case 5:
                    $pesq = "SELECT * FROM imoveis WHERE id = '$referencia' AND estado = '1'";
                    //echo $pesq;
                    break;
            }
            
        } //fecha do while
        
        //echo "<br>";
        //echo $qr;
        //echo $situacao1;
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "" && $distrito != "" && $referencia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND id_distrito = '$distrito' AND id LIKE '$referencia' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "" && $distrito != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND id_distrito = '$distrito' AND estado = '1' OR estado = '3'";
    }
    
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "" && $quartos != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND id_quarto = '$quartos' AND estado = '1' OR estado = '3'";
    }
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "" && $estado != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND id_estado = '$estado' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND estado = '1' OR estado = '3'";
    }
    
    
    if ($id_para != "" && $preco_min != "" && $preco_max != "" && $id_tpimovel != "" && $tipologia != "") {
        $pesq = "SELECT * FROM imoveis WHERE id_para = '$id_para' AND montante BETWEEN '$preco_min' AND '$preco_max' AND id_tpimovel = '$id_tpimovel' AND id_tipologia = '$tipologia' AND estado = '1' OR estado = '3'";
    }
    
    
    //Se tirar o @ dá barraca
    if (@$pesq == "") {
        echo "<br><br><br><p class='cz' align='center'>Não foram encontrados resultados.</p><br>";
        
    }
    
    
    
    @$_SESSION['pesq'] = $pesq;
    //echo "pesq: " .$pesq;
    $iqrPesquisa      = @mysql_query($pesq);
    $registos_count   = @mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (@mysql_num_rows($iqrPesquisa) == '0') {
        echo "<br><br>";
        echo "<p class='cz' align='center'>Não foram encontrados resultados.</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = @mysql_fetch_assoc($iqrPesquisa)) {
            $id             = $linhaPesquisa['id'];
            $id_para        = $linhaPesquisa['id_para'];
            $id_tpimovel    = $linhaPesquisa['id_tpimovel'];
            $id_tipologia   = $linhaPesquisa['id_tipologia'];
            $id_categoria   = $linhaPesquisa['id_categoria'];
            $id_estado      = $linhaPesquisa['id_estado'];
            $quartos        = $linhaPesquisa['id_quarto'];
            $area_util      = $linhaPesquisa['area_util'];
            $area_bruta     = $linhaPesquisa['area_bruta'];
            $area_terreno   = $linhaPesquisa['area_terreno'];
            $montante       = $linhaPesquisa['montante'];
            $id_distrito    = $linhaPesquisa['id_distrito'];
            $id_concelho    = $linhaPesquisa['id_concelho'];
            $id_freguesia   = $linhaPesquisa['id_freguesia'];
            $mini_descricao = $linhaPesquisa['mini_descricao'];
            $Imagem1        = $linhaPesquisa['Imagem1'];
            
            $contador++;
            if ($contador > $per_page)
                break;
?>
                
                <?php
            
            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' alt='' />
                </a>
             ";
            
?>

<?php
            
            $result = mysql_query("SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                            FROM imoveis AS i
                            INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                            INNER JOIN marca AS m ON i.id_concelho = m.codigo
                            INNER JOIN para AS p ON i.id_para = p.id_para
                            WHERE i.estado = 1 OR i.estado = 3
                            ORDER BY i.id DESC");
            
            $row = mysql_fetch_array($result);
            
            
            
            echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $row['dis'] . " - " . $row['cons'] . " - " . $id_freguesia . "</strong></font><br><br>";
            
            
            echo "Tipo de Negócio: " . $row['negocio'] . "<br>";
            echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
            
            echo "</div></div>";
            
?>
                <?php
        }
    }
}


?>

<div class="pesquisa_pagee">

     <?php

//Anterior e Seguinte

$prev = $start - $per_page;
$next = $start + $per_page;
//    if ( $registos_count>$per_page){
//Mostrar Anterior
if (!($start <= 0) && $registos_count > $per_page)
    echo " <a href='pesquisa_imoveis.php?start=$prev'>Anterior</a> ";


//Mostrar o nr de pags

//Var para a primeira pag
$i = 1;

for ($x = 0; $x < $registos_count; $x += $per_page) {
    if ($start != $x)
        echo " <a href='pesquisa_imoveis.php?start=$x'>$i</a>";
    else
        echo " <a href='pesquisa_imoveis.php?start=$x'><b>$i</b></a> ";
    $i++;
}

//Mostrar Seguinte
if (!($start >= $registos_count - $per_page))
    echo " <a href='pesquisa_imoveis.php?start=$next'>Seguinte</a> ";
//}


?>


</div>
</div>

</div> <!-- div visualiza -->

</body>
</html>

Peço, a vossa ajuda, por favor.

Agradeço a atenção.

Obrigado,

AndreLC

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Sim, do género pesquiso por uma referência que não existe e retorna o último imóvel que foi inserido.

Eu pus no código o que tinha tentado:

//if (isset($_POST['id_para']) $id_para = $_POST['id_para'];

Penso estar correcto, não? Mas acontece o que referi.

Até aí apliquei o isset, mas a partir daí não estou a conseguir.

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Tenho estado aqui numa batalha com isto. E fiz o que sei até aqui:

<?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>Imoveis | Resultados da Pesquisa</title>
<body>

<div class="visualiza">

<?php

require 'config/connect.php';

$sqlz   = mysql_query("SELECT * FROM imoveis WHERE estado = 1 OR estado = 3");
$record = mysql_fetch_assoc($sqlz);


//Max mostrado por pag
$per_page = 4;

//GET var start para extrair resultados na BD
if (!isset($_GET['start']))
    $start = 0;
else
    $start = (int) $_GET['start'];

//Contar registos
if (!isset($_SESSION['nreg'])) {
    $registos_count = mysql_num_rows(mysql_query("SELECT i.*, c.descricao, m.descricao, p.designacao
                                                        FROM imoveis AS i
                                                        INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                        INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                        INNER JOIN para AS p ON i.id_para = p.id_para
                                                        WHERE i.estado = 1 OR i.estado = 3"));
} else {
    $registos_count = $_SESSION['nreg'];
}

//Contar maximo de pags
$max_pages = $registos_count / $per_page;

//if (!$start)
//    $start = 0;

//Mostrar resultados - De 0 ate ao nr que queremos mostrar por pagina
if (!isset($_POST['accao'])) {
    if (!isset($_SESSION['pesq'])) {
        $local_query = "SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                                                    FROM imoveis AS i
                                                    INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                    INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                    INNER JOIN para AS p ON i.id_para = p.id_para
                                                    WHERE (
                                                        i.estado = 1 OR i.estado = 3
                                                            )
                                                    ORDER BY i.id DESC LIMIT $start, $per_page";
    } else {
        $local_query = $_SESSION['pesq'] . " ORDER BY id DESC LIMIT $start, $per_page";
        
    }
    $get   = mysql_query($local_query);
    $linha = mysql_fetch_array($get);
    
    echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linha['Imagem1'] . "' alt='' />
                </a>
             ";
    
    echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $linha['dis'] . " - " . $linha['cons'] . " - " . $id_freguesia . "</strong></font><br><br>";
    
    
    echo "Tipo de Negócio: " . $linha['negocio'] . "<br>";
    echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
    
    echo "</div></div>";
    
}


?>

<?php
if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
   
    $pesq = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3) ";
    
    //Compra ou Arrendamento
    if (!empty($_POST['id_para'])) {
        $pesq .= "AND id_para = '" . $_POST['id_para'] . "' ";
    }
    
    //Habitacao ou Comercial             
    if (!empty($_POST['id_tpimovel'])) {
        $pesq .= "AND id_tpimovel = '" . $_POST['id_tpimovel'] . "' ";
    }
    
    //Estado (Em Construcao, Novo, Renovado ou Usado)                  
    if (!empty($_POST['estado'])) {
        $pesq .= "AND id_estado = '" . $_POST['estado'] . "' ";
    }
    
    //Quartos
    if (!empty($_POST['quartos'])) {
        $pesq .= "AND id_quarto = '" . $_POST['quartos'] . "' ";
    }
    
    //Distritos
    if (!empty($_POST['distrito'])) {
        $pesq .= "AND id_distrito = '" . $_POST['distrito'] . "' ";
    }
    
    //Referência (id)
    if (!empty($_POST['referencia'])) {
        $pesq .= "AND id = '" . mysql_real_escape_string($_POST['referencia']) . "' ";
    }
    
    
    //Compra ou Arrendamento com selecção do preço minimo e preco máximo
    if (!empty($_POST['id_para']) && !empty($_POST['preco_min']) && !empty($_POST['preco_max'])) {
        $pesq .= "AND montante BETWEEN ROUND('" . $_POST['preco_min'] . "',0) AND ROUND('" . $_POST['preco_max'] . "',0) ";
    }
    
    //Habitacao ou Comercial com selecção da Tipologia
    if (!empty($_POST['id_tpimovel']) && !empty($_POST['tipologia'])) {
        $pesq .= "AND id_tipologia = '" . $_POST['tipologia'] . "' ";
    }
    
    //Preenchimento de todos os campos seleccionados
    if (!empty($_POST['id_para']) && !empty($_POST['preco_min']) && !empty($_POST['preco_max']) && !empty($_POST['id_tpimovel']) && !empty($_POST['tipologia']) && !empty($_POST['estado']) && !empty($_POST['quartos']) && !empty($_POST['distrito']) && !empty($_POST['referencia'])) {
        $pesq = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3) 
                         AND id_para = '" . $_POST['id_para'] . "' 
                         AND montante BETWEEN ROUND('" . $_POST['preco_min'] . "',0) AND ROUND('" . $_POST['preco_max'] . "',0) 
                         AND id_tpimovel = '" . $_POST['id_tpimovel'] . "' 
                         AND id_tipologia = '" . $_POST['tipologia'] . "' 
                         AND id_estado = '" . $_POST['estado'] . "' 
                         AND id_quarto = '" . $_POST['quartos'] . "' 
                         AND id_distrito = '" . $_POST['distrito'] . "' 
                         AND id = '" . mysql_real_escape_string($_POST['referencia']) . "' ";
        
    }
    
    
    
    
    if (empty($pesq)) {
        echo "<br><br><br><p class='cz' align='center'>Não foram encontrados resultados.</p><br>";
        
    }
    echo $pesq;
    
    
    
    @$_SESSION['pesq'] = $pesq;
    //if (isset($_SESSION['pesq'])) $pesq = $_SESSION['pesq'];
    //echo "pesq: " .$pesq;
    $iqrPesquisa      = @mysql_query($pesq);
    $registos_count   = @mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (@mysql_num_rows($iqrPesquisa) == '0') {
        echo "<br><br>";
        echo "<p class='cz' align='center'>Não foram encontrados resultados.</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = @mysql_fetch_assoc($iqrPesquisa)) {
            $id             = $linhaPesquisa['id'];
            $id_para        = $linhaPesquisa['id_para'];
            $id_tpimovel    = $linhaPesquisa['id_tpimovel'];
            $id_tipologia   = $linhaPesquisa['id_tipologia'];
            $id_categoria   = $linhaPesquisa['id_categoria'];
            $id_estado      = $linhaPesquisa['id_estado'];
            $quartos        = $linhaPesquisa['id_quarto'];
            $area_util      = $linhaPesquisa['area_util'];
            $area_bruta     = $linhaPesquisa['area_bruta'];
            $area_terreno   = $linhaPesquisa['area_terreno'];
            $montante       = $linhaPesquisa['montante'];
            $id_distrito    = $linhaPesquisa['id_distrito'];
            $id_concelho    = $linhaPesquisa['id_concelho'];
            $id_freguesia   = $linhaPesquisa['id_freguesia'];
            $mini_descricao = $linhaPesquisa['mini_descricao'];
            $Imagem1        = $linhaPesquisa['Imagem1'];
            
            $contador++;
            if ($contador > $per_page)
                break;
?>
               
                <?php
            
            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' alt='' />
                </a>
             ";
            
?>

<?php
            
            $result = mysql_query("SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                            FROM imoveis AS i
                            INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                            INNER JOIN marca AS m ON i.id_concelho = m.codigo
                            INNER JOIN para AS p ON i.id_para = p.id_para
                            WHERE i.estado = 1 OR i.estado = 3
                            ORDER BY i.id DESC");
            
            $row = mysql_fetch_array($result);
            
            
            
            echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $row['dis'] . " - " . $row['cons'] . " - " . $id_freguesia . "</strong></font><br><br>";
            
            
            echo "Tipo de Negócio: " . $row['negocio'] . "<br>";
            echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
            
            echo "</div></div>";
            
?>
               <?php
        }
    }
}


?>

<div class="pesquisa_pagee">

     <?php

//Anterior e Seguinte

$prev = $start - $per_page;
$next = $start + $per_page;
//    if ( $registos_count>$per_page){
//Mostrar Anterior
if (!($start <= 0) && $registos_count > $per_page)
    echo " <a href='pesquisa_imoveis.php?start=$prev'>Anterior</a> ";

//Mostrar o nr de pags

//Var para a primeira pag
$i = 1;

for ($x = 0; $x < $registos_count; $x += $per_page) {
    if ($start != $x)
        echo " <a href='pesquisa_imoveis.php?start=$x'>$i</a>";
    else
        echo " <a href='pesquisa_imoveis.php?start=$x'><b>$i</b></a> ";
    $i++;
}

//Mostrar Seguinte
if (!($start >= $registos_count - $per_page))
    echo " <a href='pesquisa_imoveis.php?start=$next'>Seguinte</a> ";
//}


?>


</div>
</div>

</div> <!-- div visualiza -->

</body>
</html>

Reparei agora que a linha do Tipo de imóvel está a passar a informação errada:

http://img51.imageshack.us/img51/2549/pesqh.jpg

O 1 é o que aparece depois de fazermos a pesquisa no form;

O 2 é o saber mais (informação detalhada do imóvel), aqui está correcta a informação.

Actualizei para o INNER JOIN e a informação do concelho, distrito está a passar correcta, mas essa do Tipo de Imóvel não e não estou a ver o porquê. Porque não está a passar o valor correcto aqui:

echo "Tipo de Negócio: ".$linha['negocio']."<br>";

Fiz as alterações e os melhoramentos que sabia. A partir daqui preciso da vossa ajuda.

Desde já, agradeço a atenção.

Obrigado pela ajuda.

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Apaga o bloco depois de:

//Preenchimento de todos os campos seleccionados

Com o que tens antes ele acaba por construir essa string (se n o faz é pq tens mal escrito).

if (empty($pesq)) {

$pesq nunca é vazio. Não vale a pena isto.

@$_SESSION['pesq'] = $pesq;

Tira o @. O mesmo para os a seguir.

WTF?!?! Estás mm a trabalhar para eficiência?

?>
               
                <?php
           
            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' alt='' />
                </a>
             ";
           
?>

<?php


            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' alt='' />
                </a>
             ";

OR (o meu favorito)

?>
<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=<?php echo $id ?>'>
                    <img width='150' height='150' src='area/img/Imoveis/<?php echo $linhaPesquisa['Imagem1'] ?>' alt='' />
                </a>
<?php

Ainda há mais mas já dei o litro por agora. Tenho de ir.

De qq modo, tiveste um avanço aceitável até esta versão a partir da anterior. Parabéns  👍 .

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Obrigado brunoais.

Pois, realmente aquele bloco estava ali desnecessariamente e já o retirei, pois como referiste acaba por construir o resto da query.

Pois aqui o $pesq nunca é vazio, exacto. Aqui o que queria fazer era quando se carregasse no botão para pesquisar aparecer que não foram encontrados resultados, em vez de me retornar uma listagem dos imóveis todos, que é o que me está a acontecer neste momento. Como procedo para tal?

Já retirei os @.

Sim a ideia seria estar a trabalhar para eficiência. Colocaste esses 3 blocos repetidos, mas eu no código, pelo menos que veja, só tenho 2. Tanto que colocaste todos como $linhaPesquisa e só tenho $linhaPesquisa e $linha. Tinha estes dois, porque a ideia seria um que é para quando se carrega na paginação não perder o conteúdo e o outro é mesmo o da pesquisa. Agora com as modificações essa primeira parte da paginação não está a funcionar, secalhar até nem é preciso isso, mas se tirar não me aparece nada quando clico na paginação. Como resolvo isto?

Na query com os INNER JOIN que coloquei, utilizei alias. E as variáveis que utilizei para retornar o valor desse alias, retorna-me que as variáveis não foram declaradas e não percebo porquê. Aliás, neste momento não está a obter nada das variáveis daquele bloco. E agora está a dar um warning aqui nesta linha:

$linha = mysql_fetch_array($get);

Conforme a imagem:

http://img198.imageshack.us/img198/3634/warningjz.jpg

Outra coisa estranha é quando faço retroceder (antes não acontecia) o conteúdo perde-se, conforme a imagem:

http://img210.imageshack.us/img210/9470/docexp.jpg

E continuo com o mesmo problema da imagem anterior não estar a passar certo aqui:

echo "Tipo de Negócio: ".$linha['negocio']."<br>";

O código está assim:

<?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>Imoveis | Resultados da Pesquisa</title>
<body>

<div class="visualiza">

<?php

require 'config/connect.php';

//Max mostrado por pag
$per_page = 4;

//GET var start para extrair resultados na BD
if (!isset($_GET['start']))
    $start = 0;
else
    $start = (int) $_GET['start'];

//Contar registos
if (!isset($_SESSION['nreg'])) {
    $registos_count = mysql_num_rows(mysql_query("SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                                                        FROM imoveis AS i
                                                        INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                        INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                        INNER JOIN para AS p ON i.id_para = p.id_para
                                                        WHERE i.estado = 1 OR i.estado = 3
                                                        ORDER BY i.id DESC"));
} else {
    $registos_count = $_SESSION['nreg'];
}


//Conta maximo de pags
$max_pages = $registos_count / $per_page;

//Mostrar resultados - De 0 ate ao nr que queremos mostrar por pagina

//Nesta parte quando clico na paginação, o que coloquei com alias não aparece e manda warnings a dizer que as variáveis não foram declaradas

if (!isset($_POST['accao'])) {
    if (!isset($_SESSION['pesq'])) {
        $local_query = "SELECT i.*, c.codigo, c.descricao AS dis, m.codigo, m.descricao AS cons, p.id_para, p.designacao AS negocio
                                                        FROM imoveis AS i
                                                        INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                                                        INNER JOIN marca AS m ON i.id_concelho = m.codigo
                                                        INNER JOIN para AS p ON i.id_para = p.id_para
                                                        WHERE (
                                                               i.estado = 1 OR i.estado = 3
                                                              )
                                                        ORDER BY i.id DESC LIMIT $start, $per_page";
    } else {
        $local_query = $_SESSION['pesq'] . " ORDER BY id DESC LIMIT $start, $per_page";
        
    }
    $get   = mysql_query($local_query);
    $linha = mysql_fetch_array($get);
    
    
    //Aqui era para quando se clicar na paginação visualizar-se à mesma a informação e não que ficasse sem conteúdo
    
    echo "<div class='content_pesquisa_txt1'>
                    <a href='visualiza_imovel.php?id='" . $linha['id'] . "''>
                        <img width='150' height='150' src='area/img/Imoveis/" . $linha['Imagem1'] . "' alt='' />
                    </a>
                 ";
    
    echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $linha['id_tipologia'] . " " . $linha['id_categoria'] . " - " . $linha['dis'] . " - " . $linha['cons'] . " - " . $linha['id_freguesia'] . "</strong></font><br><br>";
    
    
    echo "Tipo de Negócio: " . $linha['negocio'] . "<br>";
    echo "Estado: " . $linha['id_estado'] . "<br>";
    echo "Área Útil: " . $linha['area_util'] . " <label>m²</label><br>";
    echo "Área Bruta: " . $linha['area_bruta'] . " <label>m²</label><br>";
    echo "Área Terreno: " . $linha['area_terreno'] . " <label>m²</label><br>";
    echo "Valor: " . $linha['montante'] . " <label>€</label>";
    echo "<br><br>";
    
    echo "<a href='visualiza_imovel.php?id='" . $linha['id'] . "'' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
    
    echo "</div></div>";
    
}


?>

<?php
if (isset($_POST['accao']) && $_POST['accao'] == 'pesquisar') {
    $pesq = "SELECT * FROM imoveis WHERE (estado = 1 OR estado = 3) ";
    
    //Compra ou Arrendamento
    if (!empty($_POST['id_para'])) {
        $pesq .= "AND id_para = '" . $_POST['id_para'] . "' ";
    }
    
    //Habitacao ou Comercial             
    if (!empty($_POST['id_tpimovel'])) {
        $pesq .= "AND id_tpimovel = '" . $_POST['id_tpimovel'] . "' ";
    }
    
    //Estado (Em Construcao, Novo, Renovado ou Usado)                  
    if (!empty($_POST['estado'])) {
        $pesq .= "AND id_estado = '" . $_POST['estado'] . "' ";
    }
    
    //Quartos
    if (!empty($_POST['quartos'])) {
        $pesq .= "AND id_quarto = '" . $_POST['quartos'] . "' ";
    }
    
    //Distritos
    if (!empty($_POST['distrito'])) {
        $pesq .= "AND id_distrito = '" . $_POST['distrito'] . "' ";
    }
    
    //Referência (id)
    if (!empty($_POST['referencia'])) {
        $pesq .= "AND id = '" . mysql_real_escape_string($_POST['referencia']) . "' ";
    }
    
    
    //Compra ou Arrendamento com selecção do preço minimo e preco máximo
    if (!empty($_POST['id_para']) && !empty($_POST['preco_min']) && !empty($_POST['preco_max'])) {
        $pesq .= "AND montante BETWEEN ROUND('" . $_POST['preco_min'] . "',0) AND ROUND('" . $_POST['preco_max'] . "',0) ";
    }
    
    //Habitacao ou Comercial com selecção da Tipologia
    if (!empty($_POST['id_tpimovel']) && !empty($_POST['tipologia'])) {
        $pesq .= "AND id_tipologia = '" . $_POST['tipologia'] . "' ";
    }
    
    $pesq .= "ORDER BY id DESC";
    
    
    // echo $pesq;     
    
    $_SESSION['pesq'] = $pesq;
    $iqrPesquisa      = mysql_query($pesq);
    $registos_count   = mysql_num_rows($iqrPesquisa);
    $_SESSION['nreg'] = $registos_count;
    
    if (mysql_num_rows($iqrPesquisa) == 0) {
        echo "<br><br>";
        echo "<p class='cz' align='center'>Não foram encontrados resultados.</p>";
        echo "<br><br>";
        echo "<br><br>";
    } else {
        $contador = 0;
        while ($linhaPesquisa = mysql_fetch_assoc($iqrPesquisa)) {
            $id             = $linhaPesquisa['id'];
            $id_para        = $linhaPesquisa['id_para'];
            $id_tpimovel    = $linhaPesquisa['id_tpimovel'];
            $id_tipologia   = $linhaPesquisa['id_tipologia'];
            $id_categoria   = $linhaPesquisa['id_categoria'];
            $id_estado      = $linhaPesquisa['id_estado'];
            $quartos        = $linhaPesquisa['id_quarto'];
            $area_util      = $linhaPesquisa['area_util'];
            $area_bruta     = $linhaPesquisa['area_bruta'];
            $area_terreno   = $linhaPesquisa['area_terreno'];
            $montante       = $linhaPesquisa['montante'];
            $id_distrito    = $linhaPesquisa['id_distrito'];
            $id_concelho    = $linhaPesquisa['id_concelho'];
            $id_freguesia   = $linhaPesquisa['id_freguesia'];
            $mini_descricao = $linhaPesquisa['mini_descricao'];
            $Imagem1        = $linhaPesquisa['Imagem1'];
            
            $contador++;
            if ($contador > $per_page)
                break;
?>
               
                <?php
            
            echo "<div class='content_pesquisa_txt1'>
                <a href='visualiza_imovel.php?id=$id'>
                    <img width='150' height='150' src='area/img/Imoveis/" . $linhaPesquisa['Imagem1'] . "' alt='' />
                </a>
             ";
            
?>

<?php
            
            $result = mysql_query("SELECT i.*, c.descricao AS dis, m.descricao AS cons, p.designacao AS negocio
                            FROM imoveis AS i
                            INNER JOIN categoria AS c ON i.id_distrito = c.codigo
                            INNER JOIN marca AS m ON i.id_concelho = m.codigo
                            INNER JOIN para AS p ON i.id_para = p.id_para
                            WHERE i.estado = 1 OR i.estado = 3
                            ORDER BY i.id DESC");
            
            $row = mysql_fetch_array($result);
            
            
            
            echo "<div class='content_pesquisa_txt'><font color='#BC202C'><strong>" . $id_tipologia . " " . $id_categoria . " - " . $row['dis'] . " - " . $row['cons'] . " - " . $id_freguesia . "</strong></font><br><br>";
            
            
            echo "Tipo de Negócio: " . $row['negocio'] . "<br>";
            echo "Estado: " . $id_estado . "<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='visualiza_imovel.php?id=$id' target='_self'><font color='#BC202C'>+ Mais Informação</font></a>";
            
            echo "</div></div>";
            
?>
               <?php
        }
    }
}


?>

<div class="pesquisa_pagee">

     <?php

//Anterior e Seguinte

$prev = $start - $per_page;
$next = $start + $per_page;
//    if ( $registos_count>$per_page){
//Mostrar Anterior
if (!($start <= 0) && $registos_count > $per_page)
    echo " <a href='pesquisa_imoveis.php?start=$prev'>Anterior</a> ";

//Mostrar o nr de pags

//Var para a primeira pag
$i = 1;

for ($x = 0; $x < $registos_count; $x += $per_page) {
    if ($start != $x)
        echo " <a href='pesquisa_imoveis.php?start=$x'>$i</a>";
    else
        echo " <a href='pesquisa_imoveis.php?start=$x'><b>$i</b></a> ";
    $i++;
}

//Mostrar Seguinte
if (!($start >= $registos_count - $per_page))
    echo " <a href='pesquisa_imoveis.php?start=$next'>Seguinte</a> ";
//}


?>

</div>
</div>

</div> <!-- div visualiza -->

</body>
</html>

Obrigado pela ajuda.

EDIT: A parte da página expirada verifiquei que dá para resolver de duas situações e gostaria de saber qual a que aconselham?

1- A colocação de:

session_cache_limiter('private_no_expire');

antes de criar a sessão (

session_start();

).

2 - Ou:

header("Cache-Control: no-cache");

depois da minha ligação à BD (neste caso:

require 'config/connect.php';

)

echo ($knowledge != $sharing) ? "Serves no purpose!" : "Thank you for your help. It was very precious.";

Link to comment
Share on other sites

Na query com os INNER JOIN que coloquei, utilizei alias. E as variáveis que utilizei para retornar o valor desse alias, retorna-me que as variáveis não foram declaradas e não percebo porquê. Aliás, neste momento não está a obter nada das variáveis daquele bloco. E agora está a dar um warning aqui nesta linha:

$linha = mysql_fetch_array($get);

Conforme a imagem:

http://img198.imageshack.us/img198/3634/warningjz.jpg

$local_query não é SQL válido, tem erro de sintaxe.

Outra coisa estranha é quando faço retroceder (antes não acontecia) o conteúdo perde-se, conforme a imagem:

http://img210.imageshack.us/img210/9470/docexp.jpg

...

EDIT: A parte da página expirada verifiquei que dá para resolver de duas situações e gostaria de saber qual a que aconselham?

1- A colocação de:

session_cache_limiter('private_no_expire');

antes de criar a sessão (

session_start();

).

2 - Ou:

header("Cache-Control: no-cache");

depois da minha ligação à BD (neste caso:

require 'config/connect.php';

)

Usa o cache-control (parece-me ser melhor mas... sem certezas).

"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.