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

Zoo Guestbook

Tutorial Flash Guest Book ASP XML con Database Access e area Admin
Tutorial Flash Guest Book ASP XML con Database Access e area Admin
Link copiato negli appunti

Premessa

Abbiamo già visto l'utilizzo di Flash con un Database e abbiamo potuto sperimentare quanto sia semplice e potente utilizzare Flash con degli script lato server per creare filmati veramente interattivi e dinamici, il tutto senza rinunciare alla potenza della grafica vettoriale che solo Flash può offrirci!

In questo tutorial vedremo un'altra applicazione che sicuramente risulterà molto interessante da utilizzare per il proprio sito: un Guest Book in Flash che memorizza i dati in un Database Access. Abbiamo già visto nei precedenti Tutorials un guest book che memorizzava i dati in un file di testo e abbiamo già parlato della differenza sostanziale tra i due modi di procedere che ora ripetiamo:

  1. utilizzando un file di testo si ha maggiore velocità nelle operazioni di lettura/scrittura sul file se si ha a che fare con pochi dati; se questi dati tendono a crescere il problema a cui si va incontro è che il nostro filmato Flash dovrà ogni volta caricare l'intero file di testo rallentando o bloccando il nostro filmato quando le dimensioni di tale file saranno superiori ai 60 KB circa
  2. utilizzando un Database la velocità di lettura/scrittura dei dati è in linea di massima inferiore (dipende poi anche dal Database che si utilizza), ma si possono selezionare solo i dati che interessano facendo delle ricerche anche complesse senza rallentare il filmato Flash. In questo secondo caso non si rischia mai di bloccare il filmato Flash poiché questo caricherà solo Tot dati alla volta in base alle nostre esigenze.

In base a queste due considerazioni si potrà decidere di volta in volta quale soluzione adottare in base al progetto che si va a realizzare.

Utilizzare un Database per il nostro Guest Book è sicuramente una saggia decisione visto che il nostro sito è destinato a ricevere un sempre più grande numero di visitatori :)) !!! Procediamo!

Progettazione del Guest Book

Il nostro Guest Book non sarà come tutti gli altri, ma sarà uno Zoo Guest Book. Un'idea molto simpatica che invoglierà il visitatore a lasciare un proprio segno ad indicare il suo passaggio. Ogni utente al momento dell'inserimento dei dati potrà scegliere una sua icona di identificazione tra diverse icone rappresentanti degli animali.

Il Guest Book sarà costituito da:

  • 3 filmati Flash (quindi 3 pagine HTML che li contengono) uno per visualizzare i messaggi, l'altro per firmare il guest book e l'ultimo sarà un'area di amministrazione che permetterà la cancellazione di eventuali messaggi indesiderati tramite password.
  • 3 script ASP uno per leggere i dati dal Database,l'altro per inserire il nuovo messaggio registrando i dati nel Database e uno per eliminare il messaggio indesiderato dal DB.
  • 1 Database in Access

Non ci soffermeremo molto sulla creazione del Database Access. Diremo solamente che al suo interno abbiamo una tabella chiamata tabmsg così strutturata:

CAMPO TIPO
ID contatore
Nome Testo
Email Testo
Messaggio Memo
Data Data/ora
Icona Numerico
Url Testo

Inoltre abbiamo aggiunto la protezione del Database con una Password (che è enrico) in modo da rendere più sicuro l'accesso ai nostri dati. La Password dovrà quindi essere utilizzata anche dagli script ASP che dovranno accedere ai dati nel Database. Andando per passi andiamo ora ad analizzare il filmato Flash che l'utente visualizzerà una volta aperto il nostro zoo guest book.

Codice Action Script del filmato zooguestbook

Apriamo il file zooguestbook.FLA e vediamo il codice Action Script utilizzato al suo interno:

// Inizializzazione Variabili
controlla = "basta";
filexml = "read_db.asp?PageNumber=1";
paginainiziale="01";

ApriXML();

// Funzione che richiama lo script ASP e carica i dati in XML
function ApriXML() {
_root.loading = "CONNECTING TO Database FOR XML DATA...";
_root.dbstatus.gotoAndStop(1);
mioxml = new XML();
apparray = new Array();
mioxml.load(filexml + "&ranq=" + random(999999));
//mioxml.load(filexml);
mioxml.onLoad = Metti;

function Metti (success) {
if (mioxml.loaded) {
apparray = mioxml.childNodes;
Dati();
MenuPag();
CreaTabelle();
_root.loading = undefined;
_root.dbstatus.gotoAndStop(2);
delete mioxml;
delete apparray;
};
};
}

