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.
