ASPcenter.net

1 marzo 2010

Un motore di ricerca interno con ASP

Archiviato in: Search Engine — Tag: — lukeonweb @ 09:56

Un’importante utility di navigazione per un sito Web è rappresentata dalla possibilità offerta agli utenti di effettuare ricerche di contenuti interni al sito stesso attraverso un motore di ricerca.

L’esempio di questo articolo utilizza un database come contenitore di dati. Ci connetteremo al database e, a seconda della chiave (o delle chiavi) di ricerca impostata, otterremo dei risultati oppure dei messaggi di insuccesso.


Il database

Utilizzeremo un database MS Access che chiameremo database.mdb in cui creeremo una tabella chiamata documenti, corredata dai seguenti campi:

  • id – Contatore
  • titolo – Testo, 50 caratteri
  • descrizione – Testo, 255 caratteri
  • url – Testo, 100 caratteri

Il campo “descrizione” rappresenta la fonte di dati a cui attingere informazioni in fase di ricerca, mentre il campo “url” rappresenta la pagina di destinazione.

Il form di ricerca

Segue il codice HTML da implementare nelle pagine del sito per effettuare la ricerca attraverso l’inserimento delle stringhe di ricerca da parte degli utenti:

<form method="get" action="cerca.asp">
 <input type="text" name="query">
 <input type="submit" value="Cerca">
</form>

Utilizzoamo il metodo get e puntiamo al file cerca.asp di cui vedremo il codice nel prossimo paragrafo.

Algoritmo di ricerca ed esposizione dei risultati

Veniamo dunque al cuore dell’applicazione, ovvero la pagina di ricerca, di cui segue il codice completo:

<%@LANGUAGE = VBScript%>
<html>
<body>

<%
 Dim testo, query
 testo = Replace(Request.QueryString("query"), "'", "''")
 query = Split(Server.HTMLEncode(testo), " ")
 If Len(Trim(testo)) = 0 Then
  Response.Write "Inserire un testo per la ricerca"
 Else
  Dim sc, cn, rs, sql
  sc = "driver={Microsoft Access Driver (*.mdb)};dbq="
  sc = sc & Server.MapPath("database.mdb")
  Set cn = Server.CreateObject("ADODB.Connection")
  cn.Open sc
  sql = "SELECT * FROM documenti WHERE"
  For i = 0 To Ubound(query)
   If i > 0 Then
    sql = sql & " AND"
   End If
   sql = sql & " descrizione LIKE '%" & query(i) & "%'"
  Next
  Set rs = cn.Execute(sql)
  If rs.EOF Then
   Response.Write "Nessun risultato per la ricerca effettuata"
  Else
   With Response
    While rs.EOF = False
     .Write "<a href='" & rs("url") & "'>" & rs("titolo") & "</a>"
     .Write "<br>" & rs("descrizione") & "<br><br>"
     rs.MoveNext()
    Wend
   End With
  End If
  Set rs = Nothing
  cn.Close()
  Set cn = Nothing
 End If
%>

</body>
</html>

Focalizziamo adesso l’attenzione sui punti salienti.

testo = Replace(Request.QueryString("query"), "'", "''")

Nella variabile “testo” recupero la querystring “query”, ovvero il nome del campo del modulo di ricerca, effettuando un controllo per l’apice.

query = Split(Server.HTMLEncode(testo), " ")

Nella variabile “query” controllo il codice HTML che potrebbe essere usato come chiave di ricerca e divido la stringa stessa in un array, in funzione dello spazio vuoto.

sql = "SELECT * FROM documenti WHERE"
For i = 0 To Ubound(query)
 If i > 0 Then
  sql = sql & " AND"
 End If
 sql = sql & " descrizione LIKE '%" & query(i) & "%'"
Next

La fase più importante del codice ASP è rappresentato dalla stringa SQL e dalla sua costruzione. Creiamo una stringa SQL base a cui aggiungiamo una seconda fase soggetta ad un ciclo, atto a recuperare tutti gli item dell’array di stringa; filtriamo il ciclo con una condizione il cui scopo è quello di aggiungere un “AND” per impostare N condizioni nella query.

Una volta costruita dinamicamente la stringa SQL la eseguiamo e mostriamo i risultati della ricerca.

Nessun commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URL

Lascia un commento

ASPcenter.net è il blog italiano su ASP, ASP.Net, VB.Net, C# e Visual Studio - Funziona con WordPress