Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Un motore di ricerca in Flash con ASP

Come costruire un motore di ricerca su database utilizzando la tecnologia ASP e Flash
Come costruire un motore di ricerca su database utilizzando la tecnologia ASP e Flash
Link copiato negli appunti

Premessa

In questo tutorial cercherò di spiegare nel modo più semplice possibile come arrivare a costruire una pagina in flash che faccia una ricerca in un database, come tutti sappiamo flash non è in grado da solo di interrogare un database e raccogliere i risultati quindi occorrerà appoggiarsi ad una pagina latoserver che faccia il lavoro al posto suo, in questo caso utilizzeremo ASP.

La Pagina ASP

In basso metterò per esteso il codice della pagina ASP

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' " x = 1
oRS.Open strSQL, oConn,1,3
conta=oRS.RecordCount if not oRS.Eof then
%>conta=<%=conta%>&gb_Soprannome=<%=oRS("Soprannome")%>&gb_Cognome=<%=oRS("Cognome")%>&gb_Ruolo=<%=oRS("Ruolo")%>&Soprannome=<%=oRS("Soprannome")%>&Cognome=<%=oRS("Cognome")%>&Ruolo=<%=oRS("Ruolo")%><% Do while not oRS.EOF
%>&Soprannome<%=x%>=<%=oRS("Soprannome")%>&Cognome<%=x%>=<%=oRS("Cognome")%>&Ruolo<%=x%>=<%=oRS("Ruolo")%><%
x = x + 1
oRS.MoveNext
Loop
end if Set oRS = Nothing
oConn.Close
Set oConn = Nothing
%>

Aprite il blocco note, copiate questo codice e salvate la pagina in "ricerca.asp", oppure seguite le spiegazioni in basso. Iniziamo ad analizzare il codice in alto, per cercare di rendere più semplice la comprensione copierò man mano il codice ed evidenzierò in rosso le parti trattate nella spiegazione.

Come prima cosa dichiaro le variabili che utilizzerò:

<%@Language="VBScript"%> <%
Dim oRS, oConn
........

Subito dopo le utilizzo per aprire una connessione con il server

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection")

Poi tento di stabilire la connessione al database

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open

Il database si chiama "test.mdb", a questo punto dichiaro un'ulteriore variabile di nome "parola" e una di nome "parola2"

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search") parola2=Request("Scelta")

questa servirà a far capire ad ASP che interrogherà il database solo quando riceverà il valore da "Search" o il valore di "Scelta". Fatto questo andiamo a scrivere un pò di SQL dichiarando ancora una variabile di nome "strSQL" quindi scriviamo:

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' "

In pratica, la stringa sopra indica di aprire "tabella" e cercare dentro "Soprannome" i dati passati dalla variabile "parola" .

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' " x = 1
oRS.Open strSQL, oConn,1,3
conta=oRS.RecordCount

Dichiariamo poi la variabile x che ci servivà in seguito, e dichiarimo anche "conta" che preleverà il numero totale dei record .

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' " x = 1
oRS.Open strSQL, oConn,1,3
conta=oRS.RecordCount if not oRS.Eof then
%>conta=<%=conta%>&gb_Soprannome=<%=oRS("Soprannome")%>&gb_Cognome=<%=oRS("Cognome")%>&gb_Ruolo=<%=oRS("Ruolo")%>&Soprannome=<%=oRS("Soprannome")%>&Cognome=<%=oRS("Cognome")%>&Ruolo=<%=oRS("Ruolo")%><%

Qui indichiamo cosa dovra stampare a video per prima cosa stamperà "conta" ovvero il numero dei record trovati, subito dopo stamperà "Soprannome" con il valore del primo record trovato e cosi anche per "Cognome" e per "Ruolo" questa parte la stamperà una sola volta e solo con il primo risultato, sembrerebbe inutile invece è indispensabile per noi!! Successivamente inizierà a stampare tutti i record trovati

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' " x = 1
oRS.Open strSQL, oConn,1,3
conta=oRS.RecordCount if not oRS.Eof then
%>conta=<%=conta%>&gb_Soprannome=<%=oRS("Soprannome")%>&gb_Cognome=<%=oRS("Cognome")%>&gb_Ruolo=<%=oRS("Ruolo")%>&Soprannome=<%=oRS("Soprannome")%>&Cognome=<%=oRS("Cognome")%>&Ruolo=<%=oRS("Ruolo")%><% Do while not oRS.EOF
%>&Soprannome<%=x%>=<%=oRS("Soprannome")%>&Cognome<%=x%>=<%=oRS("Cognome")%>&Ruolo<%=x%>=<%=oRS("Ruolo")%><%
x = x + 1
oRS.MoveNext
Loop
end if

