• 0
Sign in to follow this  
Naty_Za

Busca Interna Com Filtro!

Question

Oi pessoal!!! To com um probleminha....

Pra que sabe programar isso deve ser facinho, porque eu vejo muuuitos sites usando..

é algo tão simples... um site de cadastros, com um sistema de busca por filtro..

ex: a pessoa procura por caixas, e pode escolher se quer em todo o site ou só em um determinado lugar.

http://www.guiaconstruirereformar.com.br/piadas/naty.php

só que eu não consigo filtrar isso.. quando escrevo "caixas" e deixo pra buscar em todas ele lista certinho, mas

se eu selecionar uma categoria, ele volta com resultado 0

Qual o erro?? me ajudem pls!!

<?
include("Connections/config.php");
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>natalia</title>

</head>

<body>
<div align="center">
  <table width="700" border="1" cellpadding="2" cellspacing="0" bordercolor="#E6E6E6">
    <tr valign="top"> 
      <td colspan="2"> </td>
    </tr>
    <tr valign="top"> 
      <td width="143" align="left" valign="top" bgcolor="#F8F8F8"><span class="style10"><strong>Buscar 
        Cadastro</strong><br>
        </span> <form name="form1" method="post" action="naty.php">
          <div align="center"> 
            <input name="palavra" type="text" id="palavra">
            <strong><font size="1" face="Verdana, Arial, Helvetica, sans-serif"> 
            <select name="categoria" size="1" id="categoria">
              <option value="<? echo "$id"; ?>">- Todas as Categorias -</option>
              <?php


// conexao com o banco de dados aqui....
$sql = mysql_query("SELECT * FROM cat ORDER BY nome ASC");
while($dados = mysql_fetch_array($sql)) { 
echo' <option value="'.$dados['id'].'">'.$dados['nome'].'</option> ' . "\r\n";
}
?>
</select>
            </font></strong><br>
            <input type="submit" name="Submit" value="Buscar">
          </div>
        </form>
     </td>
      <td width="543" align="left" valign="top"><div align="center"><br>
          <table width="529" border="0" cellspacing="0" cellpadding="0">
            <tr> 
              <td width="529" align="left" valign="top"> 
                <? if (!empty($_POST["palavra"])) { 
$palavra = str_replace(" ", "%", $_POST["palavra"]); // Altera os espaços adicionando no lugar o simbolo % 

// Verifica a categoria 
$sql_cat = ""; 
if (isset($_POST["categoria"]) && is_numeric($_POST["categoria"])) { $sql_cat = " && id_cat='" . $_POST["categoria"] . "'"; } 
$qr = "SELECT * FROM piadas WHERE titulo LIKE ('%" . $palavra . "%'" . $sql_cat . ") ORDER BY titulo ASC"; // definimos para buscar no campo1 e ordenar pelo campo que você quiser.
$sql = mysql_query($qr) or die (mysql_error()); // Executa a query no Banco de Dados 
$total = mysql_num_rows($sql); // Conta o total ded resultados encontrados 
echo "<font face=Verdana, Arial, Helvetica, sans-serif><font size=1>Sua busca retornou <b>$total</b> resultados.</font><br><br>\n"; // mostra quantos resultados retornou e logo depois exibe
while ($dados = mysql_fetch_array($sql)) {
$campo1 = $dados["titulo"];
$campo2 = $dados["piada"];
$campo3 = $dados["id_cat"];
$campo4 = $dados["cliques"];
$campo5 = $dados["id"];


echo "<font face=Verdana, Arial, Helvetica, sans-serif><font size=1><a href=\"piada.php?id_cat=$campo3&id=$campo5\">$campo1</a> - ($campo4 visualizações)</font><br>";
} 
} 
?>
              </td>
            </tr>
          </table>
        </div></td>
    </tr>
    <tr valign="top"> 
     
    </tr>
  </table>
</div>
</body>
</html>

obrigadaa

Natália

Share this post


Link to post
Share on other sites

7 answers to this question

Recommended Posts

  • 0

PAra utilizar 2 valores para buscar você deve usar a sintaxe:

SELECT * FROM tabela WHERE coluna1 = '$valor_pra_coluna1' AND coluna2 = '$valor_para_coluna2'

O que você tem que notar no seu select é que, o valor que vem da lista tem qu estar declarado no "value"... no value do seu código está uma numereção, por acaso os estados são guardados no BD pela numeração ou pelo nome? se for pelo nome o value deve passar de:

<option value="2">Alagoas</option>

<option value="4">Amapá</option>

<option value="3">Amazonas</option>

...

para

<option value="Alagoas">Alagoas</option>

<option value="Amapá">Amapá</option>

<option value="Amazonas">Amazonas</option>

...

Share this post


Link to post
Share on other sites
  • 0

Então, mas ele é puxado certinho pelo BD.. na tabela das categorias tem "id" e "nome"

