Ir para conteúdo

POWERED BY:

Arquivado

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

Cleberson Ramos

Sistema de busca no MySQL

Recommended Posts

Ola galera é o seguinte

 

tenho uma tabela clientes no mysql, e tenho um formulario com 4 campos e uma variável já carregada qdo a página foi aberta.

os campos do form são:

Palavra chave, bairro, categoria e sub_categoria (não esquecendo a variavel que esta armazenada)

 

pois bem, eu preciso fazer que esse formulario traga os resultados nas seguintes condigções:

 

se não foi selcionado nda nem digitado nda no campo palavra chave então tem que buscar todos os dados da tabela foltrando pela area (area é a variavel que foi carregada ao abrir a página) ok se ele digitou uma palavra chave e não selecionou nenhum select então filtre por palavra chave e area, se ele não digitou nada e selecionou um bairro apenas entaum busque por area e bairro, se ele apenas selecionou categoria entaum filtre area e categoria, se ele selecionou categoria e subcategoria então filtre por area categoria e subcategoria, se ele digitou uma palavra chave selecionou um bairro e selecionou uma categoria entaum filtre por palavra chave por bairro e por categoria, nossa já até me perdi, bom só preciso do caminho de como fazer isso

 

fico grato vlw

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Cleberson,

tudo bem?

 

Poste o código do seu formulário, for favor.

 

O que você terá que fazer é criar o seu SQL em partes, isso de acordo com o que foi enviado.

 

Se o usuário digitou só o nome, se você vai ter que verificar se os outros campos estão vazios...

você não pode usar um switch case pois ele verifica uma ação por vez... tem que usar alguns "if"s...

 

qualquer coisa poste ae...

 

abraços,

léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite Cleberson,

tudo bem?

 

Poste o código do seu formulário, for favor.

 

O que você terá que fazer é criar o seu SQL em partes, isso de acordo com o que foi enviado.

 

Se o usuário digitou só o nome, se você vai ter que verificar se os outros campos estão vazios...

você não pode usar um switch case pois ele verifica uma ação por vez... tem que usar alguns "if"s...

 

qualquer coisa poste ae...

 

abraços,

léo

 

Boa noite Leonardo o codigo do formulario

 

CODE
CODE
<form name="form1" method="post" action="resultados.php?area=<?=$area?>">

<table width="100%" border="0" cellspacing="0">

<tr>

<td height="137" valign="top" bgcolor="#D7EDFD"><table width="100%" border="0" align="center" cellspacing="0">

<tr>

<td><span class="style19">| Buscar

Empresas na área

<?=$area1?>

</span></td>

</tr>

<tr>

<td height="145" valign="top"><div align="center">

<table width="98%" border="0" align="center" cellspacing="5" bordercolor="#FFFFFF" bgcolor="#FFFFFF">

 

<tr>

<td width="50%" bgcolor="#FFFFFF" class="txt_azul_bold_gd">Palavra Chave

<label></label></td>

<td width="50%" bgcolor="#FFFFFF" class="txt_azul_bold_gd">Categoria

<label></label></td>

</tr>

<tr>

<td bgcolor="#FFFFFF"><input name="palavra" type="text" class="txt_preto" id="palavra" size="50"></td>

<td bgcolor="#FFFFFF"><select name="categoria" class="txt_preto" id="categoria" onchange="subcat(this.value);">

<option value="">Todas as Categorias</option>

<?

$result_cat = mysql_query("SELECT * FROM categoria WHERE area=$area ORDER BY categoria");

while($row_cat = mysql_fetch_array($result_cat)){

echo "<option value=\"$row_cat[id]\">$row_cat[categoria]</option>";

}

?>

</select></td>

</tr>

<tr>

<td bgcolor="#FFFFFF" class="txt_azul_bold_gd">Bairro

<label></label></td>

<td bgcolor="#FFFFFF" class="txt_azul_bold_gd">Sub Categoria

<label></label></td>

</tr>

<tr>

<td bgcolor="#FFFFFF"><select name="bairro" class="txt_preto" id="bairro">

<option value="">Todos os Bairros</option>

<?

$result = mysql_query("SELECT * FROM bairro ORDER BY 'bairro'");

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

echo "<option value=\"$row[id]\">$row[bairro]</option>";

}

?>

</select></td>

<td bgcolor="#FFFFFF"><div id="subcat">

<select name="sub_categoria" class="txt_preto" id="sub_categoria">

<option selected="selected">Todas as Subcategorias</option>

<option>Selecione uma categoria primeiro</option>