aggiungendo il valore di x che come si può notare aumenterà di uno per ogni record e grazie all'istruzione "oRS.MoveNext Loop" ripeterà questa operazione fino ad esaudire la richiesta. Ed alla fine chiudiamo tutto:

<%@Language="VBScript"%> <%
Dim oRS, oConn Set oRS = Server.CreateObject("ADODB.Recordset")
Set oConn = Server.CreateObject("ADODB.Connection") oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("test.mdb")
oConn.Open
parola=Request("Search")
parola2=Request("scelta")
strSQL="SELECT * FROM tabella WHERE soprannome LIKE '%"& parola &"%' AND ruolo LIKE '%"& parola2 &"%' " x = 1
oRS.Open strSQL, oConn,1,3
conta=oRS.RecordCount if not oRS.Eof then
%>conta=<%=conta%>&gb_Soprannome=<%=oRS("Soprannome")%>&gb_Cognome=<%=oRS("Cognome")%>&gb_Ruolo=<%=oRS("Ruolo")%>&Soprannome=<%=oRS("Soprannome")%>&Cognome=<%=oRS("Cognome")%>&Ruolo=<%=oRS("Ruolo")%><% Do while not oRS.EOF
%>&Soprannome<%=x%>=<%=oRS("Soprannome")%>&Cognome<%=x%>=<%=oRS("Cognome")%>&Ruolo<%=x%>=<%=oRS("Ruolo")%><%
x = x + 1
oRS.MoveNext
Loop
end if Set oRS = Nothing
oConn.Close
Set oConn = Nothing
%>

Questo tanto per non fare il semplice copia/incolla ;-))

La Pagina Flash

Aprite una nuova pagina in Flash (le misure lasciamo quelle predefinite). Con lo strumento testo disegnamo una variabile di tipo "input", spuntiamo la casella "Bordo/Sf" e come nome assegnamogli "Search".

Poi, sempre con lo strumento Testo, scriviamo sullo stage la parola "cerca" e premendo F8 assegniamogli il comportamento bottone. Come ultima cosa trasciniamo sullo stage da componenti una combo box, al nome componente assegnamo "combo" oi passiamo ad inserire i parametri alla combo box appena creata.

A labels inseriamo i seguenti valori:

0) Selezionare Categoria
1) Webmaster
2) Webdesigner
3) Programmatore

esattamente come nell'immagine:

Lo stage

Poi inseriamo in Data gli stessi valori ma lasciando vuoto il livello zero. Mentre in Change Handler scrivete: save_var. Adesso torniamo sullo stage e nel primo keyframe inseriamo il seguente codice:

function save_var() {
scelta = combo.getValue();
}
x = "1";
stop();

Mentre al bottone "cerca" assegnamo:

on (release) {
gotoAndPlay(2);
}

Fino a questo punto niente di più semplice.

Adesso creiamo un nuovo frame vuoto ed inseriamo nello stage tre variabili di testo dinamico ed assegniamogli i seguenti nomi: "gb_Soprannome" "gb_Cognome" "gb_Ruolo" e sistemiamole sullo stage più o meno come nell'immagine:

Variabili di testo dinamico