mas o erro agora mudou!! agora ele busca certinho na categoria especificada, só que na hora que eu deixo

pra buscar em todas as categorias, ele volta com resultado 0..

<? if(!empty($_POST["palavra"])) {
$palavra = str_replace(" ", "%", $_POST["palavra"]); // Altera os espaços adicionando no lugar o simbolo %
$categoria = $_POST['categoria'];
$qr = "SELECT * FROM piadas WHERE titulo LIKE '%".$palavra."%' and id_cat = '$categoria' ORDER BY titulo ASC"; // definimos para buscar no campo1 e ordenar pelo campo que você quiser.

e agora???

meu ajuda.. pls!!!

Share this post


Link to post
Share on other sites
  • 0

Claro.. na hora que você não seleciona nenhum estado o valor de um dos condicionais passa a ser "" (vazio) e ai a query da problema, o que você pode fazer é testar o valor desse condicional, se ele for diferente de vazio você usa uma query (sem o termo em questão), e ele estiver preenchido, você usa outra (que é a atual)...

Share this post


Link to post
Share on other sites
  • 0

bom, o termo em questão é o id_cat né??

aonde exatamente que eu mudo isso????

desculpe, mas é que to meio perdida nisso!!!

obrigadaa....

Share this post


Link to post
Share on other sites
  • 0

CONSEGUI!!!!!!!!!!!!!!!!!!! :D :rolleyes: B)

<? if(!empty($_POST["palavra"])) {
$palavra = str_replace(" ", "%", $_POST["palavra"]); // Altera os espaços adicionando no lugar o simbolo %
$categoria = $_POST['categoria'];
if (empty($categoria)) {
   $qr = "SELECT * FROM piadas WHERE titulo LIKE '%".$palavra."%' ORDER BY titulo ASC";
} else {
   $qr = "SELECT * FROM piadas WHERE titulo LIKE '%".$palavra."%' and id_cat = '$categoria' ORDER BY titulo ASC"; // definimos para buscar no campo1 e ordenar pelo campo que você quiser.
}

Valeu pelas dicas ESerra!!!!!!!!!!!!!!!!!!!!!!!

:P

Share this post


Link to post
Share on other sites
  • 0

Gente, nesse sisteminha de busca, tem a caixa pra pessoa pesquisar, escrever o que quer e um menulist em baixo com as categorias pra pessoa escolher.

Como eu faço, pra quando a pessoa não escrever nada na caixa e clicar em buscar em uma determinada categoria, ele aparecer tudo o que tiver daquela categoria.

porque hj se eu faço isso, ele volta em branco.. eu queria que voltasse com todos os registros daquela categoria...

como fazer??? to postando o código...

valewww

<? if(!empty($_POST["palavra"])) {
$palavra = str_replace(" ", "%", $_POST["palavra"]); // Altera os espaços adicionando no lugar o simbolo %
$categoria = $_POST['categoria'];
if (empty($categoria)) {
   $qr = "SELECT * FROM cadastros WHERE titulo LIKE '%".$palavra."%' or servicos LIKE '%".$palavra."%' or palavras LIKE '%".$palavra."%' ORDER BY titulo ASC";
} else {
   $qr = "SELECT * FROM cadastros WHERE titulo LIKE '%".$palavra."%' or servicos LIKE '%".$palavra."%' or palavras LIKE '%".$palavra."%'and id_cat = '$categoria' ORDER BY titulo ASC"; 

// definimos para buscar no campo1 e ordenar pelo campo que você quiser.
}

$sql = mysql_query($qr) or die (mysql_error()); // Executa a query no Banco de Dados 
$total = mysql_num_rows($sql); // Conta o total de resultados encontrados 
echo "<font face=Verdana, Arial, Helvetica, sans-serif><font size=2>Sua busca retornou <b>$total</b> resultados.</font><br><br>\n"; // mostra quantos resultados retornou e logo depois exibe
while ($dados = mysql_fetch_array($sql)) {
$campo1 = $dados["titulo"];
$campo2 = $dados["servicos"];
$campo3 = $dados["id_cat"];
$campo4 = $dados["cliques"];
$campo5 = $dados["id"];
$campo6 = $dados["http"];
$campo7 = $dados["endereco"];
$campo8 = $dados["email"];
$campo9 = $dados["tel"];
echo"
<font face=Verdana, Arial, Helvetica, sans-serif><strong><font size=1><a href=\"$campo6\" 
target=\"_blank\" >$campo1</strong></a></font><br>
<i>Serviços: $campo2</i><BR>
Endereço: $campo7<BR>
Tel: $campo9<BR>
Email: <a href=mailto:$campo8>$campo8</a><BR>
<BR>
";

} 
} 
?>

Share this post


Link to post
Share on other sites
  • 0

Faz um teste com a variável, se ela estiver vazia atribui o valor %, pois % é o coringa do MySQL que correponde ao * do Windows...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this