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, penso 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 deste if:
<?php if(isset($_POST['accao']) && $_POST['accao'] == 'pesquisar'){
....
}
Porque penso que está com vários if's desnecessários, 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 conto com a vossa ajuda.
Obrigado pela vossa ajuda e atenção,
Com os melhores cumprimentos,
AndreLC