Ajuda - Busca - Membros - Calendário
Versão Completa: Busca Interna Com Filtro!
Fórum Script Brasil > Programação & Desenvolvimento > PHP
Naty_Za
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!!

CODE

<?
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
ESerra
PAra utilizar 2 valores para buscar você deve usar a sintaxe:
SQL
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>
...
Naty_Za
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..

CODE

<? 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!!!
ESerra
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)...
Naty_Za
bom, o termo em questão é o id_cat né??

aonde exatamente que eu mudo isso????

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

obrigadaa....
Naty_Za
CONSEGUI!!!!!!!!!!!!!!!!!!! biggrin.gif rolleyes.gif cool.gif

CODE

<? 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!!!!!!!!!!!!!!!!!!!!!!!

tongue.gif
Naty_Za
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


CODE
<? 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>
";

}
}
?>
ESerra
Faz um teste com a variável, se ela estiver vazia atribui o valor %, pois % é o coringa do MySQL que correponde ao * do Windows...
Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2013 Invision Power Services, Inc.