Ir para o conteúdo
AndreLC

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

Mensagens Recomendadas

AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

À 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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

À 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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

Qual barraca?

Tens isto, n tens?

http://php.net/manual/en/function.isset.php


"[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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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:

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

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  :thumbsup:.


"[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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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:

warningjz.jpg

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

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.";

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

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:

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:

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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

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

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

Válido é, mas já vi o que deve faltar. Falta a parte do alias, está como id e é i.id, possívelmente.

Foi o que também me pareceu mais viável de utilizar e é o que estou a utilizar (o cache-control).

Continuo com aqueles problemas de não estar a passar a informação correctamente como mostrei na imagem, por exemplo, no Tipo de Negócio. Vou fazer uma pequena pausa do lado do servidor.

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)

O que começo por fazer para trabalhar nesta parte? Obrigado.


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

O que começo por fazer para trabalhar nesta parte? Obrigado.

Estuda o objeto XMLHttpRequest(). Não esquecer os seus atributos e metodos onreadyStateChange, send(), open(), responseText.

Estuda tb sobre o JSON. Verifica como lidar com objetos js gerados a partir de JSON (ler atributos). estuda o objeto JSON. Isto serve para começar.


"[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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

Estuda o objeto XMLHttpRequest(). Não esquecer os seus atributos e metodos readyStateChange, send(), open(), responseText.

Estuda tb sobre o JSON. Verifica como lidar com objetos js gerados a partir de JSON (ler atributos). estuda o objeto JSON. Isto serve para começar.

O readyStateChange deve ser onreadyStateChange, correcto?

Estive a estudar um pouco e pelo que vi JSON é como uma alternativa para XML, então a ideia era fazer com que o select dali fosse XML é isso?

Nuns exemplos que vi reparei que em JSON estavam a utilizar também o innerHTML e não o método createElement.

Confused.

Explica-me melhor, se puderes, por favor. Pois a deadline está aí e numa primeira fase queria deixar clean esta parte do lado do cliente.

Agradeço a ajuda e a atenção que tens prestado.


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
brunoais

O readyStateChange deve ser onreadyStateChange, correcto?

Sim... erro meu.

Estive a estudar um pouco e pelo que vi JSON é como uma alternativa para XML, então a ideia era fazer com que o select dali fosse XML é isso?

JSON, XML, são só 2 maneiras diferentes de enviar informação. Para ambos existe um parser que transforma em algo que o browser sabe ler. A única diferença é q o XML veio bem antes do JSON.

Nuns exemplos que vi reparei que em JSON estavam a utilizar também o innerHTML e não o método createElement.

Confused.

Usar o innerHTML para dados recebidos pela rede é uma falha de segurança grande.

Se tiveres um ataque "man in the middle" ele pode alterar os dados que recebes e meter coisas como tags <img> que acedem aonde n devem. O resultado pode ser teres gente vítimas de ataques (se n me engano é chamado XSS).

Se usares os métodos do DOM e usares JSON ou XML exclusivamente para transmitir dados, torna-se impossível ser enviado algo que não estava previsto. Se existir um ataque "man in the middle" já estás mais seguro e até muito mais seguro se só tiveres texto para mostrar ao utilizador.

Explica-me melhor, se puderes, por favor. Pois a deadline está aí e numa primeira fase queria deixar clean esta parte do lado do cliente.

Hum... Muito disto vem tb de prática, análise e estudo.

Agradeço a ajuda e a atenção que tens prestado.

D nda. De qq modo já devias de ter o básico disto qd enviaste a aplicação para esse emprego/trabalho.


"[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%.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AndreLC

Obrigado pela explicação. Percebi a ideia para evitar ataques Cross-site scripting.

Mas lá está, estudar estou sempre a estudar e a aprender, daí querer optimizar isto, porque da maneira como está e como referiste e muito bem: 'está horrível'. Também não paro em termos de analisar o que posso ter feito de maneira menos elegante e agora querer fazer melhor tanto em termos de segurança bem como limpeza de código desnecessário e fazer da melhor maneira possível e a prática vem disso mesmo e com a experiência, com a vontade e empenho em fazer melhor e com as vossas sugestões/críticas/exemplos/ajuda.

O que queria era carregar no radio button e aparecer na dropdown diferentes conteúdos, então teria que fazer um xml ou dois? E onde entra o createElement? Estou confuso.

Só queria perceber como tendo um XML, JSON ou AJAX fazer a interligação para que faça aquilo que pretendo...


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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.