Come creare una Newsletter

Stato
Discussione chiusa ad ulteriori risposte.
C

Cryon89

Ciao a tutti, oggi vi posto questa bellissima guida per crearvi una vostra Newsletter personale per i visitatori del vostro sito:

Anche senza avere molta esperienza di programmazione è possibile creare un'applicazione per newsletter. Vediamo come fare.

Perchè una newsletter?
Tutti i programmatori web prima o poi si ritrovano a dover sviluppare una applicazione per newsletter per il sito di un cliente (o per il proprio). Il modello che mostriamo è pensato per coloro che sono alle prime armi e vogliono cominciare a sviluppare qualcosa di utile.

Divideremo il nostro lavoro in 3 parti:
1. Creazione della tabella nel database;
2. Stesura di codice per le pagine di inserimento degli indirizzi nel database;
3. Stesura di codice per l'invio dell'e-mail di news agli indirizzi presenti nel database;

Cominciamo quindi creando la struttura della tabella che conterrà le e-mail dei destinatari.
Chiameremo la tabella 'address_book'
CREATE TABLE address_book (
idaddress_book int(11) NOT NULL auto_increment,
email_address varchar(50) NOT NULL default '',
PRIMARY KEY (idaddress_book)
);

Come possiamo notare, abbiamo creato due campi nella tabella: il primo "idaddress_book" conterrà un id univoco relativo all'indirizzo; il secondo è "email_address" che conterra l'indirizzo vero e proprio.

Ora abbiamo la tabella per memorizzare gli indirizzi di posta elettronica dei destinatari. Il nostro db è pronto.
Passiamo quindi a scrivere il codice necessario per l'inserimento delle email.
Prima di tutto ci serve una form xhtml dove poter scrivere l'indirizzo per poi inserirlo nel database.

Creiamo un nuovo file e chiamiamolo: 'form_add_addess.php'.

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>News Letters</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h3>Modulo per l'inserimento di indirizzi
e-mail </h3>
<form action="add_address.php" method="post">
<div>Indirizzo e-mail:
<input type="text" name="email_address" />
<input type="submit" value="submit" />
</div>
</form>
</body>
</html>

Passiamo alla scrittura del codice per inserire l'indirizzo nel db.
Creiamo un nuovo file e chimiamolo 'add_address.php'

<?php
// Effetuiamo la connessione al nostro db
$link = mysql_connect('localhost', 'username', 'password')
or die('Connessione al db fallita.'); // In caso di fallimento visualizza l'errore ed esce

// Selezione del database
mysql_select_db('database_name')
or die('Selezione del database fallita.'); // In caso di fallimento visualizza l'errore ed esce
// Ok abbiamo la connessione facciamo qualche verifica ed eseguiamo la query sql

// Verifichiamo di avere l'indirizzo email
if (isset($_POST['email_address'])) {
if (trim($_POST['email_address'])!='') {
// il campo non è vuoto, proseguo con l'inserimento nel db
$sql = "INSERT INTO address_book (email_address) VALUES('". $_POST['email_address'] ."')";
$res = mysql_query($sql);
if ($res) {
// Inserimento riuscito
} else {
// Si è verificato un errore, controllare la sintassi della query
}
} else {
// Il campo c'è ma è vuoto
}
} else {
// Il contenuto della form non è arrivato, questo può succedere
// se si accede a questa pagina direttamente senza fare il submit da form.php
}
?>

Se siamo arrivati fin qui senza problemi possiamo cominciare ad inserire tranquillamente indirizzi e-mail nel database.
Naturalmente può essere implementata la gestione degli errori nel file add_address.php per la verifica degli indirizzi e-mail, ma è una cosa che vedremo in seguito.

Passiamo quindi all'invio della newsletter.

Cominciamo creando la form con i campi Oggetto, e Testo.
Creiamo un nuovo file e chiamiamolo form_send_news.php

<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>News Letters</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body>
<h3>Modulo per l'invio di news</h3>
<form action="send_news.php" method="post">
<table>
<tr>
<td>Oggetto</td>
<td><input name="subject" type="text" size="20" /></td>
</tr>
<tr>
<td>Testo:</td>
<td><textarea name="text" cols="20" rows="10"></textarea></td>
</tr>
<tr>
<td>&nbsp;</td>
<td><input type="submit" value="submit" /></td>
</tr>
</table>
</form>
</body>
</html>

Passiamo al file più importante: 'send_news.php'

<?php
$link = mysql_connect('localhost', 'username', 'password')
or die('Connessione al db fallita.');

mysql_select_db('database_name')
or die('Selezione del database fallita.');

// Verifichiamo di avere l'oggetto e il testo dalla form
if (isset($_POST['subject']) && isset($_POST['text'])) {
if (trim($_POST['subject'])!='' && trim($_POST['text'])!='') {
/* Abbiamo tutto quello che ci serve, ora con una query prendiamo
tutti gli indirizzi dal db */
$sql = "SELECT email_address FROM address_book";
$res = mysql_query($sql);

// Impostiamo le intestazione dell'e-mail che stiamo per mandare
$headers = "From: Esempio <[email protected]>\r\n";

/* Puliamo il testo e l'oggetto dagli slashs messi in automatico
dopo il post dei dati */
$subject = stripslashes($_POST['subject']);
$text = stripslashes($_POST['text']);

/* Cicliamo il risultato della query e assegnamo
l'indirizzo e-mail alla variabile $to */
while (list($to) = mysql_fetch_row($res)) {
/* e ora inviamo la news */
mail($to, $subject, $text, $headers);
}
} else {
// Uno o più campi sono vuoti
}
} else {
/*
Il contenuto della form non è arrivato, questo può succedere
se si accede a questa pagina direttamente senza fare il
submit da form_send_news.php
*/
}
?>

L'applicazione è finita, il codice php che vi ho presentato è stato testato e le form xhtml sono state validate dal w3c.
Certo, ci sarebbe da lavorare ancora un po' per avere un'applicazione completa: ad esempio bisognerebbe avere la possibilità di eliminare e modificare gli indirizzi, e poi magari creare uno script di autenticazione per tutta l'applicazione ed un controllo durante l'inserimento che verifichi se l'indirizzo email non sià già presente nel db. Ma ne riparleremo nelle prossime settimane.

Lorenzo Torello

spero di esservi stato d'aiuto ;)

ciauz !!!
 
Stato
Discussione chiusa ad ulteriori risposte.