Ir para conteúdo

POWERED BY:

Arquivado

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

pcmm

Sistema de Busca

Recommended Posts

pessoal fiz um sistema de busca parecido com o do DU Portal para realizar busca na tabela 'noticia'.

 

Funcionou sem erros o único problema é que se eu digitar mais de uma palavra ele nao acha nada...

 

Como faço pra corrigir isso?

o sistema tem três páginas....

 

Formulário de busca:

<form action="busca_redirect.asp" method="post" name="form1">
Redirecionador:

<%response.redirect "noticia_busca_resultado.asp?busca=" & request.form("busca")%>
Resultado:

SELECT *FROM noticiasWHERE status = true AND (titulo LIKE '%keyword%' or html LIKE '%keyword%')ORDER BY data DESC

Compartilhar este post


Link para o post
Compartilhar em outros sites

veja se isto que voce quer, se não for bem isto vai ajudar um pouco

<% 'o option explicit é utilizado para criar a obrigatoriedade 'de anunciar cada variavel com o dim, de forma a não criar 'variáveis por engano, principalmente por erro de escrita. Option Explicit 'Vamos começar por criar o formulário para efectuar a busca. 'Definimos a variável com a string para efectuar a busca Dim busca  'Vamos buscar a string de busca busca = request.form("busca") 'Se a string for vazia, então não existiu qualquer busca, 'e vamos criar o formulário. Se a string existir, então 'vamos efectuar a busca com ela. if busca = "" then%> <form action="#" method="post" name="search"> <table cellspacing="1" cellpadding="1" border="1" bordercolor=black> <tr> <td><input type="text" name="busca" size="100" maxlength="300"></td>  <td><input type="submit" value="Search"></from></td>  </tr> </table> <%response.write "<center>Esta busca reporta as palavras que estiverem no mesmo valor do campo<br>"response.write "Nao faz busca em valores de campos diferentes,<br> "response.write "Ex:  campo1=wagner conectou na internet <br> campo2=wagner foi jogar bola<br>"response.write "Se procuro por (wagner bola) me retorna (campo2),<br>"response.write" e nao campo1 por existir o nome wagner e campo2 por conter wagner e bola<br>"response.write "Funciona como uma busca de maior precisao em campos</center>"else 'definimos a variável para a conecção à base de dados Dim dbGlobalWeb 'definimos o recordset para conter a informação da BD Dim rsGlobalWeb 'definimos a variável que vai guardar as declarações de SQL a usar Dim SqlJunk 'definimos dbGlobalWeb como um objecto para uso com a BD  Set dbGlobalWeb=Server.CreateObject("ADODB.Connection") 'Fazemos a ligação à base de dados dbGlobalWeb.Open "PROVIDER=MSDASQL; DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("busca.mdb")  'definimos outro objecto para o Recordset Set rsGlobalWeb = Server.CreateObject("ADODB.Recordset") 'Vamos começar a criar a declaração de SQL SqlJunk = "SELECT * FROM tabela WHERE" 'definimos todas as variáveris que vamos usar na 'criação da declaração de SQL dim espaco dim cada_palavra dim comp dim retirar 'Começamos por retirar os espaços a mais à esquerda 'e à direita da string de busca busca = trim(busca) 'Vamos retirar da string de busca cada uma das palavras 'existentes. Para isso, vamos separar cada uma das palavras, 'e só paramos quando já não existirem espaços na string. 'Se não existem espaços, é porque só existe uma palavra. do until instr(1,busca,chr(32)) = 0 'Começamos por verificar em que posição está o espaço 'mais à esquerda. espaco = instr(1,busca,chr(32)) 'Retiramos da String apenas uma palavra, e cada_palavra = left(busca,espaco-1) 'adicionamos essa palavra à busca na declaração de SQL SqlJunk = SqlJunk & " campo LIKE '%" & cada_palavra & "%' and" 'Verificamos o comprimento total da string, comp = len(busca) 'para determinar qual o comprimento depois de ter retirado 'uma palavra. retirar = comp - espaco 'A string que vai passar a ser usada será a inicial 'menos a palavra já colocada na declaração de SQL. busca = right(busca,retirar) 'Vamos fazer isto até sobrar apenas uma palavra. loop 'Quando sobrar só uma palavra, ou se desde início só 'existir uma, ela será adicionada neste ponto à 'declaração de SQL. SqlJunk = SqlJunk & " campo LIKE '%" & busca & "%'" 'Ordenamos os registos que vamos obter alfabeticamente, 'para mais fácil leitura. SqlJunk = SqlJunk & " ORDER BY id" 'executamos a declaração de SQL para obtermos a informação 'pretendida da nossa base de dados. rsGlobalWeb.Open SqlJunk, dbGlobalWeb, 3 'Aqui vamos verificar se a busca retornou algum valor If Not rsGlobalWeb.BOF Then%> <table cellspacing="1" cellpadding="1" border="1" bordercolor=black> <tr> <td width="350">Title</td>  </tr> </table> <table cellspacing="1" cellpadding="1" border="1" bordercolor=black> <%'Criamos um loop para visualizar a informação completa Do While Not rsglobalweb.EOF%> <tr> <td width="350"><%=rsGlobalWeb("novo")%></td>  </tr> <% rsGlobalWeb.Movenext Loop%> </table> <% 'Caso não tenha sido encontrado qualquer valor else%> <table cellspacing="1" cellpadding="1" border="1" bordercolor=black> <tr> <td>Não foi encontrado qualquer registo.</td>  </tr> <%End If 'Fechamos o recordset e a ligação à base de dados. rsGlobalWeb.Close set rsglobalweb = nothing dbGlobalWeb.Close set dbglobalweb = nothing end if%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é mais simples. http://forum.imasters.com.br/public/style_emoticons/default/yes.gif

<%session("db")="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.MapPath ("busca.mdb")Set db=Server.CreateObject("ADODB.Connection")	db.Open session("db")palavra = request("palavra")palavras = split(palavra,",")'---------------------------------------------------------------------------for i = 0 to ubound(palavras) Strsql = "Select * from tabela where campo like '%"&palavras(i)&"%'" Set Objrs =db.Execute(strsql)Do while not Objrs.Eof  response.write(Objrs("campo") &"<br>")Objrs.MoveNext LoopNext %>

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.