© Marco Olivo <me@olivo.net>, luglio 2001

ESEMPI UTILI PER APPROFONDIRE

In questa sezione presenteremo qualche esempio semplice che può tornare utile nella vita di ogni webmaster quando deve realizzare una nuova sezione dinamica per un sito. Questi esempi, volutamente non complicati, hanno lo scopo di chiarire ulteriormente le idee e presentare un approccio utile alla risoluzione di compiti comuni.

SPEDIRE UNA MAIL

Capita spesso che l'unico modo offerto per spedire il proprio feedback ad un dato sito sia scrivere una mail tramite il classico programma di posta. Tuttavia, per fornire una visione pił professionale del nostro servizio (specie se è un servizio a pagamento) risulta utile realizzare una piccola interfaccia customer-care che permetta all'utente di mandarci le sue impressioni senza per questo dover uscire dal programma che sta attualmente utilizzando - vale a dire il browser. Questo esempio illustra come realizzare un piccolo form in HTML senza fronzoli inutili adatto allo scopo. Il codice è ben commentato e dovrebbe chiarire il senso del programma:

Es.

<HTML>
<HEAD>
<TITLE>Contattaci</TITLE>
</HEAD>
<BODY>
<?PHP
/* $chi, $autore e $msg vengono settate se si è cliccato sul pulsante "invia" del form; questo accade
per tutte le variabili inserite all'interno di un form: esse prendono il nome che avevano nel controllo del form.
La cosa interessante e' che questa sezione sara' saltata completamente la prima volta che questo file verra' caricato,
in quanto le variabili $chi, $autore e $msg non saranno ancora state inizializzate. Questo e' utile per mandare in
output il solo codice HTML del form */
if (isset($chi) && isset($autore) && isset($msg)) {
	/* discriminiamo a seconda del valore di $chi e spediamo una mail a chi appropriato */
	if ($chi == "vendite") {
		/* parametri della funzione mail(): a chi, titolo, testo, headers addizionali (vedi RFC822) */
		mail("vendite@sito.com", "mail dal web", "$msg", "From: $autore");
	}
	else {
		mail("tecnici@sito.com", "mail dal web", "$msg", "From: $autore");
	}

	/* manda in output un ringraziamento che verra' inserito prima del codice del form */
	echo "Mail spedita. Grazie!<BR><BR>\n";
}
/* qui si conclude una parte del codice PHP. Quel che segue e' codice HTML, salvo la sezione introdotta dagli opportuni
tag e che contiene un solo comando: echo $PHP_SELF;
$PHP_SELF e' una variabile automatica (cioe' generata dal PHP in maniera automatica) che contiene semplicemente il
nome (piu' l'eventuale percorso) dello script corrente. In questo modo indichiamo al browser dell'utente dove deve
venir spedito il contenuto del form dopo che l'utente ha cliccato su "invia" */
?>
<FORM action="<?PHP echo $PHP_SELF; ?>" method="post">
<INPUT type="text" name="autore" value="tua@email">
<SELECT name="chi">
<OPTION value="vendite">ufficio vendite</OPTION>
<OPTION value="tecnici">ufficio tecnico</OPTION>
</SELECT>
<TEXTAREA name="msg" rows="10" cols="50">messaggio</TEXTAREA>
<INPUT type="submit" value="invia">
</FORM>
</BODY>
</HTML>

REALIZZARE UN SEMPLICE GUESTBOOK

In questo esempio vedremo invece come interfacciarci ad un database (MySQL nel nostro caso) per realizzare una piccola applicazione di guestbook nella quale gli utenti possano inserire i loro commenti sul nostro sito web. Ancora una volta non sarà il codice HTML ad essere approfondito, ma solamente il codice PHP.
Useremo ciò che abbiamo imparato nella sezione dedicata ai databases per instaurare la connessione ed eseguire le queries appropriate, rilasciando la connessione quando non pił utile. Ecco l'esempio, come al solito ben commentato:

Es.

<HTML>
<HEAD>
<TITLE>Guestbook</TITLE>
</HEAD>
<BODY>
<?PHP
/* Come nell'altro esempio (infatti questo guestbook e' molto simile alla spedizione della mail) la sezione che
segue verra' valutata solamente dopo che l'utente avra' cliccato sul pulsante "invia", quindi almeno al secondo
caricamento di questo script */
if (isset($autore) && isset($msg)) {
	/* instaura una connessione al DBMS e seleziona il database corrente */
	$link = mysql_connect("localhost", "utente_database", "segreto");
	mysql_select_db("database", $link);

	/* inserisce il commento e l'email di chi l'ha scritto nel guestbook */
	mysql_query("INSERT INTO guestbook (autore, msg) VALUES ('$autore', '$msg')", $link);

	/* manda in output un ringraziamento che verra' inserito prima del codice del form */
	echo "Commento inserito. Grazie!<BR><BR>\n";
}
/* qui si conclude una parte del codice PHP. Quel che segue e' codice HTML, salvo la sezione introdotta dagli opportuni
tag e che contiene un solo comando: echo $PHP_SELF;
$PHP_SELF e' una variabile automatica (cioe' generata dal PHP in maniera automatica) che contiene semplicemente il
nome (piu' l'eventuale percorso) dello script corrente. In questo modo indichiamo al browser dell'utente dove deve
venir spedito il contenuto del form dopo che l'utente ha cliccato su "invia" */
?>
<FORM action="<?PHP echo $PHP_SELF; ?>" method="post">
<INPUT type="text" name="autore" value="tua@email">
<TEXTAREA name="msg" rows="10" cols="50">messaggio</TEXTAREA>
<INPUT type="submit" value="invia">
</FORM>
Commenti già inseriti:<BR>
<?PHP
/* qui inseriamo ora tutti i commenti giunti finora. Vale la pena di spiegare l'utilizzo della funzione htmlentities():
questa funzione traduce semplicemente i caratteri di un testo ASCII che non possono essere scritti "così come sono"
in un file HTML, trasformandoli in entità. Vale a dire che, ad esempio, il carattere "à" verra' tradotto nella stringa
"&agrave;" e cosi' via */

$result = mysql_query("SELECT * FROM guestbook", $link);

/* esegue un ciclo while che permette di recuperare tutte le righe, cioe' tutti i commenti; mette in particolare la
riga corrente nell'array $row */
while ($row = mysql_fetch_array($result)) {
	/* stampa i valori trovati, facendo cura di utilizzare la funzione htmlentities() introdotta sopra */
	echo "<B><A href=\"mailto:" . htmlentities($row["autore"]) .
	"\">" . htmlentities($row["autore"]) . "</A></B>: " . htmlentitites($row["msg"]) . "<BR>\n";
}

/* rilascia la connessione al DBMS */
mysql_close($link);
?>
</BODY>
</HTML>