Jump to content


Photo

Sistema De Filtro De Dados Em Php, Alguém Sabe?


  • Faça o login para participar
6 replies to this topic

#1 Ireno

Ireno

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:São Paulo - capital
  • Interesses:php

Posted 07/12/2009, 18:43

Olá a todos, sou novo neste forúm e não tenho certeza se já existe uma matéria a respeito. Caso já exista, por favor me desculpem, mas deixem um link ;) .

Preciso fazer uma página que tenha um sistema de filtro em php (links onde o usuário vai clicando e os filtros vão sendo acionados, e as variáveis vão se acumulando na URL da página).tenho boas noções de mysql e de php. Porém não sei ao certo que técnica é usada para fazer isso.

session, provavelmente ou um macete com alguma tabela que é criada esporadicamente somente para este fim, depois é deletada. não sei....
sites de e-commerce é que geralmente tem dessas coisas.
submarino, outro também é o infojobs.

a idéia é ter um objeto com várias características, onde o usuário vai ditando suas possibilidades e os resultados vão sendo mostrados, conforme o número de parâmetros.
qualquer ajuda será bem vinda.
Em busca de conhecimento
tudo orientado a objetos

#2 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 07/12/2009, 21:27

:ponder:

Esse sistema será aberto para visitantes ou só quem tiver cadastro conseguirá utilizar? E qual será o tempo para os dados expirarem?
att,
Muller Dias
ex-administrador Fórum WMO

#3 Ireno

Ireno

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:São Paulo - capital
  • Interesses:php

Posted 09/12/2009, 08:56

:ponder:

Esse sistema será aberto para visitantes ou só quem tiver cadastro conseguirá utilizar? E qual será o tempo para os dados expirarem?


A idéia é ser aberto para todos. Para se fazer uma busca rápida. tipo submarino só que bem mais simples. só que eu não gostaria de sofrer ataques de robôs, por exemplo. Por isso que os filtros seriam acionados atravez de links (também não sei ao certo se isso evitaria um ataque). e quanto ao tempo para expirar não faço idéia, ainda estou tentando resolver o problema de como fazer. Mas a idéia é ser uma busca rápida.

Resolvi utilizar session:

veja a tabela do mysql:

--
-- Banco de Dados: `teste`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `filtro`
--