Queste saranno le variabili che raccoglieranno i record. Selezioniamole tutte e tre e premiamo F8. A questo punto assegniamo come comportamento "Movie Clip" e come nome "RISULTATO DB" (come nome d'istanza scriviamo "mc").

A questo punto selezioniamo la clip appena creata ed apriamo il pannello azioni ed iniziamo a scrivere. Prima di tutto assegniamo alla clip l'evento "al caricamento dati"

onClipEvent (data)

poi dichiariamo le variabili che abbiamo creato al suo interno:

gb_Soprannome = this["Soprannome"];
gb_Cognome = this["Cognome"];
gb_Ruolo = this["Ruolo"];

e successivamente inseriamo l'istruzione for come di seguito:

for (i=2; i<=conta; i++)

poi dichiariamo una nuova variabile che servirà ad assegnare un nuovo nome alle clip duplicate

nome = "mc"+i;

adesso utilizziamo l'istruzione "duplicateMovieClip" per duplicare la clip tante volte quanti sono i risultati

duplicateMovieClip (this, nome, i);

di seguito dichiariamo altre tre variabili:

Soprannome = "gb_Soprannome"+i;
Cognome = "gb_Cognome"+i;
Ruolo = "gb_Ruolo"+i;

e per finire vediamo di posizionare le variabili nelle clip che si creeranno:

_parent[nome].gb_Soprannome = this[Soprannome]=this["Soprannome" add i];
_parent[nome].gb_Cognome = this[Cognome]=this["Cognome" add i];
_parent[nome].gb_Ruolo = this[Ruolo]=this["Ruolo" add i];

adesso assegniamo un'azione per fare in modo che si incolonnino:

_parent[nome]._y = 40*i

Ok, il codice completo fino a questo momento è questo:

onClipEvent (data) {
gb_Soprannome = this["Soprannome"];
gb_Cognome = this["Cognome"];
gb_Ruolo = this["Ruolo"];
for (i=2; i<=conta; i++) {
nome = "mc"+i;
duplicateMovieClip (this, nome, i);
Soprannome = "gb_Soprannome"+i;
Cognome = "gb_Cognome"+i;
Ruolo = "gb_Ruolo"+i;
_parent[nome].gb_Soprannome = this[Soprannome]=this["Soprannome" add i];
_parent[nome].gb_Cognome = this[Cognome]=this["Cognome" add i];
_parent[nome].gb_Ruolo = this[Ruolo]=this["Ruolo" add i];
_parent[nome]._y = 40*i;
}

Torniamo sullo stage, selezioniamo di nuovo tutto, premiano F8 e creiamo una nuova clip "CONTENITORE DB" mentre per l'istanza utilizziamo il nome "contenitore".

Creazione nuovo clip

Adesso facendo doppio click sulla clip appena creata entriamo in modifica, aggiungiamo un layer per creare un piccolo filmato in attesa che le variabili vengano caricate. Quindi con lo strumento testo creiamo una variabile di testo dinamico al suo interno e scriviamo "Loading..". Posizioniamola al centro rispetto alla clip precedentemente creata ed assegniamogli come nome "attesa". Selezioniamola e premiamo di nuovo F8 per creare una clip come nome "LOADING" mentre come nome all'istanza "loadingdb":

Conversione in simbolo

A questo punto dovremmo trovarci all'interno della clip contenitore, quindi selezioniamo nuovamente la clip "mc" ed apriamo il pannello delle azioni dovremmo trovare il codice scritto precedentemente, ok aggiungiamo alla fine un'altra riga

_parent._visible = 1;
_root.contenitore.loadingdb.attesa = "";

con questa semplice aggiunta faremo in modo che la clip sparisca al momento dell'arrivo dei dati. Forza che ce l'abbiamo quasi fatta!! Adesso riepilogo il codice che abbiamo scritto sulla clip "mc".

onClipEvent (data) {
gb_Soprannome = this["Soprannome"];
gb_Cognome = this["Cognome"];
gb_Ruolo = this["Ruolo"];
for (i=2; i<=conta; i++) {
nome = "mc"+i;
duplicateMovieClip (this, nome, i);
Soprannome = "gb_Soprannome"+i;
Cognome = "gb_Cognome"+i;
Ruolo = "gb_Ruolo"+i;
_parent[nome].gb_Soprannome = this[Soprannome]=this["Soprannome" add i];
_parent[nome].gb_Cognome = this[Cognome]=this["Cognome" add i];
_parent[nome].gb_Ruolo = this[Ruolo]=this["Ruolo" add i];
_parent[nome]._y = 40*i;
}
_parent._visible = 1;
_root.contenitore.loadingdb.attesa = "";
}

 Adesso torniamo sulla root principale e al secondo frame assegniamo la seguente azione:

loadVariables ("/public/ricerca.asp", _root.contenitore.mc, "GET");
stop ();

questa, come è facile intuire, invierà le variabili ad ASP e raccoglierà i risultati.

Ok abbiamo finito... Prima di pubblicare mi raccomando fate attenzione agli indirizzi.

Ti consigliamo anche