Ir para conteúdo

POWERED BY:

Arquivado

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

Feeeh

Sistema de busca com filtros em PHP

Recommended Posts

Boa tarde pessoal, estou criando um sistema de busca com filtros, já fiz tudo, porém não estou conseguindo retornar o conteudo em uma nova pagina.

Abaixo segue o codigo

 

<?php
$conectar = mysql_connect('localhost','root','') or die(mysql_error());
if($conectar){
$banco = mysql_select_db('video_aula');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Listar Imoveis</title>
</head>
<body>
<form action="" method="get" enctype="multipart/form-data">
<span>Tipo</span><br />
<select name="tipo">
<option value="" selected="selected">Selecione o tipo...</option>
<?php
$pega_tipos = mysql_query("SELECT * FROM tipo ORDER BY id DESC");
if(mysql_num_rows($pega_tipos) == 0){
echo '<option value="">Não foram encontrados tipos ainda</option>';
}else{
while($linha = mysql_fetch_array($pega_tipos)){
echo '<option value="'.$linha['id'].'">'.$linha['tipo'].'</option>';
}
}
?>
</select><br />
<span>Finalidade</span><br />
<select name="finalidade">
<option value="" selected="selected"> Selecione a finalidade...</option>
<?php
$pega_finalidade = mysql_query("SELECT * FROM finalidade ORDER BY id DESC");
if (mysql_num_rows($pega_finalidade) == 0){
echo '<option value="">Não foram encontrados finalidades ainda</option';
}else{
while ($linhaB = mysql_fetch_array($pega_finalidade)){
echo '<option value="'.$linhaB['id'].'">'.$linhaB['finalidade'].'</option>';
}
}
?>
</select><br />
<span>Bairro</span><br />
<select name="bairro">
<option value="" selected="selected">Selecione o bairro...</option>
<?php
$pega_bairro = mysql_query("SELECT * FROM bairros ORDER BY id DESC");
if(mysql_num_rows($pega_bairro) == 0){
echo '<option value="">Não foram encontrados bairros ainda</option>';
}else{
while($linhaC = mysql_fetch_array($pega_bairro)){
echo '<option value="'.$linhaC['id'].'">'.$linhaC['bairro'].'</option>';
}
}
?>
</select><br />
<span>Preço</span><br />
<select name="preco">
<option value="" selected="selected">Selecione o preço...</option>
<option value="15000">Até 15000</option>
<option value="20000">Até 20000</option>
<option value="30000">Até 30000</option>
<option value="17000">Até 17000</option>
</select><br />
<input type="hidden" name="acao" value="enviar" />
<input type="submit" value="Buscar" name="s" />
</form>
<hr />
<?php if(isset($_GET['acao']) && $_GET['acao'] == 'enviar'){
$tipo = $_GET['tipo'];
$bairro = $_GET['bairro'];
$preco = $_GET['preco'];
switch($preco){
case '15000';
$valor = 'AND preco <= 15000';
break;
case '20000';
$valor = 'AND preco BETWEEN 15000 AND 20000';
break;
case '30000';
$valor = 'AND preco BETWEEN 20000 AND 30000';
break;
case '17000';
$valor = 'AND preco BETWEEN 15000 AND 17000';
break;
}
$seleciona_imovel = mysql_query("SELECT * FROM imoveis WHERE tipo = '$tipo' AND bairro = '$bairro' $valor");
if(mysql_num_rows($seleciona_imovel) == 0){
echo '<h1>Desculpe, mais sua busca, não retornou resultados</h1>';
}else{
while($linhaImovel = mysql_fetch_array($seleciona_imovel)){
echo '<h1>'.$linhaImovel['titulo'].'</h1>';
printf('<li><a href="resultado1.php?id=%s">%s</a></li>', $linhaImovel['id_imovel'], $linhaImovel['titulo']);
}
}
}
?>
</body>
</html>
<?php
//primeiro incluimos o arquivo de conexão na nossa página
require('conexao.php');
/**
* Verificamos se a $_GET['s'] existe( isset), caso exista usamos
* mysql_real_escape_string para escapar os valores
* Senão o valor será vazio
*/
//$seleciona_imovel = mysql_query("SELECT * FROM imoveis WHERE tipo = '$tipo' AND bairro = '$bairro' $valor");
$pesq = (isset($_GET['linhaImovel'])) ? mysql_real_escape_string($_GET['linhaImovel']) : '';
/**
* Verificamos se o valor está preenchido, realizando a pesquisa
* Senão retornará todos os dados do banco de dados
*/
//if(!empty($pesq)){
/**
* Montamos o SQL, onde selecionamos todos os campos da tabela,
* para isso utilizamos o sinal de asteristico
* E escolhemos a tabela, que no nosso caso se chama artigos
* Restringimos a busca pelo titulo, e usamos LIKE para realizar a pesquisa
* E também pesquisamos no campo conteudo.
*/
$strSQL = "SELECT * FROM imoveis WHERE tipo = '$tipo' AND bairro = '$bairro' $valor";
/**
*
* Caso esteja vazio o valor vindo do formulário,
* selecionamos todos os valores da tabela
* Ordenando pelo id em ordem decrescente
* Logo vai mostra do mais recente ao mais antigo
*
*/
$strSQL = "SELECT * FROM imoveis ORDER BY id_imovel DESC";
//Executamos o SQL
$qr = mysql_query($strSQL) or die(mysql_error());
//Contamos o total de registros retornado da pesquisa
$num = mysql_num_rows($qr);
?>
<!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" dir="ltr" lang="pt-BR">
<head>
<title>Sistema de Busca</title>
</head>
<body>
<h1>Resultado da Pesquisa</h1>
<?php
/**
* Verificamos se retorna alum registro
* Se não retornar, mostrará a mensagam de
* Nenhum registro encontrado
*/
if($num == 0){
//imprime o resultado que não foi encontrado nenhum item
echo '<h2>Nenhum registro encontrado</h2>
';
}else{
//Mostra quantos resultados foram encontrados
echo '<h2>Total de Itens Encontrados: '.$num.'</h2>';
//imprimi a tag de lista não ordenada
echo '<ul id="artigos">';
/**
* Agora recuperaremos os dados da tabela
* para isso utilizando um loop
* Ele retornará um array associativo
* Sendo que o seu indice será o nome do campo
*/
while($linhaImovel = mysql_fetch_array($qr)){
/**
* Utilizamos a função printf para mostra o link
* Atribuimos os valores que serão substituidos
* para isso utilizamos o sinal de porcentagem + a letra s (%s)
* */
printf('<li><a href="resultado.php?id=%s">%s</a></li>', $linhaImovel['id_imovel'], $linhaImovel['titulo']);
}
//imprime o fechamento da tag ul
echo '</ul>';
}
?>
</body>
</html>
<?php
//primeiro incluimos o arquivo de conexão na nossa página
require('conexao.php');
//verifica se o id ($_GET['id_imovel']) existe, se não existir ele terá o valor 0
$id = (isset($_GET['id_imovel'])) ? intval($_GET['id_imovel']) : 0 ;
//se o Id for igual, ele será redirecionado a página index.php
if($id == 0 ){
header('location: index.php');
}
/**
* Montamos agora o SQL, selecionamos todos os campos
* da tabela, para isso utilizamos o asteristico,
* escolhemos a tabela ( FROM artigos)
* Filtramos pelo campo ID
*/
$sql = "SELECT * FROM imoveis WHERE id_imovel = '$id' ";
//Executamos o SQL
$qr = mysql_query($sql);
//Recupera o valor do registro selecionado
$linhaImovel = mysql_fetch_array($qr);
//atribui o conteúdo do título a variável $titulo
$titulo = $linhaImovel['titulo'];
//atribui o conteúdo do Conteudo a variável $coteudo
$conteudo = $linhaImovel['conteudo'];
?>
<!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" dir="ltr" lang="pt-BR">
<head>
<title><?php echo $titulo ?> | Artigos</title>
</head>
<body>
<?php
//imprimi o resultado
echo "<h1>$titulo</h1>";
echo $conteudo;
?>
</body>
</html>

 



...



Acho que o erro esta nesta linha:

 

$id = (isset($_GET['id_imovel'])) ? intval($_GET['id_imovel']) : 0 ;

 

Porem n sei como solucionar

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual é a mensagem de erro que você está recebendo amigo?

você poderia mudar esta expressão que mostrou:

$id = (isset($_GET['id_imovel'])) ? intval($_GET['id_imovel']) : 0 ;

por esta:

if(isset($_GET['id_imovel'])) {
 $id = $_GET['id_imovel'];
} else {
 $id = 0;
}

basicamente é a mesma coisa, só não entendi ao certo o motivo do "intval"! manda um print do erro que está recebendo, ou então a mensagem de erro em si.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual é a mensagem de erro que você está recebendo amigo?

você poderia mudar esta expressão que mostrou:

$id = (isset($_GET['id_imovel'])) ? intval($_GET['id_imovel']) : 0 ;

por esta:

if(isset($_GET['id_imovel'])) {
 $id = $_GET['id_imovel'];
} else {
 $id = 0;
}

basicamente é a mesma coisa, só não entendi ao certo o motivo do "intval"! manda um print do erro que está recebendo, ou então a mensagem de erro em si.

 

Bruno, não recebi nenhuma mensagem de erro, simplesmente a pagina resultado abriu, capturando o parametro ID, porém não exibe a coluna conteudo do banco de dados

 

Bruno, não recebi nenhuma mensagem de erro, simplesmente a pagina resultado abriu, capturando o parametro ID, porém não exibe a coluna conteudo do banco de dados

 

Bruno, o link esta aparacendo assim

 

http://127.0.0.1:8080/teste/resultado.php?id=1

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, bom... a principio o script esta certo, deveria retornar o valor do conteudo, seguinte... verifica quais os campos que a sua tabela tem, segundo verifique se existe algum dado no campo conteudo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

entendi, bom... a principio o script esta certo, deveria retornar o valor do conteudo, seguinte... verifica quais os campos que a sua tabela tem, segundo verifique se existe algum dado no campo conteudo.

 

Dentro do banco de dados, tenho :

 

bairros ( id, bairro )

finalidade (id, finalidade)

tipo (id, tipo)

imoveis (id_imovel, tipo, finalidade, bairro, titulo, conteudo e preco)

 

E sim, tenho conteudo pra cada id que esta lá

 

Um detalhe

 

Na linha que voce me mandou trocar, antes estava assim

 

$id = (isset($_GET['id'])) ? intval($_GET['id']) : 0;
//se o Id for igual, ele será redirecionado a página index.php
if($id == 0){
header('location:index.php');
}
Onde esta o 0 em vermelho, quando eu mudava para 1 por exemplo, exibia só o conteudo da id 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que está falando é definir o valor do ID inicial e fazer ele exibir de acordo com os que estão no banco de dados!

vamos fazer um teste, na URL, no final do endereço, digita assim:

?id=2

por exemplo:

http://meusite.com/?id=2

entendeu? vai mudando os valores e verifica se vai sendo exibido os resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que está falando é definir o valor do ID inicial e fazer ele exibir de acordo com os que estão no banco de dados!

vamos fazer um teste, na URL, no final do endereço, digita assim:

?id=2

por exemplo:

http://meusite.com/?id=2

entendeu? vai mudando os valores e verifica se vai sendo exibido os resultados.

 

Bruno, ficou assim

http://127.0.0.1:8080/teste/?id=1

 

Porém continua sem exibir o resultado, mudei para id 2 e 3 e também nada

 

Bruno, ficou assim

http://127.0.0.1:8080/teste/?id=1

 

Porém continua sem exibir o resultado, mudei para id 2 e 3 e também nada

Já li o codigo umas 20 vezes, não sei o que pode ser

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de mudar pro script que lhe enviei, estava funcionando normal, quando vc alterava na url?

me manda novamente o seu script ATUAL. pois antes você tinha me dado como:

$_GET['id_imovel']

e agora você me mostra ele assim:

$_GET['id']

então manda ai, pra eu verificar o atual agora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

antes de mudar pro script que lhe enviei, estava funcionando normal, quando vc alterava na url?

me manda novamente o seu script ATUAL. pois antes você tinha me dado como:

$_GET['id_imovel']

e agora você me mostra ele assim:

$_GET['id']

então manda ai, pra eu verificar o atual agora.

 

 

Bruno, não sei o que aconteceu aqui, mas voltei com o código antigo e funcionou.

Mas não estava funcionando não, não sei o que houve '-'

Mesmo assim, mt obg pela ajuda cara!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Feeeh, da forma como estão sendo feitas as consultas, seu código está sucetível a SQL Injection. Se for um projeto pessoal ou para estudo, isso não vai fazer muita diferença (talvez tenha poucos acessos ou a segurança não seja uma preocupação).

Se for um projeto maior ou pra algum cliente, eu realmente recomendaria que você tratasse essa vulnerabilidade pra evitar maiores dores de cabeça no futuro.

 

Abraço!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Feeeh, da forma como estão sendo feitas as consultas, seu código está sucetível a SQL Injection. Se for um projeto pessoal ou para estudo, isso não vai fazer muita diferença (talvez tenha poucos acessos ou a segurança não seja uma preocupação).

 

Se for um projeto maior ou pra algum cliente, eu realmente recomendaria que você tratasse essa vulnerabilidade pra evitar maiores dores de cabeça no futuro.

 

Abraço!

 

RobyFLC, sou iniciante nisso, poderia me explicar melhor?

 

Tenho outra duvida, por exemplo, tenho os campos "select", porém, só exibirá resultados se todos os valores forem preenchidos, tem como exibir os valores, sem preencher um campo, por exemplo " Valor " ?

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.