// Funzione che rimuove tutti i Clip dalla scena
function Rimuovi(){
for (a=0; a<63; a++){
_root["clipmsg"+a].removeMovieClip();
};
};

// Funzione che crea il menu delle pagine
function MenuPag(){
numero = Math.floor((totrec-1)/63)+1;
nmaxpag = numero;

for (i=0; i<numero; i++){
attachMovie("page", "pagine"+i,i+100);
_root["pagine"+i]._x=30+i*30;
_root["pagine"+i]._y=475;
k=i+1;
if (k<=9){app="0"+k}else{app=k};
_root["pagine"+i].pagina=app;
_root["pagine"+i].PageNumber = k;
if (k<=9){nmaxpag ="0"+ k;} else {nmaxpag=k};
_root.pagina = paginainiziale+"/"+nmaxpag+" - TOT MESSAGGI "+ totrec ; 
};
};

// Funzione che Crea i clip relativi ai messaggi presenti sul guest book
// e li posiziona sullo stage del filmato

function CreaTabelle () {
Rimuovi();
k = 0;
conteggio = 0;

for (i=0; i<63; i++) {
if (Nomi[i] != undefined) {
attachMovie("clipmsg", "clipmsg"+i, i);
// Attribuisco la coordinata X e Y
_root["clipmsg"+i]._x = 40+conteggio*45;
_root["clipmsg"+i]._y = 120+k*35;
// Passo al clip le variabili che ho preso dall'XML e messo negli Array
_root["clipmsg"+i].data = Data[i];
_root["clipmsg"+i].nome = Nomi[i];
_root["clipmsg"+i].email = Email[i];
_root["clipmsg"+i].url = Url[i];
_root["clipmsg"+i].msg = Msg[i];
// In base all'icona scelta visualizzo l'animale corrispondente
_root["clipmsg"+i].gotoAndStop(Icona[i]);
_root["clipmsg"+i].numero = i+1;
inizio++
conteggio++;
if (conteggio>=7) {
k++;
conteggio = 0;
};
};
};
};

// Funzione che prende i dati XML e li mette in degli Array
function Dati () {
// Array che contengono i Dati ----------------------
Nomi = new Array();
Email = new Array();
Data = new Array();
Icona = new Array();
Msg = new Array();
Url = new Array();
// ---------------------------------------------------

for (k=0; k<=apparray.length; k++) {
if (apparray[k].nodeName == "nome") {
Nomi.push(apparray[k].childNodes.toString());
//trace(apparray[k].childNodes.toString().toUpperCase());
} else if (apparray[k].nodeName == "email") {
Email.push(apparray[k].childNodes.toString());
} else if (apparray[k].nodeName == "data") {
Data.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "icona") {
Icona.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "totrec") {
_root.totrec=apparray[k].childNodes.toString();
}
else if (apparray[k].nodeName == "msg") {
Msg.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "url") {
Url.push(apparray[k].childNodes.toString());
}
};
};

Il principio di funzionamento è molto semplice.

Quando apriamo il filmato SWF all'interno della pagina HTML questo richiama lo script ASP read_db.ASP. Lo script ASP legge i dati dal Database fino ad un massimo di 63 messaggi per pagina. Inizialmente leggerà quindi la pagina composta dagli ultimi 63 messaggi inseriti dagli utenti (i più recenti). Una volta estrapolati questi dati dal Database vengono formattati con dei TAG XML e vengono passati al filmato Flash in questo modo:

<nome>Enrico Lai</nome>
<email>info@enricolai.com</email>
<data>29 giugno 2002</data>
<msg>Ciao a Tutti i visitatori del guest book!!!</msg>
<icona>2</icona>
<url>http://www.enricolai.com</url>
<totrec>1</totrec>