CREATE TABLE IF NOT EXISTS `filtro` (
  `Nome` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
  `VagasGaragem` int(11) NOT NULL,
  `Cor` varchar(45) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

--
-- Extraindo dados da tabela `filtro`
--

INSERT INTO `filtro` (`Nome`, `VagasGaragem`, `Cor`) VALUES
('Casa - Morumbi', 3, 'vermelho'),
('Apartamento - Tatuapé', 2, 'verde'),
('Duplex - Itaim bibi', 2, 'amarelo'),
('Apartamento - Vila Prudente', 1, 'Azul');


Aqui está o arquivo index.php:

<?php session_start();
function conectar($servidor,$usuario,$senha,$banco){
		// Selecionar servidor
		$conectar = mysql_connect($servidor, $usuario, $senha)
		or die ("<h1>Erro ao conectar no BD</h1>");
		
		// Selecionar BD
		mysql_select_db($banco, $conectar);
}
function escreve($link,$label){
return '<a href="'.$link.'">'.$label.'</a>';
}

conectar("localhost","root","","teste");
?>
<!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>Filtro</title>
</head>

<body>
<p>
<?php 
	//Se filtrou pelo número de vagas.
	if(isset($_GET['vagas']) && is_numeric($_GET['vagas']) && isset($_GET['cor'])){
		$NumeroVagas = $_GET['vagas'];
		$cor = $_GET['cor'];
	$sql = "SELECT * FROM `filtro` WHERE `VagasGaragem` >= '$NumeroVagas' AND `Cor` = '$cor';";
		$res = mysql_query($sql);
	
			while($tudo = mysql_fetch_array($res)){
				echo utf8_encode($tudo['Nome'])."<br />";
			}
	}
	else if(isset($_GET['vagas']) && is_numeric($_GET['vagas'])){
		$NumeroVagas = $_GET['vagas'];
		$sql = "SELECT * FROM `teste`.`filtro` WHERE `VagasGaragem` >= '$NumeroVagas';";
		$res = mysql_query($sql);
	
			while($tudo = mysql_fetch_array($res)){
				echo utf8_encode($tudo['Nome'])."<br />";
			}
	}
	else{//SEM FILTROS
		echo 'Vamos iniciar uma busca, tendo como parâmetro o número de vagas <br />
				na garagem de um imóvel';
	}
	echo '<h2>No mínimo:</h2>';


	echo escreve('on.php?vagas=1&','1 (uma) vaga para garagem')."<br />";
	echo escreve('on.php?vagas=2&','2 (duas) vaga para garagem')."<br />";
	echo escreve('on.php?vagas=3&','3 (três) vaga para garagem')."<br />";
	echo '<br /><br /><br />';
	
	echo '<h2>Detalhando busca:</h2>';	
	echo escreve('on.php?cor=vermelho&','Na cor vermelho')."<br />";
	echo escreve('on.php?cor=verde&','Na cor verde')."<br />";
	echo escreve('on.php?cor=amarelo&','Na Amarelo')."<br />";
	echo escreve('on.php?cor=azul&','Na Azul')."<br />";
	
?>
</body>
</html>

e aqui está o carinha que 'acumula' as variáveis na url. é somente um teste, portanto se tentar deletar um filtro não vai conseguir, senão manualmente via url.

on.php:

<?php
session_start();


if(isset($_GET['vagas']) && is_numeric($_GET['vagas'])){
	$_SESSION['vars'] .= 'vagas='.$_GET['vagas'].'&';
}
else if(isset($_GET['cor'])){
	$_SESSION['vars'] .= 'cor='.$_GET['cor'].'&';
}
else
{$_SESSION['vars'] = '';}
			

header('Location: index.php?'.$_SESSION['vars']);
?>

Se alguém souber como melhorar isso será de grande ajuda, pois eu queria fazer de um jeito que fosse possível o usuário, na própria página index.php deletar a variável acumulada na url.
bueno.. é isso..
Em busca de conhecimento
tudo orientado a objetos

#4 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 09/12/2009, 12:15

Não tem necessidade de você usar sessão para isso, e esse arquivo on.php é dispensável.

Já que os valores são passados pela url, é só você colocar as variáveis GET nas novas urls para pegar os valores atuais.

Um simples exemplo:

echo escreve('index.php?cor=vermelho&vagas='.$_GET['vagas'],'Na cor vermelho')."<br />";


(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#5 Ireno

Ireno

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:São Paulo - capital
  • Interesses:php

Posted 09/12/2009, 13:07

Não tem necessidade de você usar sessão para isso, e esse arquivo on.php é dispensável.

Já que os valores são passados pela url, é só você colocar as variáveis GET nas novas urls para pegar os valores atuais.

Um simples exemplo:

echo escreve('index.php?cor=vermelho&vagas='.$_GET['vagas'],'Na cor vermelho')."<br />";


(ok2)


Olha, desculpe minha ignorância. mas não acompanhei seu raciocínio.
tem como você demonstrar aquela idéia com um exemplo um pouco mais elaborado.

é que pra mim ficou meio no ar, rs... e não consegui catar.

da uma olhada la no $_GET[] que você usou, tipo pra mim usar aquilo no caso ela já deve existir né, senão dá erro. Foi aí que me compliquei

acho que seria mais simples se eu pudesse pegar toda a url ATUAL e concatenar uma variável.
tem algum método pra isso?

fico no aguardo. valew
Em busca de conhecimento
tudo orientado a objetos

#6 '' sem.Ponto

'' sem.Ponto

    Super Veterano

  • Ex-Admins
  • 2098 posts
  • Sexo:Masculino
  • Localidade:Belo Horizonte

Posted 09/12/2009, 14:15

Por quê você não cria uma função que pegue todas as variáveis GET e jogue em um array. Ou melhor... pode ser com essa função escreve() mesmo.

Criei uma função para geração dos links.

<?php

function escreve($label, $filtro, $valor=NULL){

	$filtros = $_GET; // pega todos os filtros que está na URL e coloca no array $filtros
	if ($valor) $filtros[$filtro] = $valor; // acrescenta novo filtro / substitui o valor de derterminado filtro no array $filtros
	else unset($filtros[$filtro]); // se não tiver valor, retira o filtro do array $filtros
	
	// Forma a query string
	foreach ($filtros as $key => $val) {
		$query_string[] = $key.'='.$val;
	}
	$query_string = (count($query_string) > 0) ? '?'.implode('&',$query_string) : NULL;
	
	// Retorna o link
	return '<a href="filtros.php'.$query_string.'">'.$label.'</a>';

}

echo escreve('Todas as vagas', 'vagas').'<br />';
echo escreve('2 (duas) vagas para garagem', 'vagas', 2).'<br />';
echo escreve('3 (três) vagas para garagem', 'vagas', 3).'<br />';
echo '<br />';
echo escreve('Todas as cores', 'cor').'<br />';
echo escreve('Cor azul', 'cor', 'azul').'<br />';
echo escreve('Cor verde', 'cor', 'verde').'<br />';

?>

Crie um arquivos chamado fitros.php e coloque o código dentro para você testar. Tente entender como ele funciona, está todo comentado e no final tem exemplos de como utilizar.

(ok2)
att,
Muller Dias
ex-administrador Fórum WMO

#7 Ireno

Ireno

    Novato no fórum

  • Usuários
  • 4 posts
  • Sexo:Masculino
  • Localidade:São Paulo - capital
  • Interesses:php

Posted 10/12/2009, 12:07

Muito bom!

deu certinho. as variáveis se acumulam na url.
e somente os valores mudam, caso escolha a mesma variável porém com um valor diferente.
muito bom. merece meus aplausos.

se me der as honras quando eu terminar esse projeto aqui, acho que vou postar um tutorial
a respeito bem explicativo.

mas valeu mesmo!^_^
Em busca de conhecimento
tudo orientado a objetos




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq