Newsletter: Gestione in Flash

Una Newsletter è l’insieme di informazioni relative a una macrocategoria periodicamente inviata per posta elettronica, colui che si iscrive riceverà queste informazioni e potrà cancellarsi in qualsiasi momento.

Come creare e gestire una Newsletter in Flash, salvando gli iscritti su un database con la possibilità, qualora l’iscritto voglia, di cancellarsi?

Bella domanda 🙂

Ovviamente Flash deve appoggiarsi a un linguaggio dinamico esterno, come in questo caso il PHP.

Ecco i file che andremo ad analizzare, e come al solito vi ricordo, che al fondo dell’articolo troverete i file sorgenti:

  • connessione.php connessione al Database
  • newsletter.fla sorgente flash della Newsletter
  • subscribe.php iscrizione dell’utente tramite mail
  • deleted.php  cancellazione dell’utente tramite mail
  • emails.php visualizzazione delle emails totali iscritte
  • debug.txt è un file di testo che noi non dovremo utilizzare, verrà preso in considerazione solo per il debug

Procediamo per ordine:

  • Creiamo la tabella newsletter su un nostro Database MySQL

ecco la query, creo la tabella newsletter con un campo email di tipo varchar di dimensioni 100 per sicurezza

CREATE TABLE `newsletter` (
`email` varchar(100) NOT NULL default '',
PRIMARY KEY (`email`)
)

Creata la tabella nel database andiamo a creare il file di connessione, che ci permetterà di interagire con il database

connessione.php 

$host = 'localhost'; //nome dell'host su cui risiede il database
$user = 'nome utente'; //nome utente con cui connettersi al database
$password = 'password'; //password utente con cui connettersi al database
$database = 'nomedatabase'; //indicare il database cui connettersi
$db = mysql_connect($host, $user, $password) ||die("Impossibile connettersi al server $host");
mysql_select_db($database, $db)||die("Impossibile connettersi al database $database");

Il nome del Database in questo caso è my_juliuswebdesign

  • Ora andiamo ad analizzare il file sorgente della Newsletter

newsletter.fla

primo frame

//per sicurezza cancello tutti i contenuti appena avviato
error = "";
msg = "";
email = "";

Creo un movie clip di nome istanza error per gestire gli errori

//Eseguo Debug sulla mail
onClipEvent (enterFrame) {
if (_root.error == "invalid email") {
_root.msg = "Email non valida";
}
if (_root.error == "invalid email delete") {
_root.msg = "Email non valida";
}
if (_root.error == "email delete") {
_root.msg = "Email Cancellata!";
}
if (_root.error == "duplicate email") {
_root.msg = "Email duplicata";
}
if (_root.status == "ok") {
_root.msg = "Email aggiunta!";
}
}

Sul pulsante Iscriviti
//Invio la mail tramite GET al file subscribe.php
on (release) {
error = "";
loadVariablesNum("subscribe.php?email="+_root.email, 0, "GET");
}

Sul pulsante Cancellati
//Invio la mail tramite GET al file deleted.php per eliminarla
on (release) {
if (email != "") {
loadVariablesNum("deleted.php?email="+_root.email, 0, "GET");
error = "";
email = "";
} else {
msg = "Email non inserita!";
}
}

Andiamo a vedere i files php

Iniziamo con subscrive.php che verificherà l’inserimento corretto della mail e invierà la conferma di iscrizione alla casella postale.

<?php
include('connessione.php');
//controllo se la email è valida
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $_GET["email"]))
{
print "error=invalid email";
die();
}
//mi creo un file di testo per effettuare in seguito il debug
$fp = fopen("debug.txt", "r");
$content = fread($fp, filesize("emails.txt"));
fclose($fp);
if (eregi($email, $content))
{
print "error=duplicate email";
die();
}
$fp = fopen("debug.txt", "a+");
if (fwrite($fp, "".$_GET["email"]."\n"))
print "status=ok";
$email=$_GET["email"];
//inserisco nel database la mail corretta
mysql_query("INSERT INTO newsletter (email) VALUES ('$email')") or die(mysql_error());
//invio un mesaggio ($messaggio) alla casella di posta per confermare l'iscrizione
$messaggio="Grazie per esserti iscritto alla Newsletter di Julius!";
$result = mail( $email, "Iscrizione alla Newsletter", $messaggio );
fclose($fp);
?>

deleted.php cancella la mail inserita dopo aver verificato la validità, avvertendoti di avvenuta cancellazione sulla casella di posta.

<?php
include('connessione.php');
$email=$_GET["email"];
//controllo se la email è valida
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $_GET["email"]))
{
print "error=invalid email delete";
die();
}
print "error=email delete";
//cancello la email passata tramite GET
mysql_query("Delete From newsletter where email ='$email'") or die ("non trovo la tabella");
//invio un mesaggio ($messaggio) alla casella di posta per confermare la cancellazione
$messaggio="Come da te richiesto, sei stato cancellato dalla Newsletter di Julius!";
$result = mail( $email, "Cancellazione alla Newsletter", $messaggio );
?>

Ora per visualizzare tutte le emails iscritte alla Newsletter ci basterà stampare il contenuto della tabella newsltetter all’interno del database.

Notate bene, ce una variabile $tuamail che dovrà essere impostata con una vostra mail, al fine di poter avere un controllo sulla effettiva partenza delle vostre newsletter, inviandoci a noi stessi la stessa.