A questo punto Flash esegue il parsing dell'XML e mette i dati in degli array, che come possiamo intuire saranno 6: Nomi, Email, Data, Icona, Msg e Url. Il contenuto che verrà memorizzato in questi array è indicato dal nome stesso. L'ultimo TAG totrec ci indica invece quanti Record abbiamo all'interno del nostro Database e ci permette di creare il
menu delle pagine. Se per esempio abbiamo 154 messaggi poiché abbiamo stabilito che ogni pagina è composta da massimo 63 messaggi, creeremo un
menu pagine composto da 3 pulsanti. Infatti abbiamo tre pagine composte rispettivamente due da 63 e una da 28 messaggi.

Una volta creati gli Array utilizziamo delle Funzioni che ci permettono di creare il
menu delle Pagine (posizionando sullo stage del filmato tanti clip Pagina quante sono le pagine relative ai messaggi del guest book) e i clip Relativi ai messaggi contenuti in quella determinata pagina. I clip che rappresentano i messaggi sono delle icone che rappresentano un simpatico animale! Quando clicchiamo su questi clip abbiamo la possibilità di visualizzare al lato tutte le informazioni che l'utente ha inserito ovvero il suo nome, la sua email, la data di inserimento, il suo URL e il suo messaggio.

Il codice Action Script associato al pulsante dentro i clip è il seguente:

on (press) {
_root.show.gotoAndStop(2);
_root.show.number = "messaggio N. > "+this.numero+" <";

if (this.email != undefined) { 
stringa="<a href='mailto:"+this.email+"'>" + this.email + "</a>";
};
_root.show.email = this.stringa;
_root.show.nome = this.nome;
_root.show.data = this.data;
_root.show.msg = this.msg;
_root.show.url = this.url;
_root.indicatore.x = this._x;
_root.indicatore.y = this._y;
}

Il codice invece associato ai clip "pagina" è il seguente:

on (release) {
_root.filexml= "read_db.asp?PageNumber="+this.PageNumber;
_root.Rimuovi();
_root.ApriXML();
if (PageNumber <=9) {app="0"+PageNumber} else {app=PageNumber};
_root.paginainiziale = this.app;
}

Il codice associato al Clip "indicatore" che ci indica il clip messaggio selezionato di volta in volta è il seguente:

onClipEvent (load) {
x = this._x;
y = this._y;
acc = 2;
b = 1.4;
modo = 0;
}
onClipEvent (enterFrame) {
if (modo == 0) {
this._x += ((x-this._x)/acc);
this._y += ((y-this._y)/acc);
_x = this._x;
_y = this._y;
} else if (modo == 1) {
ax = _x;
ay = _y;
y_fin = y;
x_fin = x;
dx = (dx+(x_fin-ax)/acc)/b;
dy = (dy+(y_fin-ay)/acc)/b;
ax += dx;
ay += dy;
_x = ax;
_y = ay;
}
updateAfterEvent();
}

Lo script ASP che legge dal Database

Per concludere la parte relativa alla lettura e visualizzazione dei messaggi non ci resta che vedere il codice relativo allo script read_db.ASP:

<%
Const adOpenKeyset = 1
Const adLockReadOnly = 1

' Stringa di Connessione al Database con la password che viene specificata
' Modificate se necessario il percorso del Database sostituendo a "/mdb-database" il nome della vostra cartella che
conterrà il DB
StrConnessione = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database") & "zoo_gb.mdb;pwd=enrico"

'Altra stringa possibile se si utilizza la connessione OLEDB
'StrConnessione = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & server.MapPath("/mdb-database/zoo_gb.mdb;pwd=enrico")
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open StrConnessione

' Leggo i messaggi a partire dall'ultimo inserito ovvero il più recente
SQL = "SELECT * FROM tabmsg order by tabmsg.id desc"
Set rs = Server.CreateObject("ADODB.RecordSet")
rs.Open SQL, Conn, adOpenKeyset,adLockReadOnly

'Leggo i dati e aggiungo i TAG per formattarli in XML
PageNumber = 1

if not isnull(request("PageNumber")) and request("PageNumber") <> "" then
PageNumber = cint(request("PageNumber"))
RsIn = (Pagenumber - 1) * 63
rs.move(RsIn)
end if

numrec=63
Do while not rs.eof and numrec > 0
Response.Write "<nome>" & rs("nome") & "</nome><email>" & rs("email") & "</email><data>" & rs("Data") & "</data><msg>" &
rs("messaggio") & "</msg><icona>" & rs("icona") & "</icona><url>" & rs("url") & "</url><id>"& rs("ID") & "</id>"
rs.movenext
numrec = numrec -1
Loop
response.write "<totrec>"& rs.recordcount &"</totrec>"

