Un motore di ricerca interno in Asp

Siti dinamici con ASP
Impara a creare siti dinamici professionali con ASP

Scritto da Luca Ruggiero nella sezione Asp

Introduzione

Uno strumento di navigazione a mio avviso fondamentale in un sito è il motore di ricerca, ovvero una utility in grado di permettere ad un utente di trovare rapidamente quello che cerca, semplicemente immettendo una o più parole in una casella di testo ed avviare l'applicazione che tirerà fuori i risultati desiderati. Una simile applicazione deve basarsi su un contenitore di dati su cui effettuare una ricerca: lo strumento per eccellenza è ovviamente un database, ma è possibile implementare un simile meccanismo anche su file di testo o strutture Xml.

Ad ogni modo, in questo Articolo implementeremo un semplice ed efficace esempio basandosi su di un database Ms Access 2000.

Struttura del database

Il database che utilizzeremo, come già detto, sarà un file Access, preferibilmente nella versione 2000. Creiamo un file e chiamiamolo database.mdb; al suo interno creiamo la tabella documenti che sarà composta dai campi id (Contatore), titolo (Testo), url (Testo), descrizione (Memo). Supponiamo quindi che si tratti di un motore che ricerca articoli e/o documentazione interna al nostro sito, dove i file si chiamano, ad esempio, 01.asp, 02.asp, 03.asp ecc.

Riempiamo quindi il database con alcuni record di prova, avendo cura di specificare una descrizione dettagliata dell'argomentazione trattata, dato che sul campo descrizione effettueremo la ricerca.

La pagina di ricerca

Creiamo adesso il file ricerca.asp e disponiamolo nella stessa cartella in cui abbiamo salvato il database; questo file presenta sia il form Html di ricerca che il codice dell'applicazione.

Di seguito espongo il codice completo:

<%@LANGUAGE = JScript%>
<html>
    <head>
        <title>Cerca nel sito</title>
    </head>
<body>

<h3>Cerca nel sito</h3>

<form method="POST" action="ricerca.asp?cerca=OK">
    <input type="text" name="stringa">
    <input type="submit" value="Cerca">
</form>

<%
    var cerca = new String(Request.QueryString("cerca"));
    var testo = new String(Request.Form("stringa"));
    var apice = testo.replace(/'/g,"''");
    var stringa = apice.split(" ");
    if (cerca == "OK")
    {
        if (testo == "" || testo == "undefined")
        {
            Response.Write("<p>Inserire almeno una parola per effettuare una rcerca</p>");
        }
        else
        {
            var Cn = new ActiveXObject("ADODB.Connection");
                Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("database.mdb"));
            var sql = "SELECT * FROM documenti WHERE";
            for (var i=0; i<stringa.length; i++)
            {
                if (i > 0)
                {
                    sql += " AND";
                }
                sql += " descrizione LIKE '%" + stringa[i] + "%'";
            }
            var Mostra = Cn.Execute(sql);
            if (Mostra.EOF)
            {
                Response.Write("<p>Nessun risultato</p>");
            }
            else
            {
                while (!Mostra.EOF)
                {
                    with (Response)
                    {
                        Write("<p>");
                        Write("<a href='" + Mostra("url") + "'>" +Mostra("titolo") + "</a><br>");
                        Write(Mostra("descrizione"));
                        Write("</p>");
                        Mostra.MoveNext();
                    }
                }
            }
            Cn.Close();
        }
    }
%>

</body>
</html>
Per quanto lungo ed articolato, lo script appena proposto è davvero semplice e di facile intuizione: passiamo dunque in rassegna le fasi fondamentali.

Avendo utilizzato un'unica pagina per il modulo di ricerca e per il relativo script, dobbiamo fare in modo che quest'ultimo non parta automaticamente al caricamento della pagina: impostiamo quindi nella variabile di tipo QueryString cerca lo script; se il valore di questa variabile sarà OK allora faremo partire la ricerca:
<form method="POST" action="ricerca.asp?cerca=OK">
Fondamentale la fase di recupero dei dati:
var testo = new String(Request.Form("stringa"));
var apice = testo.replace(/'/g,"''");
var stringa = apice.split(" ");
La necessità è quella di evitare che un apice inserito nella stringa di ricerca generi un errore Sql; in secondo luogo dividiamo col metodo split() la nuova stringa appena generata, in modo da creare un Array di stringa, i cui item sono divisi per il carattere spazio (" ").

By-passiamo i controlli ed entriamo direttamente nell'else, e vediamo com'è composta la nostra stringa Sql. Per prima cosa dichiaro la variabile sql
var sql = "SELECT * FROM documenti WHERE";
e la lascio volutamente incompleta, dato che devo prevedere che l'utente potrà inserire un numero di parole per la ricerca a me sconosciuto; eseguo quindi un ciclo for
for (var i=0; i<stringa.length; i++)
{
    if (i > 0)
    {
        sql += " AND";
    }
    sql += " descrizione LIKE '%" + stringa[i] + "%'";
}
sulla lunghezza della stringa ed aggiungo dinamicamente elementi Sql in funzione della ricerca dell'utente. Per avere un'idea della stringa Sql che sarà generata, fate un Response.Write
Response.Write(sql);

I più cliccati della sezione Asp

:: Un semplice form mail in Asp (52.079)

:: Creazione di un Guestbook in Asp (50.971)

:: Creazione di un'area di accesso riservato in Asp (45.575)

:: Connessione ad un database MySql con Asp (25.227)

:: Connessione ad un database Microsoft SQL Server con Asp (24.398)

:: Asp e database (23.285)

:: Differenza tra i metodi get e post e recupero dei dati, attraverso Asp (22.643)

:: Una semplice area di accesso riservato senza DB in Asp (21.549)

:: Riscrivere le URL con Asp (19.946)

:: Creazione di un Sondaggio in Asp (19.221)

IN EVIDENZA
DOWNLOAD