</select>

</div></td>

</tr>

<tr>

<td colspan="2" bgcolor="#FFFFFF" class="txt_azul_bold_gd"><label></label> <label>

<div align="center">

<input name="Submit" type="submit" class="tabela_geral" value="Buscar >>>">

</div>

</label></td>

</tr>

</table>

</div></td>

</tr>

</table></td>

</tr>

</table>

</form>

ah Leonardo a respeito de usar ifs eu até tentei mais n estou acertando usar os ifs pois mesmo diante de muitos ifs a página de resultados vem com todos os resultados n esta filtrando

 

gostaria de saber qual o caminho para se usar o if neste caso

 

grato cleber

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi Leo ao digitar a palavra vai buscar apenas nos campos nome, resumo e descricao

 

segue o estruturado

 

CREATE TABLE `empresas` (

`id_empresas` int(10) NOT NULL auto_increment,

`nome` varchar(255) collate latin1_general_ci default NULL,

`contato` varchar(255) collate latin1_general_ci default NULL,

`endereco` varchar(255) collate latin1_general_ci default NULL,

`bairro` varchar(255) collate latin1_general_ci default NULL,

`telefone` varchar(255) collate latin1_general_ci default NULL,

`site` varchar(255) collate latin1_general_ci default NULL,

`email` varchar(255) collate latin1_general_ci default NULL,

`resumo` text collate latin1_general_ci,

`descricao` text collate latin1_general_ci,

`logo` varchar(255) collate latin1_general_ci default NULL,

`categoria` varchar(255) collate latin1_general_ci default NULL,

`sub_categoria` varchar(255) collate latin1_general_ci default NULL,

`data_cadastro` varchar(255) collate latin1_general_ci default NULL,

`area` varchar(255) collate latin1_general_ci default NULL,

`plano` varchar(255) collate latin1_general_ci default NULL,

PRIMARY KEY (`id_empresas`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=22 ;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Cleberson,

fiz um scriptinho aqui...

tenta ae... depois posta p/ a gente ver direito... mas isso é uma idéia... disso ae você pode pegar as suas sentenças e ir mudando manja...

 

O que você tem que se preocupar é com a normalização desta sua tabela heim... a categoria, seria mais fácil, tem os id da correspondente na tabela de categorias heim... assim tb com sub_categoria, area e plano..

 

<?php

if($_REQUEST["Submit"]<>"")
{
		// Tratamento das variaveis.
		$palavra	   = $_REQUEST["palavra"];
		$categoria	 = $_REQUEST["categoria"];
		$bairro		= $_REQUEST["bairro"];
		$sub_categoria = $_REQUEST["sub_categoria"];
	
		$sql = "";
	
		if($palavra="")
		{	
			$sql=" nome like '%".$palavra."%' or resumo like '%".$palavra."%' or descricao like '%".$palavra."%'";
		}

		if($categoria<>"")
		{	
			if($sql<>"")
			{
				$sql= $sql . " and ";
			}
			$sql = $sql . "categoria like '%".$categoria."%'";
		}

		if($bairro<>"")
		{	
			if($sql<>"")
			{
				$sql= $sql . "and ";
			}
			$sql = $sql . "bairro like '%".$bairro."%'";
		}

		if($sub_categoria<>"")
		{	
			if($sql<>"")
			{
				$sql="and ";
			}
			$sql = $sql . "sub_categoria like '%".$sub_categoria."%'";
		}
		
		if($sql<>"")
		{
			$sql = " where " . $sql;
		}
		
		

	$QryBusca = "Select * from tb_empresa ".$sql." ";
	// depois é só executar...
	// imprime QryBusca para ver o que ele mostra...

}
?>



<form name="form1" method="post" action="resultados.php?area=<?=$area?>">

<table width="100%" border="0" cellspacing="0">
<tr>
<td height="137" valign="top" bgcolor="#D7EDFD"><table width="100%" border="0" align="center" cellspacing="0">
<tr>
<td><span class="style19">| Buscar
Empresas na área
<?=$area1?>
</span></td>
</tr>
<tr>
<td height="145" valign="top"><div align="center">
<table width="98%" border="0" align="center" cellspacing="5" bordercolor="#FFFFFF" bgcolor="#FFFFFF">

<tr>
<td width="50%" bgcolor="#FFFFFF" class="txt_azul_bold_gd">Palavra Chave
<label></label></td>
<td width="50%" bgcolor="#FFFFFF" class="txt_azul_bold_gd">Categoria
<label></label></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><input name="palavra" type="text" class="txt_preto" id="palavra" size="50"></td>
<td bgcolor="#FFFFFF"><select name="categoria" class="txt_preto" id="categoria" onchange="subcat(this.value);">
<option value="">Todas as Categorias</option>
<?
$result_cat = mysql_query("SELECT * FROM categoria WHERE area=$area ORDER BY categoria");
while($row_cat = mysql_fetch_array($result_cat)){
echo "<option value=\"$row_cat[id]\">$row_cat[categoria]</option>";
}
?>
</select></td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="txt_azul_bold_gd">Bairro
<label></label></td>
<td bgcolor="#FFFFFF" class="txt_azul_bold_gd">Sub Categoria
<label></label></td>
</tr>
<tr>
<td bgcolor="#FFFFFF"><select name="bairro" class="txt_preto" id="bairro">
<option value="">Todos os Bairros</option>
<?
$result = mysql_query("SELECT * FROM bairro ORDER BY 'bairro'");
while($row = mysql_fetch_array($result)){
echo "<option value=\"$row[id]\">$row[bairro]</option>";
}
?>
</select></td>
<td bgcolor="#FFFFFF"><div id="subcat">
<select name="sub_categoria" class="txt_preto" id="sub_categoria">
<option selected="selected">Todas as Subcategorias</option>
<option>Selecione uma categoria primeiro</option>
</select>
</div></td>
</tr>
<tr>
<td colspan="2" bgcolor="#FFFFFF" class="txt_azul_bold_gd"><label></label> <label>
<div align="center">
<input name="Submit" type="submit" class="tabela_geral" value="Buscar >>>">
</div>
</label></td>
</tr>
</table>
</div></td>
</tr>
</table></td>
</tr>
</table>
</form>

Abraços,

Léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Leo bom vamos lá, deu dois probleminhas, um que estava faltando o Value da sub_categoria heheh, outra que não está filtrando por palavra chave n sei pq jah reli umas milhoes de vezes o codigo até entendi o codigo mais n achei o erro, a outra coisa tbem n eh erro do codigo, bom qdo seleciona a categoria a sub categoria eh carregada, entaum pelo que percebi n ao enviar o form o valor da select subcategoria n esta indo, deve ser devido o fato desse select estar outra página que o ajax carrega ali, nem sei como resolver isso mais vmos por partes hehehe,

 

o script ficou bom sim mais n esta filtrando a palavra chave

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se eu não digito nada e naum seleciono nada:

 

resultado:

Cleberson Ramos Gordirio

RC som e capas

Cleberson Ramos

jghj

hfghgfh

dfgfdgfdg

kjhkhjk

kjljkljklkj

fghgfhg

rrrrr

fghgfh

qqqq

gfhgfh

 

cada linha é um registro. (todos da tabela)

 

Se digito Cle no campo palavra chave:

 

resultado:

Cleberson Ramos Gordirio

RC som e capas

Cleberson Ramos

jghj

hfghgfh

dfgfdgfdg

kjhkhjk

kjljkljklkj

fghgfhg

rrrrr

fghgfh

qqqq

gfhgfh

 

mesma coisa

 

Se seleciono um somente um bairro:

 

resultado:

Cleberson Ramos Gordirio

RC som e capas

jghj

hfghgfh

 

esta certinho hehe

 

se digito Cle na palavra chave e seleciono o mesmo bairro anterior:

 

resultado:

Cleberson Ramos Gordirio

RC som e capas

jghj

hfghgfh

 

o mesmo de cima

 

se seleciono uma categoria e uma subcategoria:

 

resultado:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/baixadav/public_html/novo/resultados.php on line 62

 

a mesma coisa acontece se eu selecionar todos os campos

 

se eu digitar Cle e selecionar apenas uma categoria:

 

resultado:

gfhgfh

 

tbem esta certo

 

é isso hehe

 

Leo não liga com esses registros malucos cheio de letras n hehe

valeu

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Cleber...

desculpe mas não compreendi os registros que você me mostrou...

teve um erro ae no meio...

 

mostra para mim o que a variavel $QryBusca mostrou em cada uma das suas buscas por favor...

 

Se deu tudo certo, mostre o seu código como ficou, para poder compartilhar com o pessoal do Fórum.

 

abraços,

léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

é o mesmo o que eu falei, o unico erro eh que não esta filtrando pela palavra chave, o outro erro que deu eh erro do meu ajax msm testa ae se quiser www.baixadavip.com.br/novo/index.php?area=2

 

o unico problema esta na palavra chave que esta ignorando o que digito

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cleber, tah dando pau no código...

você tem que dar um echo na variavel $QryBusca... ela vai exibir o SQL que foi montado... se não, não vai ter como eu concertar o negócio...

 

abraços,

léo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Leo Olha só eu aproveitei seu esqueminha meio que fiz uma adaptação mais funcionoiu certinho sé que tive que tirar as outras filtragem da palavra chave ex. eu queria que se digitasse alguma palavra fosse buscada nos campor nome resumo e descrição certo, só que se fizesse assim ele funcionava trankilo se eu digitar epenas nesse campo mais se botar outra filtragem como uma categoria tbem aí ele ignora a categoria n sei pq esta fazendo isso estou postando o codigo pra você ver como eu fiz se é certo fazer isso não sei mais esta funcionando heheheh n sei até qdo hahaha

 

 

CODE
<?php

include ("includes/engine_geral.php");

if($_REQUEST["Submit"]<>"")

{

// Tratamento das variaveis.

$palavra = $_REQUEST["palavra"];

$categoria = $_REQUEST["categoria"];

$bairro = $_REQUEST["bairro"];

$sub_categoria = $_REQUEST["sub_categoria"];

}

 

if (($palavra) and (!$categoria) and (!$bairro) and (!$sub_categoria)){

$sql = $sql ." WHERE nome LIKE '%".$palavra."%' OR resumo LIKE '%".$palavra."%' OR descricao LIKE '%".$palavra."%'";}

 

elseif (($palavra) and (!$categoria) and ($bairro) and (!$sub_categoria)){

$sql = $sql ." WHERE bairro=$bairro AND nome LIKE '%".$palavra."%'";}

 

elseif ((!$palavra) and (!$categoria) and ($bairro) and (!$sub_categoria)){

$sql = $sql . " WHERE bairro=$bairro";}

 

elseif ((!$palavra) and ($categoria) and (!$bairro) and (!$sub_categoria)){

$sql = $sql . " WHERE categoria=$categoria";}

 

elseif (($palavra) and ($categoria) and (!$bairro) and (!$sub_categoria)){

$sql = $sql . " WHERE nome LIKE '%".$palavra."%' AND categoria='$categoria'";}

 

elseif ((!$palavra) and ($categoria) and ($bairro) and (!$sub_categoria)){

$sql = $sql . "WHERE bairro=$bairro AND categoria=$categoria";}

 

elseif (($palavra) and ($categoria) and ($bairro) and (!$sub_categoria)){

$sql = $sql . "WHERE nome LIKE '%".$palavra."%' AND bairro=$bairro AND categoria=$categoria";}

 

elseif ((!$palavra) and ($categoria) and (!$bairro) and ($sub_categoria)){

$sql = $sql . "WHERE categoria=$categoria AND sub_categoria=$sub_categoria";}

 

elseif (($palavra) and ($categoria) and (!$bairro) and ($sub_categoria)){

$sql = $sql . "WHERE nome LIKE '%".$palavra."%' AND categoria=$categoria AND sub_categoria=$sub_categoria";}

 

elseif ((!$palavra) and ($categoria) and ($bairro) and ($sub_categoria)){

$sql = $sql . "WHERE bairro=$bairro AND categoria=$categoria AND sub_categoria=$sub_categoria";}

 

elseif (($palavra) and ($categoria) and ($bairro) and ($sub_categoria)){

$sql = $sql . "WHERE bairro=$bairro AND nome LIKE '%".$palavra."%' AND categoria=$categoria AND sub_categoria=$sub_categoria";}

 

$sql_em = "SELECT * FROM empresas ".$sql." ";

$qr = mysql_query($sql_em);

 

?>

<table width="100%" border="0" cellspacing="0">

<? while ($res = mysql_fetch_array($qr)){?>

<tr>

<td><? echo $res["nome"];?></td>

</tr>

<? } ?>

</table>

 

valeu pela ajuda Leonardo

abração

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obtive a resposta exata para o que eu precisava neste tópico, muito obrigado leonardonobre pela força que deu aos amigos e à mim também.

 

Usei o código em uma pesquisa com 4 categorias e no minimo 4 opções em cada categoria, onde o resultado será mostrado em uma única página de resultados. e funcionou perfeitamente. Usei a função switch -> cases e esses if para formar a string SQL.

 

Obrigado mesmo ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito Obrigado Cleberson Ramos, isso era exatamente o que eu precisava e funcionou perfeitamente!

 

Vlwzao! =)

 

o/

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.