rs.close
set rs=nothing
Conn.Close
set Conn=nothing
%>

Firmare il Guest Book

Vediamo cosa succede quando dobbiamo firmare il guest book. In questo caso abbiamo un altro filmato Flash chiamato firma_zoo_GB. Apriamo il filmato e osserviamo com'è realizzato.

Abbiamo sulla sinistra un'area con tutte le icone degli animali disponibili. Possiamo quindi scegliere l'icona che più ci piace. Di default quella selezionata è la numero uno. Ogni volta che clicchiamo su un'altra icona c'è l'indicatore visivo che si sposta sull'icona selezionata e il numero relativo che cambia. 

Il codice Action Script associato al primo fotogramma del livello AS è il seguente:

// Inizializzazione Variabili
controlla = "basta";
dbstatus.gotoAndStop(2)
errore="no"

// Parametro che indica quante icone ci sono
// Dev'essere modificato nel caso vengano aggiunte o tolte icone di animali

toticone = 10;
k = 0;
conteggio = 0; for (i=1; i<=toticone; i++) {
attachMovie("clipmsg", "clipmsg"+i, i);
_root["clipmsg"+i]._x = 40+conteggio*45;
_root["clipmsg"+i]._y = 120+k*35;
_root["clipmsg"+i].gotoAndStop(i)
_root["clipmsg"+i].numero = i
conteggio++;
if (conteggio>=7) {
k++;
conteggio = 0;
}; 
}

Sulla parte destra del Filmato abbiamo invece un form con dei campi di testo di input dove l'utente dovrà inserire i propri dati. I campi di testo di input sono: nome, email, url e msg.

A questo punto abbiamo creato dei controlli per verificare che l'utente inserisca in linea di massima dei dati corretti.Per prima cosa abbiamo creato una barra che indica la dimensione del messaggio e quanti caratteri possono essere ancora inseriti.

Il codice Action Script associato a questo clip è il seguente:

onClipEvent (load) {
this.barra._width = 0;
}
onClipEvent (enterFrame) {
this.barra._width = _root.msg.length/35;
_root.ncar = _root.msg.length;
_root.line = _root.msg.scroll;
_root.msg.scroll = 1;

if (_root.msg.maxscroll >=2 | _root.ncar > 350) {
//_root.att = "Errore, messaggio troppo lungo!"
_root.stato = false
}
else {
//_root.att = ""
_root.stato = true
};
}

Il Clip "barra" verifica che l'utente non abbia inserito più di 350 caratteri e che non abbia premuto troppe volte il tasto "invio" generando un messaggio comunque troppo lungo per poi essere visualizzato correttamente dal Filmato zooguestbook.swf. 

A questo punto una volta che abbiamo inserito tutti i dati premiamo il pulsante "SEND" che, prima di inviare i dati allo script ASP che dovrà inserirli nel Database, esegue una serie di controlli sui dati inseriti dall'utente. Vediamo quindi il codice Action Script associato al pulsante "SEND":

on (release) {
_root.errore = "no"
if (nome != "" & msg != "" & url != "" & nome != undefined & msg != undefined & url != undefined) {

Verifica();

if (trovato == "si") {
att = "I caratteri < e > non sono ammessi";
clipatt.gotoAndStop(2)
} else {
myEmail = new controllo_email(email)

if(myEmail.name){
// Se l'E-mail è corretta passo al successivo controllo
// verifico che il messaggio non sia troppo lungo
// la variabile "stato" viene settata dal clip barra

if (stato){
att = "Connessione...";
clipatt.gotoAndStop(1)

dbstatus.gotoAndStop(1) 
loadVariablesNum ("add_msg.asp", 0, "POST");
_root.controlla = "vai";
}
else {
att = "Messaggio troppo lungo!";
clipatt.gotoAndStop(2)
};

} else {
//Se l'E-mail non è valida
att = "Email non valida";
clipatt.gotoAndStop(2)
};

};
} else {
att = "Compila i campi";
clipatt.gotoAndStop(2)
};

// Funzione che verifica che non sia stato inserito il carattere < o >
function Verifica () {
trovato = "no";
stringa = nome;
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == ">" | stringa.substring(i, i+1) == "<") {
trovato = "si";
return;
};
}
stringa = email;
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == ">" | stringa.substring(i, i+1) == "<") {
trovato = "si";
return;
};
}
stringa = msg;
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == ">" | stringa.substring(i, i+1) == "<") {
trovato = "si";
return;
};
}
stringa = url;
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == ">" | stringa.substring(i, i+1) == "<") {
trovato = "si";
return;
};
}
}

