Ir para conteúdo

POWERED BY:

Arquivado

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

Thiago Sousa

[Resolvido] Consulta no BD através de DropDown

Recommended Posts

E se o usuário escolher só operadora? A query vai ficar + ou - assim:

 

SELECT * FROM contestacao WHERE tipo LIKE '%%' AND operadora LIKE '%operadora%' AND cliente LIKE '%%' AND status LIKE '%%'

 

Eu fiz algo parecido, era para uma imobiliaria, mas resolve.

 

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

if (!empty($_POST['tipo'])) $dados['tipo'] = $_POST['tipo'];
if (!empty($_POST['operadora'])) $dados['operadora'] = $_POST['operadora'];
if (!empty($_POST['cliente'])) $dados['cliente'] = $_POST['cliente'];
if (!empty($_POST['status'])) $dados['status'] = $_POST['status'];

$qry = consulta('contestacao',$dados);// O restante fica igual

Espero ter ajudado

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos Eduardo...

 

Você me deixou com a pulga atrás da orelha... por pensar ser tão obvio que o cliente tem q escolher todos os campos acabei não pensando como você disse... e você tem razão... e se o cliente inserir só um dados.. ai a consulta não funciona...

 

agora vou ter q arrumar isso e deixar como você sugeriu...mas olhando o seu código fiquei meio que boiando!!! rs

 

Onde eu insiro o seu código?

 

e outra coisa!! Como que apresento o resultado dessa consulta na própria página html que estou fazendo o formulario de consulta???

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que eu coloquei só uma parte do código. Vou pegar o teu código e colar a parte que eu coloquei.

<?php
$host = "localhost";
$usuario = "user";
$senha = "user";

$conecta = mysql_connect("$host", "$usuario", "$senha") or die (mysql_error());
mysql_select_db("migratelecom", $conecta) or die (mysql_error());

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

if (!empty($_POST['tipo'])) $dados['tipo'] = $_POST['tipo'];
if (!empty($_POST['operadora'])) $dados['operadora'] = $_POST['operadora'];
if (!empty($_POST['cliente'])) $dados['cliente'] = $_POST['cliente'];
if (!empty($_POST['status'])) $dados['status'] = $_POST['status'];

$x = consulta('contestacao',$dados);// O restante fica igual

	// se houver mais de um resultado diz quantos resultados existem
	while ($array = mysql_fetch_array($x)) {
		// enquanto houverem resultados...
		echo "<tr><td>";
		echo "<td>".$array['tipo']."</td> <td>".$array['operadora']."</td> <td>".$array['cliente']."</td> <td>".$array['status']."</td>";
		// exibir a coluna nome e a coluna email
	}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei de achar um defeito...

 

Tem que trocar na função... muda esta parte...

foreach ($dados as $chave => $valor) {
		$sql.= "$chave LIKE '%$valor%' ";
		if ($x < $count) {
			$sql.= ' AND ';
			$x++;
		}

Outra coisa, pra você entender como funcionou esta função, coloca antes do mysql_query uma linha assim:

echo $sql;

E aí testa, enviando 1 dado, 2 dados 3 dados e os 4 dados...

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só. Nesta linha

if (!empty($_POST['tipo'])) $dados['tipo'] = $_POST['tipo'];
Ele testa se foi postado algum valor. Se foi, ele inclui na variável dados, com índice tipo o valor postado. Faz isto para todas as variáveis.

 

Na função, vou explicar linha a linha:

function consulta( $tabela , $dados = array()){ // definição de função... sem mistério, certo?
	
	$sql = "SELECT * FROM $tabela WHERE "; //aqui ele inicia o SELECT. 
	$count = count($dados) - 1; // aqui ele conta qtos índices tem no array, pra colocar o AND ou não. Já voltamos nisto.
	$x = 0;// setado para o AND também... já voltaremos.
	foreach ($dados as $chave => $valor) { // Aqui ele pega para cada índice da variável DADOS (segundo parâmetro da função) e faz assim. Coloca o índice como nome do campo na tabela e o valor como valor a ser pesquisado.
	   $sql.= "$chave LIKE '%$valor%' ";// Veja que aqui ele concatena a Variável SQL (que foi setada ali em cima.)
		if ($x < $count) {// aqui ele conta. Se ainda tiver mais algum valor a colocar, ele coloca AND. Se tiver acabado, ele não faz nada.
			$sql.= ' AND ';// aqui também é concatenada.
			$x++;
		}
	}
	echo $sql; // coloca esta linha só enquanto está testando... por aqui você vai ver mais ou menos como fica.
	$qry = mysql_query($sql) or die(mysql_error());// aqui ele executa a query e retorna o resultado dela.
	return $qry;
}

Faz outra coisa... Logo abaixo dos ifs, coloca esta linha aqui, também só pra testar. Depois você tira... acho que vai te ajudar a entender um pouco mais.

 

echo '<pre>';
print_r($dados);
echo '</pre>';

Qualquer dúvida posta aqui de novo.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

É provável que seja isto.

Pelo jeito você tá usando o select do html. No Select, a estrutura é mais ou menos assim:

<select name="tipo" id="tipo">
	<option value="">Insira o tipo</option>
	<option value="1">1</option>
</select>

O que vai pra outra página é o que está dentro do value. Então no primeiro, você coloca com o value vazio (como está ali em cima).

 

Outra coisa que você pode fazer pra te ajudar a entender é colocar na primeira linha pra imprimir o array POST.

echo '<pre>';
print_r($_POST);
echo '</pre>';

Ajuda também a entender.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz algumas coisas pra gente testar.

 

echo $sql; // coloca esta linha aqui. ele vai imprimir o SELECT antes de enviar pro banco de dados.
	$qry = mysql_query($sql) or die(mysql_error());
	return $qry;
}

