Jump to content


Photo

Busca Em Vários Campos Do Sql


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

#1 G3r4ld0

G3r4ld0

    Turista

  • Usuários
  • 33 posts
  • Sexo:Não informado
  • Localidade:Rio de Janeiro - RJ

Posted 20/09/2004, 08:49

Oi !

Tipo, não entendo muito de PHP e mySQL, mas to tentando (fuçando), fazer uma busca em um sistema de fotos que eu tenho aqui. Lendo alguns tutos, vendo outros códigos e tals..

Deu certo, Ele ta me retornando certo o que eu peço, mas agora queria evoluir e colocar mais uma coisa, aí que complicou... Queria colocar uma lista de opções, de onde buscar (drop down), Aì a pessoa ia escolher se a palavra que ela procura seria em "nome do evento", local ou nome fo fotógrafo.

Fiz o código da seguinte forma então:

form.php
<form action="consulta.php" method="post">
  <p> 
    <input name="localizacao" type="text">
    <select name="campo">
      <option selected>Buscar por</option>
      <option value="nome">Nome do evento</option>
      <option value="local">Local</option>
      <option value="fotografo">Fot&oacute;grafo</option>
    </select>

    <input type="submit" name="Submit" value="ok">
  </p>
  </form>

Antes tava igual, só que sem o "select".

consulta.php
<?

function conectar($dbNome)
{
  $db = mysql_connect("localhost","user do bd","senha do bd");("domain","login","password")
  mysql_select_db($dbNome);

  if (!$db)
  {
    echo("Erro de conexão ".mysql_error()."\n");
    exit;
  }
}


function bg_cell($contador)
{
	$resto = $contador % 2;
	if ($resto == '1')
  echo "#EEEEEE";
	else
  echo "#DDDDDD"; 
}


$dbNome = "nome do bd";
conectar($dbNome);

$sql = "select * from $campo where nome = '$localizacao'";
$result = mysql_query ($sql);

?>

<head>
</head>
<body>
  <?php
    $contador = '1';
	while ( $valor = mysql_fetch_array($result) )
	{
?>

"""aki o html, com "echo" para as partes que eu quero exibir o resultado"""

  <?php
	$contador++;
	}
?>

Bom, ele acusa o seguinte erro:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/gdhost/public_html/rioclick/busca/consulta.php on line 55

Na linha 55 aqui tem:

while ( $valor = mysql_fetch_array($result) )


Mas eu não acredito que venha realmente daí o erro, por que se não não funcionaria quando estava normal o código, acho que está no:

$sql = "select * from $campo where nome = '$localizacao'";

Antes eu colocava no lugar de "campo", o nome do campo do bd mesmo, e dava certo. Já tentei '$campo'..

Por isso acho que o erro está no form, não sei se é assim que se faz, dando o nome, e o "value" com o nome dos campos do bd...

Se alguém puder me ajudar nisso, agradeço.. :)

Ah, também queria saber como se faz para ele buscar parte de palavras, e desconsiderando maiúsculo e minúsculo, tipo:

No bd ta: "São Thomé"

O cara busca: "são", e queria que encontrase o são thomé...

Ah, só por curiosidade: Não entendi a função desse "contador" no código.. : / Vi que a cada verificação ele soma 1, mas pra que ? imaginei que seria para não repetir resultados, é isso mesmo ? : /


Falow ! :D

#2 Marcão

Marcão

    Marcãaaaaaaaao

  • Usuários
  • 1754 posts
  • Sexo:Não informado
  • Interesses:Faixa preta de Muay-Thay<br>Faixa Roxa de Jiu-Jitsu<br>:D<br>Um dia eu chego lá

Posted 20/09/2004, 08:54

resposta para a sua 1ª pergunta:
- não entendi o que vc quer!!

resposta para a sua 2ª pergunta:
- use o LIKE
ex:
SELECT  * 
FROM tabela WHERE nome
LIKE '%sao%'

Edição feita por: Marcão, 20/09/2004, 09:00.