// Funzione che controlla se l'email è corretta
function controllo_email(valore){ 
nome1 = new Array();
nome1 = valore.split('@')
valore2 = nome1[1]
if (nome1[2] == undefined){ // se non trova nulla dopo la '@'
this.name = false
valore2 = valore2.split('.')
// controllo la lunghezza dell'input dopo il punto
extension = true
for(var h = 1; h <= (valore2.length - 1); h++){ 
if (valore2[h].length > 3 || valore2[h].length < 2){
extension = false;
break;
}
}
nome1[1] = valore2[0] // valore dopo la '@'
nome1[2] = valore2[1] // valore dopo il '.'

// Verifico che non ci siano spazi tra i caratteri della email
stringa = nome1[0];
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == " ") {
this.name = false;
return;
};
}
stringa = nome1[1];
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == " ") {
this.name = false;
return;
};
}
stringa = nome1[2];
for (i=0; i<stringa.length; i++) {
if (stringa.substring(i, i+1) == " ") {
this.name = false;
return;
};
}
//-------------------------------------------------------------------------------- 
if ( nome1[0] != undefined && 
nome1[1] != undefined && 
nome1[2] != undefined &&
nome1[0].length > 0 &&
nome1[1].length > 0 &&
nome1[2].length > 1 &&
extension){
this.name = true
} else {
this.name = false
}
} else {
this.name = false
}
}
}

Script ASP che inserisce i dati nel Database

Lo script che inserisce i dati nel DB invierà anche una email alla nostra casella di posta elettronica comunicandoci i dati inseriti dall'utente che ha appena firmato il nostro guest book. Questo ci consentirà di sapere in tempo reale chi firma il nostro guest book ma soprattutto cosa viene scritto. Ci potrà capitare infatti di incappare in utenti poco educati che utilizzeranno il guest book per dar sfogo alla propria ignoranza con messaggi poco consoni. In questo modo possiamo subito essere informati di ciò che viene scritto e accedere tempestivamente alla zona di amministrazione per rimuovere i messaggi indesiderati.

Se tutti i dati sono stati inseriti correttamente verrà richiamato lo script ASP add_msg.ASP, che è il seguente:

<%

'Variabili passate dal filmato Flash
'Utilizzando il Replace facciamo in modo di sostituire il singolo apice
'con il doppio apice per evitare che la stringa di inserimento dati
'nel Database generi un'errore

data = Now()
nome = Replace(request("nome"),"'", "''")
email = Replace(request("email"),"'", "''")
messaggio = Replace(request("msg"),"'", "''")
icona =Cint( request("icona"))
url = Replace(request("url"),"'", "''")

' Elimino gli spazi bianchi all'inizio e alla fine della stringa

nome=Trim(nome)
messaggio=Trim(messaggio)
url=Trim(url)

' Verifico se nome,messaggio e url sono stringhe vuote

if Len(nome)=0 Or Len(messaggio)=0 Or Len(url)=0 then

Response.Write("att=Compilare Tutti i campi!&errore=si")

Else

' Stringa di connessione al Database. Notare che alla fine viene specificata la Password che è enrico
' Modificate se necessario il percorso del Database sostituendo a "/mdb-database" il nome della vostra cartella che conterrà il DB

StrConnessione = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database") & "zoo_gb.mdb;pwd=enrico"

Set Conn = Server.CreateObject("ADODB.Connection")

Conn.Open StrConnessione

'Creo la stringa SQL per inserire i dati nella tabella

SQL = "insert into tabmsg (nome,email,messaggio,Data,icona,url)"

SQL = SQL & " values ('" & nome & "','" & email & "','" & messaggio & "','" & data & "','" & icona & "','" & url & "')"

'response.write SQL

Conn.execute SQL

Conn.Close
set Conn=nothing

