Jump to content
Fórum Script Brasil
  • 0

Sistema de busca palavra impedindo a busca


Phil Santos

Question

Olá pessoal,

 

Antes de mais nada gostaria de pedir perdão quanto à indentação do códígo que vou postar aqui. Estou aprendendo.

 

Eu fiz um sistema de busca, na realidade eu aprendi com um tutorial, está dando tudo certo, exceto por uma coisa, existem 4 situações:

 

1- Não digito nada no campo de busca e clico no botão. Resultado: o sistema da a mensagem correta.

 

2- Digito uma palavra ou misturas de letras que eu sei que não estão no banco. Resultado: o sistema da a mensagem correta.

 

3- Eu digito 2 ou mais palavras que eu sei que estão no banco. Resultado: o sistema exibe o reultado corretamente.

 

4- Eu digito 1 palavra que eu sei que está no banco e 1 palavra que eu sei que não está no banco.Resultado: o sistema desconsidera a palavra que está no banco e dá a mensagem de "Nenhum resultado encontrado" ao invés de considerar a palavra que está no banco e exibir o resultado.

 

A palavra que não existe está impedindo de o resultado para a palavra que existe aparecer. Eu preciso que o resultado apareça mesmo que o usuário digite 10 palavras ou mais e apenas uma constar no banco.

 

Peço aos colegas que me ajudem a resolver esse problema por gentileza, valeu!

 

Segue o código:

 

  1. <?php
  2. if(isset($_POST['botao'])){
  3. $busca = $_POST['busca'];
  4. if($busca == "" or $busca == " "){
  5. header('location:http://www.meudominio.com.br/digitealgoparaabusca.php');
  6. }else{
  7. $busca_dividida = explode(' ',$busca);
  8. $quant = count($busca_dividida);
  9. $id_mostrado = array("");
  10. for($i=0;$i<$quant;$i++){
  11. $pesquisa = $busca_dividida[$i];
  12. $sql = mysql_query("SELECT * FROM busca WHERE conteudo LIKE '%$pesquisa%'");
  13. $quant_campos = mysql_num_rows($sql);
  14. if($quant_campos == 0){
  15. header('location:http://www.meudominio.com.br/nenhumresultado.php');
  16. }else{
  17. while($linha = mysql_fetch_array($sql)){
  18. $id = $linha['id'];
  19. $titulo = $linha['titulo'];
  20. $conteudo = $linha['conteudo'];
  21. if(!array_search($id, $id_mostrado)){
  22. echo "<div class='resultado'>
  23. <p>".$conteudo."</p>
  24. </div>
  25. <br />
  26. ";
  27. array_push($id_mostrado, $id);
  28. }
  29. }
  30. }//do else
  31. //for($i;$i<count($id_mostrado);$i++){
  32. //echo $id_mostrado[$i]."<br />";
  33. //}
  34. }//do for
  35. }//so else campo vazio
  36. }//do if botão pressionado
  37. ?>

 

Atenciosamente,

 

Phil

 

Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Por que fazer a consulta em um loop? Não faz sentido algum. Sempre que um resultado não for encontrado, será feito o redirecionamento. Por isso o problema

Use uma única consulta, juntando os filtros do WHERE com OR. Nunca faça consultas em loops. Isso gera uma enorme perda de desempenho.

Veja: http://rberaldo.com.br/o-problema-do-n-mais-1/

Sugiro também ler meu guia gratuito de dias e fundamentos. Link na minha assinatura

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5  e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/


 

Link to comment
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.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...