Marcão -=- PHP é coisa de MESTRE e falo mais nada -=-
Minha Foto
"Não temas,segue adiante,não olhes para trás!!
Segura na mão de
Deus e vai.."

#3 fly2k

fly2k

    Super Veterano

  • Usuários
  • 2262 posts
  • Sexo:Não informado

Posted 20/09/2004, 09:08

eu acho que você se confundiu.....

ao invés de :
$sql = "select * from $campo where nome = '$localizacao'";

deveria ser:
$sql = "select * from nomedatabeladefestas where $campo = '$localizacao'";

em nome da tabeladefestas é onome da tabela que contem os campos nome, localização, e tals...saca!
Quer aprender PHP? -> www.manjaphp.com.br
Tutoriais, código colaborativo (pastebin), curso de PHP, artigos e etc.

#4 G3r4ld0

G3r4ld0

    Turista

  • Usuários
  • 33 posts
  • Sexo:Não informado
  • Localidade:Rio de Janeiro - RJ

Posted 20/09/2004, 09:39

eu acho que você se confundiu.....

ao invés de :
$sql = "select * from $campo where nome = '$localizacao'";

deveria ser:
$sql = "select * from nomedatabeladefestas where $campo = '$localizacao'";

em nome da tabeladefestas é onome da tabela que contem os campos nome, localização, e tals...saca!


ahuhuahuahuaahuahu... Eu sei, rs, foi um mole mesmo que dei, revi o código mil vezes e não percebi que tinha colocado a variável no lugar errado, rs, segundos antes de abrir o tópico de novo que vi... tsc... Mas aí tentei com ' ' , e não tava dando certo (mas tinha acabado de acusar erro, apenas não achava)... Agora colquei só o $campo... como você falou, e deu certinho...

Ainda somado com a ajuda do Marcão...Ficou perfeito...rs... Era outra coisa... já tinha visto esse "like", só não sabia que era essa a função dele e desses % que sempre via tb... rs.

Valew !! (y) :D

#5 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/09/2004, 10:05

Se você colocar um % antes da palavra, irá retornar todos os resultados que terminam com a palavra que você está procurando !

se você colocar depois da palavra um % irá retornar todos os resultados que começam com a palavra que você está procurando !

Se você coloca um % antes da palavra e outro depois da palavra, irá retornar todos os resultados que tiver qualquer parte da palavra gravado no DB , a palavra que voCê está procurando !!!

Ex do % antes da palavra :
mysql_query("SELECT * FROM tabela WHERE campo LIKE '%A'");
// irá retornar
palavra
amora
delicia

Ex do % depois da palavra :
mysql_query("SELECT * FROM tabela WHERE campo LIKE 'A%'");
// irá retornar
amor
amizade
aliança

Ex do % antes e depois da palavra :
mysql_query("SELECT * FROM tabela WHERE campo LIKE '%A%'");
// irá retornar
amor
amizade
aliaa
cachorro
escola
educacao

até + !
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#6 G3r4ld0

G3r4ld0

    Turista

  • Usuários
  • 33 posts
  • Sexo:Não informado
  • Localidade:Rio de Janeiro - RJ

Posted 22/09/2004, 14:21

Aí... Valew :D Mt boa a explicação... Entendi certinho sim, e ta funcionando blz...


Mas aih fui avançando... rs e to tentando colocar mais coisas:

Tipo, tentei fazer com que ele fizesse uma verficação, então se não tivesse tiver resultado, eles mostre uma mensagem.

Achei que o $result fosse uma variável do tipo:

Sem resultado = 0
1 resultado = 1
E assim vai... Aí eu faria: if ( $result = "") ou $result = "0"..

mas quando eu tentei não deu certo.. : / Aih eu colokei um echo pra exibir o $result, e tem um resultado estranho, que não sei o que significa:
Resource id #3

Seja qual for o resultado da busca...


Aih eu queria saber como fazer essa verificação, imaginei que deev existir algum comando para fazer o que falei, e transformar o resultado em número. Aí eu faria tipo isso, certo ? >