'================================================================================
'Script che invia email per avvisare che un nuovo utente ha firmato il guest book
'================================================================================

'Oggetto della mail
Oggetto="Nuovo Messaggio sul Zoo Guest Book"

'Corpo della mail
messaggio="L'utente:"&vbcrlf& nome &vbcrlf& "la cui email è:"&vbcrlf&email&vbcrlf&"ha firmato il Zoo Guest Book e ha scritto:" &vbcrlf& messaggio

'scrivere qui il vostro indirizzo email al quale verrà inviata l'email con i dati inseriti dall'utente
mail= "tuaemail@email.com"

recipStr = mail

Set newMailObj = Server.CreateObject("CDONTS.NewMail")

newMailObj.from = email
newMailObj.To = recipStr
newMailObj.Subject = Oggetto

newMailObj.Body = messaggio
newMailObj.Send
Set newMailObj = Nothing

Set newMailObj = Nothing

'=================================================================================

Response.Write("att=ok&errore=no")

End If

%>

Se tutto è andato a buon fine lo script ASP restituirà a Flash la variabile "att" settata sul valore "ok" e la variabile "errore" settata sul valore "no". 

In questo modo il clip filmato "controller" potrà segnalare all'utente che tutto è andato a buon fine e il suo messaggio è stato inserito correttamente.

Ecco il codice Action Script associato al clip "controller":

onClipEvent(enterFrame){
if (_root.controlla == "vai"){
if (_root.att == "ok") {
_root.controlla = "basta";
_root.att = "MESSAGGIO INVIATO, GRAZIE! :-)";
_root.dbstatus.gotoAndStop(2)
_root.clipatt.gotoAndStop(1)
// Rimetto tutte le variabili in stand by
_root.nome = undefined;
_root.msg = undefined;
_root.email = undefined;
_root.url = undefined;
}
else if (_root.errore == "si"){
//_root.dbstatus.gotoAndStop(1)
_root.clipatt.gotoAndStop(2)
}
}
}

Area Admin per l'amministrazione dei messaggi

Come abbiamo già accennato abbiamo in questo guest book una semplice area di amministrazione che ci permetterà di eliminare eventuali messaggi indesiderati. Anche questa area sarà in Flash ed è molto simile al filmato principale che visualizza tutti i messaggi. In effetti il filmato admin_zoogb presenta solo alcune varianti all'interno del codice Action Script, ma la struttura è praticamente identica a quella del filmato zooguestbook. 

Andiamo a vedere il codice Action Script:

// Inizializzazione Variabili
controlla = "basta";

filexml = "read_db.asp?PageNumber=1";

//filexml = "msg.txt";

paginainiziale="01";

//Funzione che richiama lo script ASP per eliminare il messaggio indesiderato
function DeleteMSG(ID){
this.ID = ID;
_root.att = "Connessione..."
_root.loading = "CONNECTING TO Database...";
_root.dbstatus.gotoAndStop(1);
_root.controlla = "vai";
loadVariablesNum ("deleteMSG.asp", "0", "POST");
}

ApriXML();

// Funzione che richiama lo script ASP e carica i dati in XML
function ApriXML()
{
_root.loading = "CONNECTING TO Database FOR XML DATA...";
_root.dbstatus.gotoAndStop(1);
mioxml = new XML();
apparray = new Array();
mioxml.load(filexml + "&ranq=" + random(999999));
//mioxml.load(filexml);
mioxml.onLoad = Metti;

function Metti (success) {
if (mioxml.loaded) {
apparray = mioxml.childNodes;
Dati();
MenuPag();
CreaTabelle();
_root.loading = undefined;
_root.dbstatus.gotoAndStop(2);
delete mioxml;
delete apparray;
};
};
}

// Funzione che rimuove tutti i Clip dalla scena
function Rimuovi(){
for (a=0; a<63; a++){
_root["clipmsg"+a].removeMovieClip();
};
};

// Funzione che crea il menu delle pagine
function MenuPag(){
numero = Math.floor((totrec-1)/63)+1;
nmaxpag = numero;

for (i=0; i<numero; i++){
attachMovie("page", "pagine"+i,i+100);
_root["pagine"+i]._x=30+i*30;
_root["pagine"+i]._y=475;
k=i+1;
if (k<=9){app="0"+k}else{app=k};
_root["pagine"+i].pagina=app;
_root["pagine"+i].PageNumber = k;
if (k<=9){nmaxpag ="0"+ k;} else {nmaxpag=k};
_root.pagina = paginainiziale+"/"+nmaxpag+" - TOT MESSAGGI "+ totrec ; 
};
};