if (!empty($_POST['tipo'])) $dados['tipo'] = $_POST['tipo'];
if (!empty($_POST['operadora'])) $dados['operadora'] = $_POST['operadora'];
if (!empty($_POST['cliente'])) $dados['cliente'] = $_POST['cliente'];
if (!empty($_POST['status'])) $dados['status'] = $_POST['status'];

echo '<pre>';// coloca estas 3 linhas, pra ajudar no debug. Vai imprimir a $dados antes da consulta.
print_r($dados);
echo '<pre/>';

$x = consulta('contestacao',$dados);
echo '<table border ="1">';// Coloca esta linha aqui. Fica mais organizado.

Não esquece que eu coloquei no post anterior. O value de quando não seleciona tem que estar VAZIO, e não com 0. Deixa assim "".

 

Posta o resultado

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando consulta mais de 1 funciona?

 

Carlos Eduardo

 

funciona sim..... qdo coloco todos os campos a consulta funciona perfeitamente.. mais qdo é colocado somente um valor... ela me retorna um janela em branco.... dizendo no rodapé do navegador concluído...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se você escolher só o primeiro, ou só o segundo, ou só o terceiro, ou só o quarto? Se colocar mais de 1 e menos de todos? Tá hospedado? Tem como dar uma olhada??

 

Dentro da função ele tem esta linha?

echo $sql; // coloca esta linha aqui. ele vai imprimir o SELECT antes de enviar pro banco de dados.

Se tiver, ele tem que imprimir na tela algo como 'SELECT * FROM contestacao WHERE ...'

 

Muito misterioso este defeito...

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, eu tinha colocado que o valor inicial tem que ser VAZIO. Ali você colocou um espaço nele...

<select name="operadora" id="operadora"> 
		<option value=" ">Operadora...</option> 
		<option value="Br Telecom">Br Telecom</option> 
		<option value="Claro">Claro</option> 
		<option value="Embratel">Embratel</option> 
		<option value="Nextel">Nextel</option> 
		<option value="Oi">Oi</option> 
		<option value="Telefônica">Telefônica</option> 
		<option value="Tim">Tim</option> 
		<option value="Vivo">Vivo</option> 
	  </select>

Tem que ser assim...

<select name="operadora" id="operadora"> 
		<option value="">Operadora...</option> 
		<option value="Br Telecom">Br Telecom</option> 
		<option value="Claro">Claro</option> 
		<option value="Embratel">Embratel</option> 
		<option value="Nextel">Nextel</option> 
		<option value="Oi">Oi</option> 
		<option value="Telefônica">Telefônica</option> 
		<option value="Tim">Tim</option> 
		<option value="Vivo">Vivo</option> 
	  </select>

Porque isto: se tem um espaço, ele não está vazio. Daí ele monta a query procurando onde o campo seja LIKE '% %'. Se estiver vazio, não vai buscar.

 

Entendeu?

 

Carlos Eduardo

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.