emails.php

<?php
include('connessione.php');
$tuamail=tuamail@gmail.com; //inserire la propria mail, in questo modo potrai controllare l'effettivo invio delle tue newsletter in quanto le riceverai tu stesso
//Entro nel database nella tabella newsletter e stampo tutte le email in ordine crescente
$risultato=mysql_query("Select* from newsletter ORDER BY `email` ASC ") or die ("non trovo la tabella");
echo"$tuamail";
$numRecord=mysql_num_rows($risultato);
if($numRecord!=0){
while($record=mysql_fetch_array($risultato)){
echo ";".$record['email'].""; //aggiungo una virgola per separare le emails
}
}
?>

Scarica il sorgente
Guarda il Tutorial

23 risposte a "Newsletter: Gestione in Flash"

  1. Ho trovato molto interessante l’articolo, l’uso di php e flash è un campo molto allettante per poter fare molte cose.

    Ho constatato che non si riesce a inserire il carattere @ nella form, questo è un piccolo problema di flash…

    ciao,
    Gianni

  2. il problema è con il browser Firefox, e si riscontra nell’inserimento nella pagina newsletter.htm, ho avuto un problema del genere in passato ed ho aggiustato tutto con l’inserimento di “system.useCodepage;” all’inizio dell’actionscript

    ciao e di nuovo complimenti per questo utilissimo sito,
    Gianni

  3. @Gianni hai super raggione infatti mi ero dimenticato 🙂
    comunque altri modi per scavalcara questo problema è non pubblicare il filmato flash in modalità trasparent, incorporare i caratteri oppure digitare in FF SHIFT+2
    ciao

  4. il tuo esempio online funziona bene, mentre il sorgente scaricato non va, il tasto iscriviti non fa comparire nessun messaggio ma scrive l’email nel file debug.txt senza però inserire la mail nel DB…mentre il tasto cancellati fa comparire i vari messaggi ma non cancella l’e,mail dal file debug.txt.. ovviamente senza inviare nemmeno le mail di notifica… come posso risolvere? questo è un semplicisssssimo form se fosse solo in php ma ho la necessità in questo momento di farlo interagire con flash..spero mi potrai dare una mano…
    grazie

  5. scusami…funziona…l’unica cosa che non va è che non compare il messaggio che dice che una mail è già presente nel db…e spesso devo fare il refrewsh della pagina per ricomparire in modo corretto i messaggi…

  6. La funzione che ti avverte di avere gia inserito una mail funziona solo se la mail viene inserita succesivamente…

    Mentre se la mail viene inserita dopo un po di tempo, viene solo sovrascritta

  7. Ciao Julius
    ho uno spazio su di un server con un solo database mysql.
    esiste la possibilità di una newsletter in flash che non utilizzi un database
    ma, ad esempio file di testo ?

  8. Ciao ho 1 problema l’iscrizione e la cancellazione funzionano benissimo solo 1 cosa nn ho capito :S come si fa ad inviare le Email a quelli iscritti? I’m a N00b 😛

  9. Hai ragione ma l’ultima discussione su questo tutorial risale al 29 agosto e allora ho guardato nella sezione messaggiamo e ho visto che ieri avevi risp. ad una ragazza, comunque ora lo so!!

    Ho modificato il file connessione.php, ho messo host user pass dbname ma mi da questo errore:
    Warning: mysql_select_db(): supplied argument is not a valid MySQL-Link resource on line 7
    Impossibile connettersi al database Sql77757_4

  10. @DanFlash

    Il databse serve al fine di poter cancellare le mails che non aderiscono più, in un file di testo non è possibile individuare una data email e cancellarla tutto qui…

    @Jaso
    Qusta è una gestione di una Newsletter, ovvero vengono archiviate le mail, una volta lette le mail tu dovresti copiarle e inserirle nel campo destinatari di una tua casella di posta… inviare la news

    @francesco

    controlla di avere i permessi, avvolte la configurazione di database avviene attraverso la concessione di user e password

    dai uno sguardo qui

  11. perche io non riesco a farlo funzionare??
    premetto che sono un po inesperto di php,
    pero ho messo nomeutente e pass e il nome del data base sul file connesione
    e ho messo tutto su un dominio tripod.
    quando vado a mettere una email però non fa nulla dove sbaglio? devo aggiungere qualcosa????

    help me!

  12. Ciao julius intanto complimenti vivissimi sei un grande
    Cmq volevo chiederti ho dei dubbi chiarendoti ke nn sono un programmatore
    ma un grafico quindi ho molte lacune ke voglio colmare
    nel tuo tutorial sulla newsletter ho capito un po tutto
    ma una cosa nn mi è chiara (ti sembrera banale ma x me nn lo 🙂 )
    nel file di connessione
    ————————————
    $host = ‘localhost’; //nome dell’host su cui risiede il database
    ————————————
    non capisco si riferisce al mio ip oppure all’host (nel mio caso aruba)
    poi un ultimo dubbio i file vanno divisi in cartelle particolari del server del dominio?
    Grazie aspetto cn ansia tua risposta

  13. scusate ma qualcuno ci riesce a farlo funzionare su aruba???
    perche a me non va non so dove sbaglio metto il nome utente la pass il nome database ecc…

    help me please

Scrivi una risposta a sidvizioso Cancella risposta