
Flash - Php - MySQL
Inserimento dati in un db MySQL da Flash con PHP
Interazione tra Flash e MySQL tramite PHP, per l'inserimento dei dati di un form.
In questo articolo vedremo come inserire dei dati in un database MySQL
direttamente da un movie Flash, utilizzando PHP come linguaggio di raccordo tra
il filmato e la base di dati.
L'articolo può essere considerato un seguito di un altro tutorial già pubblicato,
intitolato
"Estrazione dati da un DB MySQL e visualizzazione in un movie Flash", nel
quale ho descritto l'operazione inversa.
Requisiti:
- Flash MX o superiore;
- Server (consigliato Apache);
- Modulo PHP;
- Database MySQL;
Potete trovare Apache, il modulo PHP e il database MySQL nel pacchetto gratuito
Easyphp.
Princìpi generali di funzionamento
Anche in questo caso prenderemo in considerazione un esempio generico, che potrà
poi essere facilmente adattato a qualsiasi esigenza.
Lo spunto ci viene offerto da un form per l'inserimento di alcuni dati personali
da memorizzare in un database.
Ci serviremo di ActionScript per catturare i dati
inseriti dall'utente e, attraverso un oggetto loadVars,
inviarli ad un apposito script PHP, che avrà il compito di inserire i dati nel
db e restituire una risposta contenente l'esito dell'operazione.
Il database
Ci serviremo di un db che chiameremo "dbtest", all'interno del quale
creeremo una tabella con nome "utenti", sulla quale andremo poi ad
effettuare gli inserimenti.
All'interno del file ZIP allegato all'articolo troverete il dump del database
utilizzato per l'esempio.
La tabella sarà la stessa di quella rappresentata nell'immagine sotto:
Il codice ActionScript
Per inviare i dati del form allo script PHP ci serviremo dei metodi della classe
loadVars. Tale oggetto ci servirà anche per ricevere
l'esito dell'operazione.
Ecco il codice AS associato al pulsante di invio dati:
|
// codice associato al pulsante
on (release){
// creiamo i due oggetti loadVars
loader = new loadVars();
receiver = new loadVars();
// inseriamo le variabili nell'oggetto
loader.nome = _level0.nome;
loader.cognome = _level0.cognome;
loader.indirizzo = _level0.indirizzo;
loader.cap = _level0.cap;
loader.citta = _level0.citta;
loader.telefono = _level0.telefono;
loader.email = _level0.email;
// funzione onload: si attiva al
// completmanento del caricamento dello script
receiver.onLoad = function (ok){
// elimina onLoad
delete this.onLoad;
// controlla che il caricamento abbia avuto // successo
if(ok)
{
// controlla che l'inserimento abbia avuto // successo
if(receiver.error == "1"){_root.output.text = "Errore inserimento dati";}
else{_root.play();}
}
// l'inserimento non ha avuto successo, // viene segnalato l'errore
else
{
_root.output.text = "Errore inserimento dati";
}
};
// carichiamo lo script PHP
loader.sendAndLoad("script.php", receiver, "POST");
}
|
Abbiamo creato due oggetti loadVars, uno per inviare
i dati, ed un altro per ricevere la risposta. E' anche possibile utilizzare un
unico oggetto per entrambe le operazioni, ma un oggetto apposito per la ricezione
ci permetterà di evitare possibili errori dovuti a variabili che hanno lo stesso nome.
Definiamo quindi una funzione per l'evento onLoad,
che verrà attivata quando il caricamento dello script PHP sarà utlimato. Il codice
di questa funzione (che verrà poi cancellata con delete)
si occuperà di controllare che il caricamento dello script abbia avuto successo,
e che i dati siano stati inseriti correttamente nel database. Tali controlli
vengono effettuati sulla base delle risposte stampate dal codice PHP.
Per caricare il codice non ci resta quindi che utilizzare il metodo
sendAndLoad, che invia tutte le variabili presenti
nella classe loader tramite POST, e inserisce
la risposta nell'oggetto receiver appositamente creato.
Per farsi un'idea del contenuto effettivo dei due oggetti, è possibile effettuare
un trace sul metodo toString()
di ciascun oggetto.
Nel caso in cui tutte le operazioni siano andate a buon fine, il filmato si
sposterà sul frame 2 e verrà visualizzato un messaggio di conferma; se invece
si fosse verificato qualche errore, comparirà un avvertimento in rosso sul form.
Il codice PHP
Il codice necessario ad inserire i dati nel db è molto semplice. Diamo prima uno
sguardo per poi vedere cosa effettivamente avviene:
|
<?php
// dati per la connessione al database
$db_host = "localhost";
$db_user = "";
$db_password = "";
$db_name = "dbtest";
// connessione al database
$db = mysql_connect($db_host, $db_user, $db_password);
$db_forum = mysql_select_db($db_name, $db);
// query di inserimento
$query = "INSERT INTO `utenti` (nome, cognome, indirizzo, cap, citta, telefono, email, data)
VALUES ('".$_POST['nome']."', '".$_POST['cognome']."', '".$_POST['indirizzo']."', '".$_POST['cap']."', '".$_POST['citta']."', '".$_POST['telefono']."', '".$_POST['email']."', '".date('Y-m-d H:i:s')."')";
// esecuzione della query
$query_results = mysql_query($query) or die("&error=1");
echo "&stop=1";
?>
|
La prima parte comprende le istruzioni per stabilire la connessione al database
(che deve essere già stato creato in precedenza). E' importante quindi
inserire i dati per la connessione (host, nome utente, password e nome del db).
Il passo successivo consisterà nel formattare la query con i dati dell'array
POST che sono stati inviati da sendAndLoad,
ed eseguirla. Nel caso l'inserimento non fosse andato a buon fine, verrà stampato (nel formato url-encoded)
il valore &error=1, che sarà quindi inviato come risposta
al movie. L'ultima istruzione, che stampa &stop=1 (sempre in formato url-encoded), ha un
duplice scopo: serve come 'terminatore' per la variabile precedente, per evitare
il concatenamento con caratteri come \n e
\r, ed inoltre funge da unico argomento
di ritorno nel caso l'inserimento fosse andato a buon fine; infatti il controllo
in AS per accertare l'esito dell'operazione prevede che venga ritornata almeno
una variabile.
Livio Giordano
Trovi questo articolo anche su MMkit e WebMasterPoint:
http://www.mmkit.com/article.php?sid=410
http://www.webmasterpoint.org/appunti/flash/122.asp

Data di pubblicazione: Giovedì 16 Dicembre 2004
Stampa questo articolo
Scarica l'articolo in formato PDF (Zip file)
Scarica il file ZIP allegato all'articolo
|