<?
$sql = "select * from galeria where $campo LIKE '%$localizacao%'";
$result = mysql_query ($sql);

?>

<head>
</head>
<body>
<?php
if( $result = "" || $result = "Resource id #3")
{
echo "<center> Desulpe, não localizamos<b> \"$localizacao\" </b>em nosso banco de dados.<br><br>
Tente diminuir os critérios de sua busca ou modificar os mesmos.<br></center>";
}
else {
?>
// Aki ele começa uma tabela pra mostrar os resultados
 <?php
   $contador = '1';
while ( $valor = mysql_fetch_array($result) )
{
?>

"""aki o html, com "echo" para as partes que eu quero exibir o resultado"""

 <?php
$contador++;
}
?>
// Aki o fechamento da tal tabela que mostra os resultados (caso tenha).
<?php
} // Fecha o else que criei lá em cima
?>

Se alguém aí souer. Pelo menos se tem como fazer isso ou eu to falando xxxxxx, tsc, Vlw ! :P (y)

########## Editei

Tipo, já consegui :D ... COntinuei tentando aki e vendo outros tópicos pra aprender e deu certo. Pra quem não sabe e quer saber:

EMbaixo de: $result ...

Eu criei mais uma variável:

$linhas = mysql_num_rows($result)

Logo, $linhas retornará o número de linhas que tem o resultado. (cada linha 1 result)...

Então é só fazer a verificação, que fiz da seguinte forma:

<?php
if($linhas != '0' && $localizacao != '')
{
?>
Ou seja:
Se $linhas for diferente de 0 ou $localizacao for diferente de '' (Localizacao é o nome do meu form de busca, eh a palavra q o cara buscou... Fiz isso para que quando ocara não digite nada, só de enter, não retorne todos os resultados.


Aí viria o código normal, que exibe os results, e embaixo, fechando:

<?php
}
else {
echo "<center> Desulpe, não localizamos<b> \"$localizacao\" </b>em nosso banco de dados.<br><br>
Tente diminuir os critérios de sua busca ou modificar os mesmos.<br></center>" ;
}
?>

ou seja:
} Pra fechar akele if lá de cima...

Else: Se não, exibir a seguinte mensagem: "bla bla bla"...

(lembrando que o if foi para ser busca sem resultados, ou o caar naum digitar nada... Logo, o else mostrará isso ´para quando a busca não encontrar resultados, ou quando o cara não digitar nada)..

Bem, rs, tentei explicar, mas como sou novato e explico meio mal, rs, não sei se ficou bom...

De qualquer forma, valew !

Edição feita por: G3r4ld0, 22/09/2004, 15:24.


#7 tatictm

tatictm

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 16/09/2008, 17:01

Oie!!!
Bom...nem sei se ainda vão responder esse tópico, pq é meio velho, né?! Mas blz...
Lá vai minha dúvida:

Onde são declaradas as variáveis $campo e $localização utilizadas na query??? :huh:

Desculpem se for um pergunta besta, mas é q sou iniciante no php...hehe ;]

#8 Ferlouko x)

Ferlouko x)

    Normal

  • Usuários
  • 72 posts
  • Sexo:Masculino
  • Localidade:Guararapes
  • Interesses:PHP, OOP, DESIGN PATTERNS, mySQL, XML, (X)HTML, CSS, TABLELESS, PHP-GTK, JAVA, C++.

Posted 16/09/2008, 23:36

pelo que eu entendi..

eh soh fazer o seguinte..
ow você pode pegar diretamente de uma GET

<?
$localizacao = $_GET['localizacao'];
$campo = $_GET['campo'];
?>
ow se não através de um tratamento por IFs
para dar uma segurança extra.. (no caso do campo e tb na ausência da localização)
<?php
/**
* @author. . .Fernando Rodrigo Cardoso < ferlouko (at) gmail.com >
* @desc. . . .Desenv. PHP, (X)HTML, CSS, JS E AJAX, aprendiz JAVA, aprendiz C/C++ (...)
*/
?>




1 user(s) are reading this topic

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

IPB Skin By Virteq