Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wellington09

[Resolvido] logica

Recommended Posts

Pessoal é o seguinte eu quero fazer uma busca no meu site de imovel que eu estou criando certo e gostaria que alguem só me desse uma luz pra caminhar não o codigo por exemplo

 

eu tenho as combos

 

Estado

Todos

SP

RJ

MG

 

Cidade

Todas

aqui vai a cidade referente o estado clicado acima

 

Tipo

Todos

Apartamento

Casa

Comercial

Terreno

Sitio

 

Operacao

Todos

Aluguel

Destaque

Lancamento

Venda

 

e ect. como combo de busca por VALOR,ORDEM,DORMITORIO

 

Só que o problema é assim se a pessoa escolher o tipo do imovel eu sei que deve fazer assim

SELECT * FROM tbimoveis WHERE tipo='$tipo

que ai ele busca o tipo referente ao que foi enviado pelo formulario e se ela escolher a operacao sei q devo fazer assim

SELECT * FROM tbimoveis WHERE (tipo='$tipo) AND (operacao='$toperacao')

então a pergunta é o seguinte eu teho q fazer select para todos as opções das combos e fazer varios IF para todas as combos ?

 

por exemplo:

Se tipo e operacao

então monstre os imoveis onde tipo e operacao são iguais ao que esta na variavel

 

Se tipo = 'todos'

Se tipo e dormitorio

Se tipo e valor

Se tipo e preço

Se tipo = 'todos' e operacao='todos'

e ai vai

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não precisa ser tão "literal"..

você pode ir apenas concatenando a string da query... à cada valor enviado..

 

retira as partes iguais.. como:

SELECT * FROM tbimoveis

isso sempre vai ter, certo ? então deixa fora dos if..

 

ai

se dormitorio != ''

$sql .= " dormitorio = '{$_POST['dormitorio']}' "; ..

ai você vê qndo concatena os AND.. e como coloca o WHERE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara eu não consegui se você puder me ajudar eu fiz isso e nem deu em nada

 

<?php

include ("../php/conecta.php");

 

$tipo = $_POST['tipo'];

$operacao = $_POST['operacao'];

 

$sql = "SELECT * FROM tbimoveis";

 

if(($tipo !='todos'))

{

$sql .= "WHERE tipo='$tipo'";

 

$consulta = mysql_query($sql)or die (mysql_error());

for($i=0;$result=mysql_fetch_array($consulta);$i++)

{

?>

<strong>Tipo :</strong>

<label><?php echo $result['tipo'];?></label>

<br />

<strong>Operação :</strong>

<label><?php echo $result['operacao'];?></label>

<?php

}//Fecha FOR

}//Fecha IF

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

fecha o if antes do laço..

if(($tipo !='todos'))
{
$sql .= " WHERE `tipo` = '{$tipo}' ";
}//fecha for

$consulta = mysql_query($sql)or die (mysql_error());

for($i=0;$result=mysql_fetch_array($consulta);$i++)
{
Como assim, não deu em nada ??

Compartilhar este post


Link para o post
Compartilhar em outros sites

quando eu disse que não deu em nada quiz dizer q apareceu uma mensagem de erro

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='apartamento'' at line 1

 

 

e eu ja fechei o if antes do FOR (loop) e continua aparecendo a mesma mensagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloca um espaço ' ' no começo das variaveis que forem concatenar

 

$sql = 'select * from tabela';

$sql .= 'where id = "1"';

 

$sql vai ser select * from tabelawhere id = '1';

 

entendeu? o certo seria:

 

$sql = 'select * from tabela';

$sql .= ' where id = "1"';

 

ou

 

$sql = 'select * from tabela ';

$sql .= 'where id = "1"';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora para responder mas é q eu fiquei doente , ainda estou neh , mas hj to bem melhor então...

fiz aqui e deu certinho só q se eu tentar colocar o ORDER BY operacao ele da a seguinte mensagem de erro

 

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BY operacao' at line 1

 

CODIGO PHP

 

<?php

include ("../php/conecta.php");

 

$estado = $_POST['estado'];

$cidade = $_POST['cidade'];

$tipo = $_POST['tipo'];

$operacao = $_POST['operacao'];

$dormitorio = $_POST['dormitorio'];

$ordem = $_POST['ordem'];

 

$sql = "SELECT * FROM tbimoveis "; /* coloquei um espaço vazio ' ' depois da tabela tbimoveis para não juntar com o WHERE EX: tbimoveisWHERE*/

 

if(($estado !='todos') || ($cidade !='todos') || ($tipo !='todos') || ($operacao !='todos') || ($ordem !='todos'))

{

$sql .= "WHERE ";/* coloquei um espaço vazio ' ' aqui tb*/

 

if($estado != 'todos')

{

$sql .= "estado='$estado' ";/* coloquei um espaço vazio ' ' aqui tb*/

}

if($cidade != 'todos')

{

$sql .= "AND cidade='$cidade' ";/* coloquei um espaço vazio ' ' aqui tb*/

}

if($tipo != 'todos')

{

$sql .= "AND tipo='$tipo' ";/* coloquei um espaço vazio ' ' aqui tb*/

}

if($operacao != 'todos')

{

$sql .= "AND operacao='$operacao' ";/* coloquei um espaço vazio ' ' aqui tb*/

}

if($ordem != 'todos')

{

$sql .= "ORDE BY operacao";/* coloquei um espaço vazio ' ' aqui tb*/

}

}//Fecha IF

if(($estado =='todos') || ($cidade =='todos') || ($tipo =='todos') || ($operacao =='todos') || ($dormitorio =='todos') || ($ordem =='todos'))

{

$consulta = mysql_query($sql)or die (mysql_error());

for($i=0;$result=mysql_fetch_array($consulta);$i++)

{

?>

<strong>Ref :</strong>

<label><?php echo $result['ref'];?></label>

<br />

<strong>Tipo :</strong>

<label><?php echo $result['tipo'];?></label>

<br />

<strong>Operação :</strong>

<label><?php echo $result['operacao'];?></label>

<br />

<?php

}//Fecha FOR

}

?>

 

Agora se eu tirar o

|| ($ordem !='todos')

ele volta a funcionar mas sem ter ordenação

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que você vai ter outro problema. Imagina que o usuário não escolheu a primeira opção e escolheu a segunda. Olha como ficaria o SELECT.

SELECT * FROM tbimoveis WHERE AND cidade='$cidade'

Vai dar erro, porque tem um AND que não devia.

 

Fiz uma busca muito parecida com esta. Olha o código

 

function consulta( $tabela , $dados = array(), $ordem = '', $campos = '*'){
	
	$sql = "SELECT $campos FROM $tabela WHERE ";
	$count = count($dados) - 1;
	$x = 0;
	foreach ($dados as $chave => $valor) {
		$sql.= "$chave = '$valor'";
		if ($x < $count) {
			$sql.= ' AND ';
			$x++;
		}
	}
		if (!empty($ordem)) $sql.= " ORDER BY $ordem ";
	$qry = mysql_query($sql) or die(mysql_error());
	return $qry;
}

Na hora de fazer a busca você faz assim:

foreach ($_POST as $chave => $valor)  if (!empty($_POST[$chave] && $chave != 'ordem')) $dados[$chave] = $valor;
 // testa se veio valor do campo. Caso tenha vindo, adiciona na variável $dados o valor.
// agora você vai usar a função

$tabela = 'tbimoveis';

$x = consulta($tabela,$dados);

Consulta pronta. Espero ter ajudado.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um echo na $sql, para vermos como que tá montando..

e é ORDER, e não ORDE

$sql .= " ORDER BY operacao";/* coloquei um espaço vazio ' ' aqui tb*/
E tem que tomar cuidado com os AND mesmo..

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu tenho uns problemas para resolver mas no finalzinho da tarde eu passo aqui pra analizar melhor , estou avisando só no caso de vcs verem q eu dei uma sumida + no final da tarde eu passo de novo aqui tem muita coisa pra eu resolver + brigadão por enquanto vlw té +

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa a sumida no forum é q tava com uns problemão mas agora ta tudo resolvido se puderem me ajudar fico agradecido.

 

Bem o problema então era o seguinte consigo fazer as buscas normalmente mas não consigo ordena-las ...na hora de fazer a ordenação da a seguinte mensagem de erro

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY operacao' at line 1'

 

bem eu coloquei os ECHOS nas variaveis sql e ficou assim

SELECT * FROM tbimoveis WHERE ORDER BY operacaoSELECT * FROM tbimoveis WHERE ORDER BY operacaoYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ORDER BY operacao' at line 1

 

meu codigo de busca segue abaixo

 

<?php

include ("../php/conecta.php");

 

$estado = $_POST['estado'];

$cidade = $_POST['cidade'];

$tipo = $_POST['tipo'];

$operacao = $_POST['operacao'];

$dormitorio = $_POST['dormitorio'];

$ordem = $_POST['ordem'];

 

$sql = "SELECT * FROM tbimoveis ";

 

if(($estado !='todos') || ($cidade !='todos') || ($tipo !='todos') || ($operacao !='todos') || ($ordem !='todos'))

{

$sql .= "WHERE ";

 

if($estado != 'todos')

{

echo $sql .= "estado='$estado' ";

}

if($cidade != 'todos')

{

echo $sql .= "AND cidade='$cidade' ";

}

if($tipo != 'todos')

{

echo $sql .= "AND tipo='$tipo' ";

}

if($operacao != 'todos')

{

echo $sql .= "AND operacao='$operacao' ";

}

if($ordem != 'todos')

{

echo $sql .= "ORDER BY operacao";

}

echo $sql;

}//Fecha IF

if(($estado =='todos') || ($cidade =='todos') || ($tipo =='todos') || ($operacao =='todos') || ($dormitorio =='todos') || ($ordem =='todos'))

{

$consulta = mysql_query($sql)or die (mysql_error());

for($i=0;$result=mysql_fetch_array($consulta);$i++)

{

?>

<strong>Ref :</strong>

<label><?php echo $result['ref'];?></label>

<br />

<strong>Tipo :</strong>

<label><?php echo $result['tipo'];?></label>

<br />

<strong>Operação :</strong>

<label><?php echo $result['operacao'];?></label>

<br />

<?php

}//Fecha FOR

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é pq o WHERE ficou vazio..

refaça:

if(($estado !='todos') || ($cidade !='todos') || ($tipo !='todos') || ($operacao !='todos'))
{
$sql .= "WHERE ";


if($estado != 'todos')
{
//.. segue tudo normal..
ai, basta você retirar a clásula que ordena, de dentro desse IF..

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso é pq o WHERE ficou vazio..

refaça:

if(($estado !='todos') || ($cidade !='todos') || ($tipo !='todos') || ($operacao !='todos'))
{
$sql .= "WHERE ";


if($estado != 'todos')
{
//.. segue tudo normal..
ai, basta você retirar a clásula que ordena, de dentro desse IF..

 

Nossa que falta de atenção era isso mesmo cara valeu ...era só colocar fora do IF e eu deixei dentro brigadão pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.