// Funzione che Crea i clip relativi ai messaggi presenti sul guest book
// e li posiziona sullo stage del filmato

function CreaTabelle () {
Rimuovi();
k = 0;
conteggio = 0;

for (i=0; i<63; i++) {
if (Nomi[i] != undefined) {
attachMovie("clipmsg", "clipmsg"+i, i);
// Attribuisco la coordinata X e Y
_root["clipmsg"+i]._x = 40+conteggio*45;
_root["clipmsg"+i]._y = 120+k*35;
// Passo al clip le variabili che ho preso dall'XML e messo negli Array
_root["clipmsg"+i].data = Data[i];
_root["clipmsg"+i].nome = Nomi[i];
_root["clipmsg"+i].email = Email[i];
_root["clipmsg"+i].url = Url[i];
_root["clipmsg"+i].msg = Msg[i];
_root["clipmsg"+i].ID = ID[i];
// In base all'icona scelta visualizzo l'animale corrispondente
_root["clipmsg"+i].gotoAndStop(Icona[i]);
_root["clipmsg"+i].numero = i+1;
inizio++
conteggio++;
if (conteggio>=7) {
k++;
conteggio = 0;
};
};
};
};

// Funzione che prende i dati XML e li mette in degli Array
function Dati () {
// Array che conterranno i dati estrappolati dall'XML===============
Nomi = new Array();
Email = new Array();
Data = new Array();
Icona = new Array();
Msg = new Array();
Url = new Array();
ID = new Array();
//===================================================================

for (k=0; k<=apparray.length; k++) {
if (apparray[k].nodeName == "nome") {
Nomi.push(apparray[k].childNodes.toString());
} else if (apparray[k].nodeName == "email") {
Email.push(apparray[k].childNodes.toString());
} else if (apparray[k].nodeName == "data") {
else .push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "icona") {
Icona.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "totrec") {
_root.totrec=apparray[k].childNodes.toString();
}
else if (apparray[k].nodeName == "msg") {
Msg.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "url") {
Url.push(apparray[k].childNodes.toString());
}
else if (apparray[k].nodeName == "id") {
ID.push(apparray[k].childNodes.toString());
}
};
};

Come possiamo notare dal codice Action Script ci sono alcune differenze:

  • la prima è che carichiamo per ciascun messaggio anche il suo ID corrispondente sul Database. Questo consentirà rapidamente allo script ASP di identificare sul Database il messaggio indesiderato che dovrà essere rimosso;
  • la seconda è appunto una funzione apposita che richiama lo script ASP deleteMSG e gli passa due variabili di cui una è appunto l'ID del messaggio indesiderato e l'altra variabile è la password del Database che deve essere inserita nel campo di testo di input a fianco all'icona del lucchetto.

Come possiamo notare attraverso il filmato admin_zoogb.swf visualizziamo tutti i messaggi del guest book e per ciascuno di essi abbiamo un pulsante "Delete". Quando troviamo un messaggio indesiderato dobbiamo semplicemente inserire la password del Database nel campo di testo di input "PW", e quindi premere il pulsante "Delete". Così facendo viene richiamata la funzione _root.DeleteMSG(this.ID); che richiama lo script deleteMSG.asp.

Eliminare una linea dalla tabella del Database

Lo script deleteMSG.asp non fa altro che eliminare una riga (composta dai relativi record) dalla tabella del nostro Database, la riga identificata dall'ID del messaggio indesiderato. Il codice ASP che ci permette di effettuare questa operazione è molto semplice:

<%
'Variabili passate dal filmato Flash admin_zoogb
id = request("id")
pw = request("pw")

'Stringa di connessione al Database
StrConnessione = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & server.MapPath("/mdb-database") & "zoo_gb.mdb;pwd="&pw
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open StrConnessione
SQL = "delete from tabmsg where id="&id
Conn.execute SQL

Conn.Close
set Conn=nothing
Response.Write("att=ok")
%>

Ti consigliamo anche