PHP & MySQL
![]()
![]()
![]()

![]()
I suggerimenti sono stati presi da riviste di
informatica, da newsletters o da siti web
perciò ogni diritto rimane al legittimo proprietario.
![]()
| Tips | Utility |
| Links | Esempi PHP |
|
Tips |
|
| Calendario in PHP e MySQL (da scaricare) | upload+resize+thumbnails di immagini (link diretto) |
|
Gestione delle news (link diretto) - KandalfNews Gestione delle news (link diretto) - DMA_News (con immagini e html) |
Stringhe di testo (link diretto) |
| Upload limitato (link diretto) | String manipulation (link diretto) |
| Date and time in php (link diretto) | Secure login using cookies (link diretto) |
| Leggere e scrivere su un file in php (link diretto) | Utilizzo di MySQL (link diretto) |
| Creare un contatore di accessi con Php e Mysql (link diretto) | Install mySQL , php, & Apache in Windows (link diretto) |
| Random Images (link diretto) | Random Number (link diretto) |
| Autenticare gli utenti con PHP + Creating a Login Script with PHP and MySQ | VideoCOpen (Videocopen software video conferenza) |
| E' possibile evitare che gli utenti del mio sito inseriscano caratteri dannosi attraverso i miei form? | Upload dei file |
| Creare un guestbook | Realizzare un sondaggio |
| Eseguire l'upload di un file | Gestione dei file in PHP |
| Un sistema di login con le sessioni | Evitare la ridondanza dei dati in un database |
| Creare un guestbook | Realizzare un sondaggio |
| Eseguire l'upload di un file | Gestione dei file in PHP |
| Realizzare un semplice contatore | Configurare php per l'invio di e-mail in locale |
| Aggiornare automaticamente il copyright all'anno attuale | Il modulo Segnala ad un amico |
| Operazioni sulle stringhe con Php | Generare password casuali |
| Variabili php | Inserire data e ora in una pagina web |
| Recuperare la dimensione di un file | Realizzare un sito facilmente aggiornabile |
| Creare un RSS con PHP e MySql | Visualizzare un'immagine... solo se il campo di un database non è vuoto |
| Invio e-mail | Creare un circuito banners in PHP |
| Creiamo un Photoblog con PHP e MySQL | Applicazione in Php per gestire facilmente una newsletter |
| Utilizzare PHP con MySQL | Creare un circuito banners in PHP |
| Un completo AdServer con PHP | Scrivere i file con i form |
| Come fare un sondaggio con php e mysql | Ricavare IP & Hostname con Php |
| Motore di ricerca con PHP | Mostrare il numero degli utenti collegati al nostro sito |
| Grafici in HTML con PHP | Come fare un sondaggio |
| Rotazione BANNER + Un circuito di rotazione banner in Php | Paginazione dei dati presenti in un file di testo senza uso di database |
| Realizziamo una feedback form | Mandare un mail in CC o BBC |
| Scrivere il contenuto di una variabili in un file | Trasferire un file tramite FTP |
| Estensioni in php | Banner Rotating System with PHP |
| Leggere e scrivere su file | Come ottimizzare le tabelle di un database MySQL |
| Gestiamo i database con PhpMyAdmin | Immagine non disponibile |
| Proteggere una pagina con username e password | Paginazione dei dati presenti in un file di testo senza uso di database |
| Usare i cookies con PHP | Gestione Permessi |
| Gestione Utenti | Gestione di Database |
| Gestire database, utenti e permessi con MySQL | MySQL: gestione delle tabelle |
| Stringhe in MySQL: trucchi e soluzioni | Le funzioni stringa |
| Autenticare gli utenti con PHP | AlberT-menu è una semplice funzione PHP che stampa una tabella di menù |
| In PHP esiste una funzione tipo lastModified di javascript? | Come posso sapere l‘indirizzo IP di chi stà visitando una pagina PHP? |
| E' possibile validare i campi di un form attraverso PHP? | Generatore di password casuali |
| Le Sessioni |
Gestire i Cookie |
| E' possibile convertire una stringa di testo in minuscolo o in maiuscolo? | .Htaccess |
| Proteggere le pagine senza MySQL | Protezione password |
| Upload di immagini in un database (1 - 2 - 3 - 4) links diretti | Creare una cartella e uploadare i files con relativa rinomina |
| Creare un uploader di immagini (link diretto) | Mostrare il numero degli utenti collegati al nostro sito |
| Scrivere il contenuto di una variabili in un file | Le query SQL |
| Operatori di ricerca di pattern | Operatori logici |
| Funzioni logiche e condizionali | Funzioni stringa |
| Mandare un mail in CC o BBC | Come spedire un' e-mail in formato HTML |
| Come spedire un' e-mail con PHP | Come ottimizzare le tabelle di un database MySQL |
| Glossario di errori in PHP | Estrapolare dei dati da un file esterno |
| PHP: cos'e' e come funziona | Creare un catalogo immagini automatico con PHP |
| Files dentro a MySQL | Immagini dentro a MySQL |
| Aggiornare un campo nel DataBase | Contare i campi in un DataBase |
| Proteggere una pagina con username e password | Ritardare il caricamento di una pagina |
| Cancellare un record dalla pagina web | Un visualizzatore di immagini in Php |
| Upload di file in Php | Un contatore di accessi con file di testo |
| Spedire email con il Php | Connessione ad un database mySql con Php |
| Un semplice sistema di rotazione banner con PHP e Javascript | Un circuito di rotazione banner in Php |
| Redirect in Php | Recupero dei dati da un modulo |
| Scrivere la data e l'ora | Creare un blog in PHP senza bisogno di MySQL |
| PHP.INI | Form (link diretto) |
| Creare un guestbook in Php con Dreamweaver MX e MySql (link diretto) | Galleria fotografica (http://www.web-album.org) |
| Frase del mese | Login sicuro utilizzando i cookies (link diretto) |
| Data e ora in php (link diretto) | Estensioni di PHP (link diretto) |
| TIPS PHP2 | TIPS PHP3 |
| TIPS PHP4 | TIPS PHP5 |
Calendario in PHP e MySQL
(scarica) oppure dal sito ufficiale:
http://www.ikemcg.com/scripts/
Calendario simile a Outlook (Agenda):
http://www.phenix.gapi.fr/ o
scarica qui (forum sul
cambio lingua:
http://www.phenix.gapi.fr/forum/viewtopic.php?t=206&highlight=langue)
WebCalendar:
http://www.k5n.us/webcalendar.php
- http://www.k5n.us/index.php
E' possibile evitare che gli utenti del mio sito inseriscano caratteri dannosi attraverso i miei form?
Sì, certo.
PHP prevede una funzione apposita:
$stringa = HTMLspeciachars($stringa)
In questo modo verranno resi innocui tutti i caratteri html eventualmente inseriti all‘interno della stringa proveniente dal
form.
Upload dei file
Se gestisci un sito web, e vuoi dare la possibilità ai tuoi utenti di inviare
file in una specifica locazione, bastano poche righe di codice PHP per risolvere
il tuo problema.
Bisogna crearsi due pagine una contenente il form in ci l'utente selezionerà il
file da inviare (upload.php) e un'altra in cui l'upload verrà effettuato
fisicamente (verifica.php).
Nella pagina upload.php, dobbiamo appunto costruirci la form con cui l'utente
può selezionare il file da inviare, la pagina conterrà il codice:
<html>
<body>
<form method=post action="verifica.php" enctype="multipart/form-data">
Inserisci il nome del file da inviare:
<input type=file name="uploadfile"><br>
<input type="submit" value="Invia">
</form>
</body>
</html>
Nella pagina verifica.php, inseriremo il codice:
<html>
<body>
<?php
echo "<pre>";
echo "Nome del file creato all'invio: $uploadfile<br>";
echo "Nome originale del file: $uploadfile_name<br>";
echo "Dimensioni del file in byte: $uploadfile_size<br>";
echo "Tipo di file: $uploadfile_type<br>";
echo "</pre>";
//Adesso controlliamo se c'è veramente un file
if($uploadfile == "none")
{
echo "Non sono stati iniati file<br>";
exit;
}
//Contollo le dimensioni
//Se meno di 3MB lo invio
if($uploadfile_size < 3145728)
{
if(copy($uploadfile,"percorsoscelto/uploadfile_name"))
{
echo "Invio del file riuscito";
//Disalloco il file temporaneo
unlink($uploadfile);
}
else
{
echo "Invio fallito";
}
}
else
{
echo "Invio fallito. Il file non può superare i 3 MB";
}
?>
</body>
</html>
Le righe in rosso verranno ignorate in quanto commenti.
Come avete visto, basta poco per realizzare un form che permette di inviare un
file, tutto gioca su una variabile che abbiamo creato nella pagina upload.php:
$uploadfile
Da questa variabile abbiamo poi le variabili:
$uploadfile_name (nome della variabile ricevuta)
$uploadfile_size (dimensioni della variabile)
$uploadfile_type (Il tipo di file che stiamo inviando)
Creare un guestbook
costruire un libro degli ospiti, meglio conosciuto come Guestbook.
Cominciamo con l'aprire il nostro editor e a salvare il primo file, chiamandolo
config.php e inserendoci questo codice:
<?php
$msg_per_page = 5;
$mysql['host'] = "";
$mysql['pass'] = "";
$mysql['user'] = "";
$mysql['name'] = "";
@mysql_connect($mysql['host'], $mysql['user'], $mysql['pass']);
@mysql_select_db($mysql['name']);
?>
La prima variabile, $msg_per_page, ci serve per indicare il numero di messaggi
che si vogliono visualizzare per ogni pagina; ovviamente, il numero è
arbitrario, ma lasciatevi dare un consiglio... non alzate troppo la cifra
altrimenti chi non ha connessioni veloci potrebbe aver difficolt? alla
visualizzazione della pagina.
La seconda variabile, $mysql, è un array, e ci serve per indicare i dati del
nostro database MySQL.
In questo file non sono presenti altre variabili, ma già incontriamo due
funzioni: mysql_connect() e mysql_select_db().
Come è facile intuire le due funzioni sono legate a MySQL, infatti, la prima
serve per la connessione al server e la seconda per selezionare il database che
si vuole usare.
Passiamo ora alla creazione della tabella nel database MySQL.
Aprire un nuovo documento vuoto e inserire all'intorno questo codice:
<?php
require("config.php");
@mysql_query("DROP TABLE IF EXISTS gbook");
@mysql_query("CREATE TABLE gbook (
`id` INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`url` VARCHAR(255),
`messaggio` TEXT NOT NULL,
`ip` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);");
echo "Operazione avvenuta con successo !!\n";
@mysql_close();
?>
Non ci sono variabili ma sono presenti due query al database, la prima ci serve
per cancellare la tabella se esiste già, la seconda per crearla.
Fatte attenzione, la tabella che serve a noi, si chiama "gbook", e se esiste già
verrà cancellata e tutti i dati presenti verrano cancellati e non saranno
recuperabili in alcun modo.
Dopo aver visto la parte di configurazione, cominciamo ad entrare nel vivo
dell'applicazione.
Ora, aprire un nuovo documento vuoto e salvarlo come: leggi.php ed ecco il
codice che dovrà contenere:
<?php
require("config.php");
$count_mess = @mysql_query("SELECT COUNT(id) FROM gbook");
$res_count = @mysql_fetch_array($count_mess);
if ($res_count[0] == FALSE) {
echo "Nessun messaggio ? stato inserito nel database";
} else {
$tot_pages = ceil($res_count[0]/$msg_per_page);
$curr_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
$primo = ($curr_page - 1) * $msg_per_page;
$query = mysql_query("SELECT * FROM gbook ORDER BY id DESC LIMIT $primo,$msg_per_page");
while($result = mysql_fetch_array($query)) {
$result['messaggio'] = str_replace("\n", "<br>", $result['messaggio']);
echo " <strong>? Nome:</strong> " . $result['nome'] . "<br>\n";
echo " <strong>? E-Mail:</strong> <a href=\"mailto:" . $result['email'] . "\">"
. $result['email'] . "</a><br>\n";
echo " <strong>? URL:</strong> <a href=\"" . $result['url'] . "\">" . $result['url']
. "</a><br>\n";
echo " <strong>? Messaggio:</strong><br> " . $result['messaggio'] . "\n";
echo " <hr>\n";
}
for($page = 1; $page <= $tot_pages; $page++) {
if($page == $curr_page) {
$pag .= "<strong>$page</strong> ";
} else {
$pag .= "<a href=\"?page=$page\">$page</a> ";
}
}
echo $pag . "<br>\n";
}
echo "<a href=\"firma.php\">Firma il Guestbook</a>";
@mysql_close();
?>
Questo file servirà per visualizzare tutti i messaggi degli utenti.
Le prime due variabili, $count_mess e $res_count, ci serviranno per impaginare
correttamente i messaggi presenti nel database.
Appena dopo queste due variabili ci troviamo davanti ad un if(), questo
controllo ci è utile per vedere se sono presenti o meno messaggi nel database,
se ce ne sono li stampa a video, in caso contrario viene fuori un messaggio di
allerta.
Ora incontriamo tre variabile, che, anchesse servono per l'impaginazione dei
messaggi.
Ed ecco finalmente che arriviamo alla parte 'importante' dello script.
Incontriamo subito la variabile $query che, tramite la funzione mysql_query() di
php ci permette di inviare un 'comando' al database.
Subito dopo si nota un ciclo while() che serve per stampare a video il tutto.
Infine, stampiamo a video tutte le pagine tramie un ciclo for() e chiudiamo la
connessione al database MySQL.
Nell'articolo precedente abbiamo visto come leggere i messaggi presenti nel
database, ora vedremo come inserirli.
Creiamo un file chiamato firma.php e inseriamoci questo codice:
<?php
require("config.php");
if ($_POST['sign'] == FALSE) {
echo " <form action=\"firma.php\" method=\"POST\">\n";
echo " <strong>- Nome *</strong> <input type=\"text\" name=\"nome\"><br>\n";
echo " <strong>- E-Mail *</strong> <input type=\"text\" name=\"email\"><br>\n";
echo " <strong>- URL</strong> <input type=\"text\" name=\"url\"><br>\n";
echo " <strong>- Messaggio *</strong> <textarea name=\"messaggio\" cols=\"35\"
rows=\"10\"></textarea><br>\n";
echo " <input type=\"hidden\" name=\"sign\" value=\"true\">\n";
echo " <input type=\"submit\" value=\" Firma! \">\n";
echo " </form>\n";
} else {
@mysql_query("INSERT INTO gbook (`id`, `nome`, `email`, `url`, `messaggio`,
`ip`)
VALUES ('', '" . $_POST['nome'] . "',
'" . $_POST['email'] . "',
'" . $_POST['url'] . "',
'" . $_POST['messaggio'] . "',
'" . $_SERVER['REMOTE_ADDR'] . "');");
echo "Grazie per aver firmato il nostro Guestbook<br>";
echo "<a href=\"leggi.php\">Leggi i messaggi</a>\n";
}
@mysql_close();
?>
In questa parte del codice salta subito agli occhi che c'è un if(), che serve
per controllare se una variabile è esistente o meno.
In caso positivo, inserisce il messaggio nel database tramite una query con la
funzione mysql_query(), altrimenti visualizza il form.
Realizzare un sondaggio
Questo tutorial, vi mostra come creare un semplice ed utile sondaggio da
inserire nel vostro sito, così potrete conoscere le opinioni dei vostri
visitatori.
Per questo tutorial abbiamo bisogno di 3 files.
1. poll_global.php: Questo file contiene le informazioni per la connessione al
database.
2. poll_main.php: Questa è la pagina che i visitatori vedono e nella quale
votano.
3. poll_send.php: Questa è la pagina dei ringraziamenti.
Ho cercato di scrivere il codice più chiaro possibile, inserendo anche dei
commenti per una migliore comprensione.
poll_global.php
<?
include("config.php");
//Connessione al database
@ $db = mysql_pconnect("$dbhost","$dbuname","$dbpass");
//Messaggio di errore nel caso che non avvenga una corretta connessione al
database
if (!$db)
{
echo "<font color='red'><b>Impossibile collegarsi al database. Riprova più
tardi!</b></font>";
exit;
}
//Seleziono il database
mysql_select_db("$dbname", $db);
?>
Questi sono i dati da inserire nel phpMyAdmin per creare la tabella per il
nostro sondaggio.
CREATE TABLE vota (
ip varchar(15) NOT NULL default '',
vote int(11) NOT NULL default '0',
PRIMARY KEY (ip)
);
Se non sapete come fare per creare una tabella nel vostro database, utilizzate
lo script qui sotto:
poll_table.php
<?
include ("poll_global.php");
$sql = "CREATE TABLE `vota` ( `ip` VARCHAR( 15 ) NOT NULL , `vote` INT NOT NULL
, PRIMARY KEY ( `ip` ) )";
$result = mysql_query($sql);
?>
poll_main.php
<html>
<head>
<title>SONDAGGIO</title>
</head>
<body>
<center>
<h1><font color='#660066'>Sondaggio!!</font></h1>
<?
//includo poll_global.php
include ("poll_global.php");
//Qui viene acquisito l'indirizzo IP dell'utente
$ip = $_SERVER[REMOTE_ADDR];
//Selezioniamo l'intero database
$sql = "SELECT * FROM `database_table`";
$result = mysql_query($sql);
//Numero di voti presenti nel database
$number_of_vote = mysql_num_rows($result);
//Visualizziamo il numero di voti
echo "<h3>There are <b>$number_of_vote</b> votes</h3>";
//Variabile contatore
$i = 0;
$score =0;
//Calcoliamo la media dei voti
While ($i < $number_of_vote)
{
$score = $score + mysql_result($result, $i, vote);
$i++;
}
//Visualizziamo la media dei voti
echo "<h3>Average vote is ". number_format($score/$number_of_vote, 1)
."/5</h3>";
//Se l'utente ha già votato, apparirà un messaggio di errore
$i = 0;
While ($i < $number_of_vote)
{
if ($ip == mysql_result($result, $i, ip))
{
echo "Hai già votato!!";
exit;
}
$i++;
}
?>
//Inizio Form
<form action="poll_send.php" method="post">
<table>
<tr><td>
Cosa ne pensi di questo sito
</td></tr>
<tr><td>
<input type="radio" name="vote" value="5" checked>
Bellissimo!!!(5/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="4"> Interessante (4/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="3"> Carino (3/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="2"> Così così (2/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="1"> Non mi piace (1/5)
</td></tr>
<tr><td>
<input type="submit" value="Vota">
</td></tr>
</table>
</form>
</center>
</body>
</html>
poll_send.php
<html>
<head>
<title>SONDAGGIO</title>
</head>
<body>
<center>
<?
//Ricevo li valori delle variabili
$ip = $_SERVER[REMOTE_ADDR];
$vote = $HTTP_POST_VARS["vote"];
//Includo poll_global.php
include ("poll_global.php");
//Inserisco il voto nella tabella del database
$sql = "INSERT INTO `database_name` ( `ip` , `vote` ) VALUES ( '$ip', '$vote'
)";
$result=mysql_query($sql);
//Ringrazio l'utente per il suo voto e gli indico la pagina principale dei
risultati
echo "<h3>Grazie per aver votato!<br></h3>";
echo "<h3><a href='poll_main.php'>Clicca qui</a> per vedere i risultati del
sondaggio!</h3>";
?>
</center>
</body>
</html>
Questo è tutto! Ricordati di inserire tutti i files nella stessa directory!
Eseguire l'upload di un file
Un'altra delle operazioni molto frequenti è quella che concerne l'upload di file
online. Quando si parla di upload bisogna tenere in considerazione una serie di
elementi per il corretto funzionamento dei propri script. Per prima cosa è
necessario che il file php.ini sia configurato in modo da limitare correttamente
le dimensioni dei file da caricare: se nella nostra applicazione è possibile
effettuare l'upload di file molto grossi, è necessario modificare la variabile
di configurazione max_upload_size affinché il suo valore sia adatto alla nostra
situazione.
In secondo luogo è importante ricordarsi che i form HTML che devono inviare i
file devono avere l'attributo enctype impostato a "multipart/form-data",
altrimenti i file non saranno inviati correttamente. Infine è bene ricordare che
i file caricati non sono salvati all'interno della variabile globale $_POST ma
all'interno di $_FILES, dalla quale saranno accessibili anche altre informazioni
addizionali come il nome del file temporaneo locale in cui è stato salvato il
file inviato, le dimensioni del file ed altro.
Vediamo nel dettagli come effettuare l'upload di un file. Prima di tutto creiamo
un semplice form HTML che si occuperà di richiedere all'utente l'inserimento di
un file:
<html>
<head>
<title>File upload</title>
</head>
<body>
<form method="post" action="testupload.php" enctype="multipart/form-data">
<input type="hidden" name="action" value="upload" />
<label>Carica il tuo file:</label>
<input type="file" name="user_file" />
<br />
<input type="sumit" value="Carica online" />
</form>
</body>
</html>
Tengo a precisare che potremmo specificare un campo di input nascosto chiamato
MAX_FILE_SIZE avente come valore la dimensione massima in byte del file da
caricare. Questo valore, anche se controllato sia dal browser che da PHP, non è
comunque sicuro, dato che può essere facilmente aggirato. È buona norma
effettuare sempre la validazione dei dati da PHP prima di salvarli o elaborarli
per evitare spiacevoli sorprese.
Tornando a noi, passiamo alla creazione del file testupload.php:
<?php
define("UPLOAD_DIR", "./uploads/");
if(isset($_POST['action']) and $_POST['action'] == 'upload')
{
if(isset($_FILES['user_file']))
{
$file = $_FILES['user_file'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name']))
{
move_uploaded_file($file['tmp_name'], UPLOAD_DIR.$file['name']);
}
}
}
?>
Queste poche righe di codice si occupano di controllare che i dati provenienti
dalla pagina precedente siano corretti, controllano la validità del file
caricato ed effettuano praticamente l'upload salvando i dati ove necessario.
L'array $_FILES permette di accedere ai seguenti valor:
* name: il nome del file caricato originariamente dall'utente;
* tmp_name: il nome temporaneo del file salvato da PHP in una cartella locale;
* type: il mime type del file (nel caso in cui il browser fornisca questa
informazione);
* size: le dimensioni in byte del file;
* error: un codice numerico che indica l'eventuale errore durante il caricamento
del file. Ad ogni numero possibile è associata una delle seguenti costanti:
o UPLOAD_ERR_OK (0): Non vi sono errori, l'upload è stato eseguito con successo;
o UPLOAD_ERR_INI_SIZE (1): Il file inviato eccede le dimensioni specificate nel
parametro upload_max_filesize di php.ini;
o UPLOAD_ERR_FORM_SIZE (2): Il file inviato eccede le dimensioni specificate nel
parametro MAX_FILE_SIZE del form;
o UPLOAD_ERR_PARTIAL (3): Upload eseguito parzialmente;
o UPLOAD_ERR_NO_FILE (4): Nessun file è stato inviato;
o UPLOAD_ERR_NO_TMP_DIR (6): Mancanza della cartella temporanea;
Con tutte queste informazioni risulta molto semplice analizzare un'operazione di
upload e comportarsi di conseguenza. La funzione is_uploaded_file controlla che
un file sia effettivamente uno di quelli caricati dall'utente, mentre
move_uploaded_file effettua fisicamente lo spostamento del file temporaneo nel
fiel di destinazione specificato.
Aggiungendo alcuni accorgimenti sulle dimensioni ed impacchettando tutto in una
libreria è possibile gestire in modo molto completo il caricamento di file
online senza rischiare di incorrere in problemi o malfunzionamenti. Come sempre
è importante ricordarsi che il path di destinazione di move_uploaded_file deve
essere un path valido.
Gestione dei file in PHP
Di seguito riporto alcuner istruzioni su come gestire i file in php:
Apertura file
<?
$file = fopen(nomefile.txt,"r");
?>
Chiusura file
<?
fclose($file);
?>
Modalità di apertura
a Apre il file per accodare informazioni
a+ Apre il file per le leggere/accodare informazioni
r Apre il file per sola lettura
r+ Apre il file per lettura e scrittura
w Apre il file per sola scrittura
w+ Apre il file per scrittura/lettura
Se si usa"a" e "r" il file deve già esistere.
Verifica apertura file
<?
if(!$file = fopen(nomefile.txt,"r"))
{
echo "Errore apertura file";
exit;
}
?>
Scrittura file
<?
fputs($file,"Questo è un file scritto con PHP ");
?>
Naturalmente al posto di una stringa, possiamo inserire una variabile che
contiene il nostro testo.
Se si vogliono scrivere su più righe basta utilizzare:
"\r\n"
Leggere un file
<?
$testofile = fgets($file,255);
?>
Dove 255 sono i bytes da leggere
Apertura file
<?
$file = fopen(nomefile.txt,"r");
?>
Controlli sui file
<?
//Dimensioni di un file
filesize($file);
//Controllare se il file è una cartella
is_dir($file);
//Controllare se il file è ordinario
is_file($file);
//Controllare se è eseguibile
is_executable($file);
//Controllare se è leggibile
is_readble($file);
//Controlare se è scrivibile
is_writeable($file);
//Controllare il tipo
filetype($file);
?>
Aprire e leggere i contenuti di una cartella
<?
$lacartella = opendir('.');
while($file = readdir($lacartella)
{
$tutti_i_file[] = $file
}
?>
In questo modo avremo un arrey con tutti i file contenuti nella cartella
corrente.
Se non usiamo il ciclo la funzione readdir legge solo il primo file della
directory.
Evitare la ridondanza dei dati in un database
Nella maggior parte degli script che girano sul web e non solo è spesso
necessario evitare la ridonzanda dei dati.
Supponiamo ad esempio di dover gestire la tabella degli iscritti al nostro sito
e di fare in modo che ogni utente abbia una sua e-mail che lo identifichi
univocamente. Sarà pertanto necessario bloccare le iscrizioni degli altri utenti
se questi provano a registrarsi con un'indirizzo e-mail già esistente! Non a
caso molte volte scegliendo l'username per l'iscrizione a un forum o a qualsiasi
altro servizio vi sarà capitato di trovarvi con un messaggio del tipo "Username
già in uso. Sceglierne un altro" e via discorrendo. Vediamo allora come fare
sfruttando l'integrazione tra Php e MySql.
In questo esempio vedremo, nello specifico, un sistema di iscrizione ad una
newsletter che consentirà di non avere risultati ridondanti. Sarà quindi
possibile iscrivere un'indirizzo e-mail una ed una sola volta!
Grazie all'istruzione di Sql che vi propongo di seguito creiamo la tabella
relativa ai dati dei nostri membri composta da id utente e rispettiva e-mail:
CREATE TABLE `newsletter_users` (
`id_user` int(11) NOT NULL auto_increment,
`email` varchar(40) NOT NULL default '',
PRIMARY KEY (`id_user`)
) TYPE=MyISAM AUTO_INCREMENT=1 ;
Una volta creata la tabella destinata a raccogliere i dati, procediamo con la
realizzazione del form che ci permeterà di inserire l'indirizzo e-mail da
iscrivere alla newsletter. Il codice (X)Html da inserire è il seguente:
<form id="subscription" name="subscription" method="post"
action="controllo_iscrizione.php">
<strong>Iscriviti alle newsletter per le novità</strong> <br />
<input name="email" type="text" id="email" size="24" />
<input type="submit" name="Submit" value="Iscriviti" />
</form>
Possiamo salvare questa pagina come "iscrizione.php". Come potete notare il form
punta alla pagina "controllo_iscrizione.php" che, come ben potete capire dal
nome del file, è quella che riceve in input l'indirizzo e-mail, lo verifica e,
se non presente nel database, lo inserisce. In caso contrario sarà comunicato
all'utente che tale indirizzo e-mail è già presente nel database.
Ecco il codice della pagina "controllo_iscrizione.php" che analizzeremo
attentamente:
<?php
include("config.php"); // richiamo il file per la connessione al database
$error = 0;
$error_type = "";
$email = $_POST['email'];
// controllo della mail
if (strlen($email) == 0) { $error++; $error_type .= "Mail non inserita"; }
if ((!eregi("^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][0-9a-z-]+\.)+([a-z]{2,4})", $email))
&& (strlen($email) > 0)) {
$error++; $error_type .= "Mail non valida<br />";
}
// fine controllo della mail
// se non ci sono errori inizio la procedura di iscrizione...
if ($error == 0) {
// controlliamo che l'utente non sia gia' iscritto (result = 1 vuol dire che
l'utente esiste, 0 altrimenti)
$query = "SELECT COUNT(*) FROM newsletter_users WHERE email = '$email' ";
$result = @mysql_query($query, $conn);
$n_row = @mysql_fetch_array($result) or die ("Errore nell'applicazione. " .
mysql_error());
//fine del controllo sull'esistenza dell'utente
// se non esiste nessun utente con la stessa mail (e quindi se l'utente non è
già iscritto)...
if ($n_row[0] != 1) {
// inserisco l'utente nel database...
$query = "INSERT INTO newsletter_users (email) VALUES ('$email')";
if (mysql_query ($query, $conn)) { // se l'inserimento va a buon fine
echo "Ti ringraziamo per esserti iscritto alle newsletter!<br />" ;
} // chiude l'if
else
echo "Erorre durante l'inserimento nel database"; // se l'inserimento non va a
buon fine
mysql_close($conn);
} // chiude l'if
else { // se esiste già un utente con quella mail glielo comunico
print "<div>Indirizzo " . $email . " già esistente. <a href=\"javascript:history.go(-1);\">Riprova</a>
con un'altra mail.</div>";
}
} // chiudo if($error == 0)
// ... se invece ci sono errori sull'inserimento della mail (nulla o sintassi
non valida), li stampo a video
else echo "Errore: " . $error_type;
?>
Il codice è abbondantemente commentato, ma ulteriori chiarimenti possono essere
necessari. Analizziamo quindi il codice riga per riga:
include("config.php");
Questa riga serve a richiamare il file di connessione al database. Se non sapete
come creare tale file, aprite una nuova pagina php ed inseriteci all'interno il
seguente codice, salvandola in seguito come "config.php". Se necessario,
modificatelo con i parametri di accesso al vostro database.
<?
$db_user = "root";
$db_pass = "";
$db_host = "localhost";
$db_name = "newsletter";
$conn = mysql_connect($db_host, $db_user, $db_pass);
mysql_select_db($db_name, $conn) or die ("Errore nella connessione al
database");
?>
$error = 0
Inizializzo a 0 il numero degli errori. Tale variabile viene incrementata solo
in presenza di errori, quindi se pari a 0 (non ci sono errori) procedo con
l'iscrizione dell'email mentre se maggiore di 0 (ci sono errori) segnalo
l'errore che verrà memorizzato nella variabile $error_type e stampato a video.
$error_type = ""
Inizializzata come stringa vuota, assume un valore solo se si sono verificati
errori durante la compilazione del form come, ad esempio, mail non inserita o
non valida.
$query = "SELECT COUNT(*) FROM newsletter_users WHERE email = '$email' ";
$result = @mysql_query($query, $conn);
$n_row = @mysql_fetch_array($result) or die ("Errore nell'applicazione. " .
mysql_error());
Interrogo il database per vedere se l'indirizzo email inserito è già esistente o
meno.
if ($n_row[0] != 1)
Serve a verificare che la query precedentemente lanciata restituisca un numero
di risultati diverso da 1. Se il valore è pari a 1 vuol dire che l'indirizzo è
già esistente, in caso contrario (diverso da 1) l'indirizzo non è presente nel
database e pertanto lo inseriamo nello stesso tramite la query che analizziamo
di seguito.
$query = "INSERT INTO newsletter_users (email) VALUES ('$email')";
Serve ad inserire l'email dell'utente solo nel caso in cui questo non sià già
presente nel database.
Ovviamente questo codice è da considerarsi a scopo puramente didattico e non ha
alcuna pretesa di completezza su come realizzare un sistema di iscrizione ad una
newsletter.
Un sistema di login con le sessioni
Nelle lezioni precedenti abbiamo visto diverse volte come realizzare
aree riservate tramite semplicissimi controlli if-else con i più noti linguaggi
per il web. Tuttavia questi controlli sono da considerarsi poco sicuri in quanto
username e password vengono definiti nella stessa pagina del controllo e quindi
facilmente attaccabili.
Questa volta vedremo un sistema che, se progettato con il supporto di un
database, può considerarsi più sicuro. Per esempio si può pensare ad un sito
presso il quale l'utente può registrarsi scegliendosi un username ed una
password ed accedere ogni volta con tali credenziali di accesso.
Utilizzando le sessioni di Php è possibile definire una variabile che viene
mantenuta "attiva" per tutta la durata della sessione, ovvero fino a quando
viene chiuso il browser o effettuato il logout.
Il sistema più sicuro sarebbe quello di controllare che la tupla inserita
dall'utente in fase di login corrisponda a quella inserita in fase di
registrazione (conservata nel database delle iscrizioni) e, in caso positivo,
settare il valore della variabile di sessione ad esempio su "loggato" per
mantenere lo stato dell'utente attivo per tutta la sessione di lavoro. Poichè il
lavoro di progettazione con supporto del database richiederebbe appunto una
progettazione dello stesso e uno studio approfondito di query e controlli, ci
limiteremo a definire una tupla di accesso unica per tutti gli utenti che sarà
memorizzata all'interno del file di controllo del login. Starà a voi "mixare" le
vostre conoscenze sui database con quello che state per apprendere per poter
realizzare quanto appena detto.
Prima di procedere, elenchiamo le pagine che faranno parte del nostro progetto,
spiegandone attentamente la loro funzione.
* "form.php" sarà la pagina che conterrà il modulo di login nel quale l'utente
dovrà digitare l'username e la password per poter accedere alla pagina
riservata. In caso di login errato tale pagina sarà ricaricata per permettere un
nuovo tentativo di riconoscimento.
* "controlla.php" conterrà innanzitutto le credenziali di accesso alla pagina
riservata. Sarà inoltre incaricata al controllo del login e quindi al
reindirizzamento alla pagina opportuna.
* "pagina_riservata.php" sarà appunto la pagina riservata alla quale si accederà
in caso di login effettuato correttamente.
* "session_check.php" verrà inclusa in ogni pagina ad accesso riservato e
servirà a non permettere l'accesso diretto tramite url dal browser nel caso il
cui si conosca il percorso della pagina.
* "logout.php" sarà la pagina incaricata per la "distruzione" della sessione di
login. Dopo aver caricato tale pagina, l'utente non sarà più riconosciuto dal
browser e per accedere all'area riservata dovrà nuovamente effettuare il login.
Iniziamo pertanto ad analizzare il codice delle singole pagine. Partiamo dalla
realizzazione della più semplice, "form.php", inserendo questo codice
all'interno del tag <body>:
<form name="login" action="controlla.php" method="POST">
<h1>Fai il login:</h1>
<p>Username
<input type="text" name="username">
<br />
Password
<input type="text" name="password">
<br>
<input type="submit" value="Login">
</p>
</form>
Tale codice serve solamente alla creazione del form di login e non necessita di
ulteriori chiarimenti.
Passiamo ora alla creazione del codice della pagina "controlla.php" che, come
anticipato, servirà alla verifica della corrispondenza della tupla inserita
dall'utente con quella definita all'interno della pagina stessa. Eccovi il
codice che commenteremo opportunamente:
<?
$user = "user";
$pass = "password";
if ($_POST['username'] == $user && $_POST['password'] == $pass) {
session_start();
$_SESSION['login'] = "loggato";
header("Location: pagina_riservata.php");
} else {
header("Location: form.php");
}
?>
Innanzitutto abbiamo definito la tupla di accesso alla pagina riservata tramite
le variabili $user e $pass. Successivamente, grazie ad un semplice controllo su
una doppia condizione, abbiamo verificato che la tupla di accesso sia identica a
quella inserita dall'utente nel form, i cui valori erano stati recuperati grazie
alle variabili $_POST['username'] e $_POST['password']. Nel caso in cui il login
è stato effettuato correttamente, viene avviata una sessione grazie alla
funzione session_start() e definita la variabile di sessione $_SESSION['login']
alla quale viene associato il valore "loggato". Tale variabile, così
inizializzata, garantirà l'accesso alla pagina "pagina_riservata.php", alla
quale l'utente sarà rimandato. In caso di login errato l'utente sarà indirizzato
nuovamente alla pagina "form.php" dalla quale potrà ritentare il login.
La pagina "pagina_riservata.php" conterrà appunto le informazioni riservate agli
utenti loggati. Proprio per far capire che si tratta di una pagina riservata,
abbiamo utilizzato il codice che vi viene fornito di seguito, ma ovviamente
siamo liberi di personalizzarlo come meglio crediamo. Un paio di cose sono
d'obbligo però:
* la riga <?php include("session_check.php"); // questa riga è d'obbligo ?>
siamo tenuti a lasciarla in cima alla pagina, prima di qualsiasi tag html.
* la riga <p><a href="logout.php">ESEGUI IL LOGOUT</a> </p> possiamo
posizionarla dove meglio crediamo, ma dobbiamo lasciarla così com'è in quanto
permette all'utente di abbandonare la sessione di lavoro e di non essere più
riconosciuto dal browser, salvo nuovo login.
Eccovi il codice completo della pagina:
<?php include("session_check.php"); // questa riga è d'obbligo ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
</head>
<body>
<h1>PAGINA RISERVATA</h1>
<p>contenuto della pagina riservata... </p>
<p><a href="logout.php">ESEGUI IL LOGOUT</a> </p>
</body>
</html>
Passiamo ora ad analizzare il brevissimo codice della pagina
"session_check.php". Di seguito il codice, che sarà successivamente commentato:
<?
session_start();
if ($_SESSION['login'] != "loggato") {
header("Location: form.php");
}
?>
Innanzitutto ci tengo a precisare che questa è una pagina a sè stante che viene
richiamata in ogni pagina che dovrà innanzitutto essere riservata, e che
pertanto non dovrà essere raggiungibile direttamente puntando il browser all'url
della pagina riservata. Supponendo infatti che il nostro sito sia
"http://www.miosito.it", dobbiamo fare in modo, grazie all'inclusione di questa
pagina, che digitando l'indirizzo "http://www.miosito.it/pagina_riservata.php"
l'utente venga rimandato alla pagina di login e che non abbia quindi accesso ai
contenuti della pagina, salvo dopo aver effettuato il login. Poichè la variabile
di sessione $_SESSION['login'] assuse il valore "loggato" solo se l'utente ha
eseguito correttamente il login, se il valore di tale variabile è diverso da "loggato"
(o addirittura la variabile non è stata creata) l'utente dovrà essere rimandato
alla pagina "form.php" per poter farsi riconscere.
Per ultimo, ma non per importanza, vediamo come permettere all'utente di
abbandonare la sessione di lavoro grazie alla pagina "logout.php". Tale pagina
potrà essere richiamata solamente tramite il link "Esegui il logout" contenuto
nella pagina riservata. Dopo aver effettuato il logout l'utente non potrà più
accedere alla pagina riservata, se non previo nuovo login. Eccovi il codice:
<?php
session_start();
$_SESSION = array();
session_destroy();
header("Location: form.php");
?>
Tramite la funzione session_start() abbiamo accesso alle eventuali variabili di
sessione salvate in precedenza (nel nostro caso: $_SESSION['login']). Ci
occuperemo successivamente di svuotare l'array $_SESSION grazie alla funzione
array() e con la funzione session_destroy() provvediamo all'eliminazione del
file contenente le variabili di sessione. Tramite header("Location: form.php"),
infine, reindirizziamo l'utente al form di login per potersi nuovamente loggare.
Una volta compreso a pieno il codice potete personalizzarlo al meglio, ad
esempio dando il benvenuto all'utente una volta loggato e salutandolo una volta
effettuato il logout. Avendo poi le conoscenze su come far interagire il
linguaggio Php con i database è possibile utilizzare le sessioni per creare
potentissimi sistemi di login personalizzati ed aree riservate ad hoc per ogni
singolo utente.
Realizzare un sondaggio
Questo tutorial, vi mostra come creare un semplice ed utile sondaggio da
inserire nel vostro sito, così potrete conoscere le opinioni dei vostri
visitatori.
Per questo tutorial abbiamo bisogno di 3 files.
1. poll_global.php: Questo file contiene le informazioni per la connessione al
database.
2. poll_main.php: Questa è la pagina che i visitatori vedono e nella quale
votano.
3. poll_send.php: Questa è la pagina dei ringraziamenti.
Ho cercato di scrivere il codice più chiaro possibile, inserendo anche dei
commenti per una migliore comprensione.
poll_global.php
<?
include("config.php");
//Connessione al database
@ $db = mysql_pconnect("$dbhost","$dbuname","$dbpass");
//Messaggio di errore nel caso che non avvenga una corretta connessione al
database
if (!$db)
{
echo "<font color='red'><b>Impossibile collegarsi al database. Riprova più
tardi!</b></font>";
exit;
}
//Seleziono il database
mysql_select_db("$dbname", $db);
?>
Questi sono i dati da inserire nel phpMyAdmin per creare la tabella per il
nostro sondaggio.
CREATE TABLE vota (
ip varchar(15) NOT NULL default '',
vote int(11) NOT NULL default '0',
PRIMARY KEY (ip)
);
Se non sapete come fare per creare una tabella nel vostro database, utilizzate
lo script qui sotto:
poll_table.php
<?
include ("poll_global.php");
$sql = "CREATE TABLE `vota` ( `ip` VARCHAR( 15 ) NOT NULL , `vote` INT NOT NULL
, PRIMARY KEY ( `ip` ) )";
$result = mysql_query($sql);
?>
poll_main.php
<html>
<head>
<title>SONDAGGIO</title>
</head>
<body>
<center>
<h1><font color='#660066'>Sondaggio!!</font></h1>
<?
//includo poll_global.php
include ("poll_global.php");
//Qui viene acquisito l'indirizzo IP dell'utente
$ip = $_SERVER[REMOTE_ADDR];
//Selezioniamo l'intero database
$sql = "SELECT * FROM `database_table`";
$result = mysql_query($sql);
//Numero di voti presenti nel database
$number_of_vote = mysql_num_rows($result);
//Visualizziamo il numero di voti
echo "<h3>There are <b>$number_of_vote</b> votes</h3>";
//Variabile contatore
$i = 0;
$score =0;
//Calcoliamo la media dei voti
While ($i < $number_of_vote)
{
$score = $score + mysql_result($result, $i, vote);
$i++;
}
//Visualizziamo la media dei voti
echo "<h3>Average vote is ". number_format($score/$number_of_vote, 1)
."/5</h3>";
//Se l'utente ha già votato, apparirà un messaggio di errore
$i = 0;
While ($i < $number_of_vote)
{
if ($ip == mysql_result($result, $i, ip))
{
echo "Hai già votato!!";
exit;
}
$i++;
}
?>
//Inizio Form
<form action="poll_send.php" method="post">
<table>
<tr><td>
Cosa ne pensi di questo sito
</td></tr>
<tr><td>
<input type="radio" name="vote" value="5" checked>
Bellissimo!!!(5/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="4"> Interessante (4/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="3"> Carino (3/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="2"> Così così (2/5)
</td></tr>
<tr><td>
<input type="radio" name="vote" value="1"> Non mi piace (1/5)
</td></tr>
<tr><td>
<input type="submit" value="Vota">
</td></tr>
</table>
</form>
</center>
</body>
</html>
poll_send.php
<html>
<head>
<title>SONDAGGIO</title>
</head>
<body>
<center>
<?
//Ricevo li valori delle variabili
$ip = $_SERVER[REMOTE_ADDR];
$vote = $HTTP_POST_VARS["vote"];
//Includo poll_global.php
include ("poll_global.php");
//Inserisco il voto nella tabella del database
$sql = "INSERT INTO `database_name` ( `ip` , `vote` ) VALUES ( '$ip', '$vote'
)";
$result=mysql_query($sql);
//Ringrazio l'utente per il suo voto e gli indico la pagina principale dei
risultati
echo "<h3>Grazie per aver votato!<br></h3>";
echo "<h3><a href='poll_main.php'>Clicca qui</a> per vedere i risultati del
sondaggio!</h3>";
?>
</center>
</body>
</html>
Ricordati di inserire tutti i files nella stessa directory!
Creare un guestbook
Vedremo come costruire un libro degli ospiti, meglio conosciuto come
Guestbook.
Cominciamo con l'aprire il nostro editor e a salvare il primo file, chiamandolo
config.php e inserendoci questo codice:
<?php
$msg_per_page = 5;
$mysql['host'] = "";
$mysql['pass'] = "";
$mysql['user'] = "";
$mysql['name'] = "";
@mysql_connect($mysql['host'], $mysql['user'], $mysql['pass']);
@mysql_select_db($mysql['name']);
?>
La prima variabile, $msg_per_page, ci serve per indicare il numero di messaggi
che si vogliono visualizzare per ogni pagina; ovviamente, il numero è
arbitrario, ma lasciatevi dare un consiglio... non alzate troppo la cifra
altrimenti chi non ha connessioni veloci potrebbe aver difficolt? alla
visualizzazione della pagina.
La seconda variabile, $mysql, è un array, e ci serve per indicare i dati del
nostro database MySQL.
In questo file non sono presenti altre variabili, ma già incontriamo due
funzioni: mysql_connect() e mysql_select_db().
Come è facile intuire le due funzioni sono legate a MySQL, infatti, la prima
serve per la connessione al server e la seconda per selezionare il database che
si vuole usare.
Passiamo ora alla creazione della tabella nel database MySQL.
Aprire un nuovo documento vuoto e inserire all'intorno questo codice:
<?php
require("config.php");
@mysql_query("DROP TABLE IF EXISTS gbook");
@mysql_query("CREATE TABLE gbook (
`id` INT(11) DEFAULT '0' NOT NULL AUTO_INCREMENT,
`nome` VARCHAR(255) NOT NULL,
`email` VARCHAR(255) NOT NULL,
`url` VARCHAR(255),
`messaggio` TEXT NOT NULL,
`ip` VARCHAR(255) NOT NULL,
PRIMARY KEY (`id`)
);");
echo "Operazione avvenuta con successo !!\n";
@mysql_close();
?>
Non ci sono variabili ma sono presenti due query al database, la prima ci serve
per cancellare la tabella se esiste già, la seconda per crearla.
Fatte attenzione, la tabella che serve a noi, si chiama "gbook", e se esiste già
verrà cancellata e tutti i dati presenti verrano cancellati e non saranno
recuperabili in alcun modo.
Dopo aver visto la parte di configurazione, cominciamo ad entrare nel vivo
dell'applicazione.
Ora, aprire un nuovo documento vuoto e salvarlo come: leggi.php ed ecco il
codice che dovrà contenere:
<?php
require("config.php");
$count_mess = @mysql_query("SELECT COUNT(id) FROM gbook");
$res_count = @mysql_fetch_array($count_mess);
if ($res_count[0] == FALSE) {
echo "Nessun messaggio ? stato inserito nel database";
} else {
$tot_pages = ceil($res_count[0]/$msg_per_page);
$curr_page = (!$_GET['page']) ? 1 : (int)$_GET['page'];
$primo = ($curr_page - 1) * $msg_per_page;
$query = mysql_query("SELECT * FROM gbook ORDER BY id DESC LIMIT $primo,$msg_per_page");
while($result = mysql_fetch_array($query)) {
$result['messaggio'] = str_replace("\n", "<br>", $result['messaggio']);
echo " <strong>? Nome:</strong> " . $result['nome'] . "<br>\n";
echo " <strong>? E-Mail:</strong> <a href=\"mailto:" . $result['email'] . "\">"
. $result['email'] . "</a><br>\n";
echo " <strong>? URL:</strong> <a href=\"" . $result['url'] . "\">" . $result['url']
. "</a><br>\n";
echo " <strong>? Messaggio:</strong><br> " . $result['messaggio'] . "\n";
echo " <hr>\n";
}
for($page = 1; $page <= $tot_pages; $page++) {
if($page == $curr_page) {
$pag .= "<strong>$page</strong> ";
} else {
$pag .= "<a href=\"?page=$page\">$page</a> ";
}
}
echo $pag . "<br>\n";
}
echo "<a href=\"firma.php\">Firma il Guestbook</a>";
@mysql_close();
?>
Questo file servirà per visualizzare tutti i messaggi degli utenti.
Le prime due variabili, $count_mess e $res_count, ci serviranno per impaginare
correttamente i messaggi presenti nel database.
Appena dopo queste due variabili ci troviamo davanti ad un if(), questo
controllo ci è utile per vedere se sono presenti o meno messaggi nel database,
se ce ne sono li stampa a video, in caso contrario viene fuori un messaggio di
allerta.
Ora incontriamo tre variabile, che, anchesse servono per l'impaginazione dei
messaggi.
Ed ecco finalmente che arriviamo alla parte 'importante' dello script.
Incontriamo subito la variabile $query che, tramite la funzione mysql_query() di
php ci permette di inviare un 'comando' al database.
Subito dopo si nota un ciclo while() che serve per stampare a video il tutto.
Infine, stampiamo a video tutte le pagine tramie un ciclo for() e chiudiamo la
connessione al database MySQL.
Nell'articolo precedente abbiamo visto come leggere i messaggi presenti nel
database, ora vedremo come inserirli.
Creiamo un file chiamato firma.php e inseriamoci questo codice:
<?php
require("config.php");
if ($_POST['sign'] == FALSE) {
echo " <form action=\"firma.php\" method=\"POST\">\n";
echo " <strong>- Nome *</strong> <input type=\"text\" name=\"nome\"><br>\n";
echo " <strong>- E-Mail *</strong> <input type=\"text\" name=\"email\"><br>\n";
echo " <strong>- URL</strong> <input type=\"text\" name=\"url\"><br>\n";
echo " <strong>- Messaggio *</strong> <textarea name=\"messaggio\" cols=\"35\"
rows=\"10\"></textarea><br>\n";
echo " <input type=\"hidden\" name=\"sign\" value=\"true\">\n";
echo " <input type=\"submit\" value=\" Firma! \">\n";
echo " </form>\n";
} else {
@mysql_query("INSERT INTO gbook (`id`, `nome`, `email`, `url`, `messaggio`,
`ip`)
VALUES ('', '" . $_POST['nome'] . "',
'" . $_POST['email'] . "',
'" . $_POST['url'] . "',
'" . $_POST['messaggio'] . "',
'" . $_SERVER['REMOTE_ADDR'] . "');");
echo "Grazie per aver firmato il nostro Guestbook<br>";
echo "<a href=\"leggi.php\">Leggi i messaggi</a>\n";
}
@mysql_close();
?>
In questa parte del codice salta subito agli occhi che c'è un if(), che serve
per controllare se una variabile è esistente o meno.
In caso positivo, inserisce il messaggio nel database tramite una query con la
funzione mysql_query(), altrimenti visualizza il form.
Eseguire l'upload di un file
Un'altra delle operazioni molto frequenti è quella che concerne l'upload
di file online. Quando si parla di upload bisogna tenere in considerazione una
serie di elementi per il corretto funzionamento dei propri script. Per prima
cosa è necessario che il file php.ini sia configurato in modo da limitare
correttamente le dimensioni dei file da caricare: se nella nostra applicazione è
possibile effettuare l'upload di file molto grossi, è necessario modificare la
variabile di configurazione max_upload_size affinché il suo valore sia adatto
alla nostra situazione.
In secondo luogo è importante ricordarsi che i form HTML che devono inviare i
file devono avere l'attributo enctype impostato a "multipart/form-data",
altrimenti i file non saranno inviati correttamente. Infine è bene ricordare che
i file caricati non sono salvati all'interno della variabile globale $_POST ma
all'interno di $_FILES, dalla quale saranno accessibili anche altre informazioni
addizionali come il nome del file temporaneo locale in cui è stato salvato il
file inviato, le dimensioni del file ed altro.
Vediamo nel dettagli come effettuare l'upload di un file. Prima di tutto creiamo
un semplice form HTML che si occuperà di richiedere all'utente l'inserimento di
un file:
<html>
<head>
<title>File upload</title>
</head>
<body>
<form method="post" action="testupload.php" enctype="multipart/form-data">
<input type="hidden" name="action" value="upload" />
<label>Carica il tuo file:</label>
<input type="file" name="user_file" />
<br />
<input type="sumit" value="Carica online" />
</form>
</body>
</html>
Tengo a precisare che potremmo specificare un campo di input nascosto chiamato
MAX_FILE_SIZE avente come valore la dimensione massima in byte del file da
caricare. Questo valore, anche se controllato sia dal browser che da PHP, non è
comunque sicuro, dato che può essere facilmente aggirato. È buona norma
effettuare sempre la validazione dei dati da PHP prima di salvarli o elaborarli
per evitare spiacevoli sorprese.
Tornando a noi, passiamo alla creazione del file testupload.php:
<?php
define("UPLOAD_DIR", "./uploads/");
if(isset($_POST['action']) and $_POST['action'] == 'upload')
{
if(isset($_FILES['user_file']))
{
$file = $_FILES['user_file'];
if($file['error'] == UPLOAD_ERR_OK and is_uploaded_file($file['tmp_name']))
{
move_uploaded_file($file['tmp_name'], UPLOAD_DIR.$file['name']);
}
}
}
?>
Queste poche righe di codice si occupano di controllare che i dati provenienti
dalla pagina precedente siano corretti, controllano la validità del file
caricato ed effettuano praticamente l'upload salvando i dati ove necessario.
L'array $_FILES permette di accedere ai seguenti valor:
* name: il nome del file caricato originariamente dall'utente;
* tmp_name: il nome temporaneo del file salvato da PHP in una cartella locale;
* type: il mime type del file (nel caso in cui il browser fornisca questa
informazione);
* size: le dimensioni in byte del file;
* error: un codice numerico che indica l'eventuale errore durante il caricamento
del file. Ad ogni numero possibile è associata una delle seguenti costanti:
o UPLOAD_ERR_OK (0): Non vi sono errori, l'upload è stato eseguito con successo;
o UPLOAD_ERR_INI_SIZE (1): Il file inviato eccede le dimensioni specificate nel
parametro upload_max_filesize di php.ini;
o UPLOAD_ERR_FORM_SIZE (2): Il file inviato eccede le dimensioni specificate nel
parametro MAX_FILE_SIZE del form;
o UPLOAD_ERR_PARTIAL (3): Upload eseguito parzialmente;
o UPLOAD_ERR_NO_FILE (4): Nessun file è stato inviato;
o UPLOAD_ERR_NO_TMP_DIR (6): Mancanza della cartella temporanea;
Con tutte queste informazioni risulta molto semplice analizzare un'operazione di
upload e comportarsi di conseguenza. La funzione is_uploaded_file controlla che
un file sia effettivamente uno di quelli caricati dall'utente, mentre
move_uploaded_file effettua fisicamente lo spostamento del file temporaneo nel
fiel di destinazione specificato.
Aggiungendo alcuni accorgimenti sulle dimensioni ed impacchettando tutto in una
libreria è possibile gestire in modo molto completo il caricamento di file
online senza rischiare di incorrere in problemi o malfunzionamenti. Come sempre
è importante ricordarsi che il path di destinazione di move_uploaded_file deve
essere un path valido.
Gestione dei file in PHP
Di seguito riporto alcuner istruzioni su come gestire i file in php:
Apertura file
<?
$file = fopen(nomefile.txt,"r");
?>
Chiusura file
<?
fclose($file);
?>
Modalità di apertura
| a | Apre il file per accodare informazioni |
|---|---|
| a+ | Apre il file per le leggere/accodare informazioni |
| r | Apre il file per sola lettura |
| r+ | Apre il file per lettura e scrittura |
| w | Apre il file per sola scrittura |
| w+ | Apre il file per scrittura/lettura |
| Se si usa"a" e "r" il file deve già esistere | |
Verifica apertura file
<?
if(!$file = fopen(nomefile.txt,"r"))
{
echo "Errore apertura file";
exit;
}
?>
Scrittura file
<?
fputs($file,"Questo è un file scritto con PHP ");
?>
Naturalmente al posto di una stringa, possiamo inserire una variabile che contiene il nostro testo.
Se si vogliono scrivere su più righe basta utilizzare:
"\r\n"
Leggere un file
<?
$testofile = fgets($file,255);
?>
Dove 255 sono i bytes da leggere
Apertura file
<?
$file = fopen(nomefile.txt,"r");
?>
Controlli sui file
<?
//Dimensioni di un file
filesize($file);
//Controllare se il file è una cartella
is_dir($file);
//Controllare se il file è ordinario
is_file($file);
//Controllare se è eseguibile
is_executable($file);
//Controllare se è leggibile
is_readble($file);
//Controlare se è scrivibile
is_writeable($file);
//Controllare il tipo
filetype($file);
?>
Aprire e leggere i contenuti di una cartella
<?
$lacartella = opendir('.');
while($file = readdir($lacartella)
{
$tutti_i_file[] = $file
}
?>
In questo modo avremo un arrey con tutti i file contenuti nella cartella corrente.
Se non usiamo il ciclo la funzione readdir legge solo il primo file della directory.
Realizzare un semplice contatore
Per realizzare un semplice contatore php bastano poche righe di codice e
il gioco è fatto.
Il codice da utilizzare per la realizzazione del contatore è questo:
<?
$var=@fopen("contatore.txt",'r');
$leggi=@fread($var,filesize("contatore.txt"));
@fclose($var);
if ($leggi==null)
{
$leggi=1;
}
else
{
$leggi = $leggi+1;
}
$var=@fopen("/indirizzo_directory/...../contatore.txt",'w');
@fwrite($var,$leggi);
@fclose($var);
echo "N° Visite: ",$leggi,"";
?>
Questo contatore si serve di un file di testo contatore.txt per segnare le
visite.
E' semplice da implementare ma ha un principale problema, ovvero: che si
aggiorna a ogni refresh.
Questo problema però, può essere eliminato con l'utilizzo dei cookie.
=====================================================
Realizzare un piccolo contatore
Il contatore che andremo a costruire, crea un cookie nel computer dell'utente
con il suo IP e aggiorna il conteggio in base allo stato del cookie. Se il
cookie è presente e l'IP scritto nel cookie è lo stesso IP dell'utente corrente,
allora lo script riconosce l'utente e sa che ha già visitato il sito oppure se è
presente il cookie, ma l'IP è diverso da quello dell'utente corrente oppure non
è presente, lo script sa che l'utente è nuovo oppure che il cookie è scaduto,
allora aggiorna il conteggio. Questo script usa la funzione setcookie(), la
quale deve essere inviata prima di inviare gli headers. Questo significa che
questa funzione dve essere inserita prima del codice HTML. Il conteggio, per
comodità, viene inserito in un file di testo ma se volete potete usare anche un
database. Ecco il codice.
$c_ip = $HTTP_COOKIE_VARS["user_ip"];
$counter_file = "counter/count.txt";
$counter_file_line = file($counter_file); if(!$c_ip) {
setcookie("user_ip", $REMOTE_ADDR, time()+360000); $counter_file_line[0]++;
$cf = fopen($counter_file, "w+");
fputs($cf, "$counter_file_line[0]"); fclose($cf);
}
elseif($c_ip != $REMOTE_ADDR){
$counter_file_line[0]++; $cf = fopen($counter_file, "w+");
fputs($cf, "$counter_file_line[0]");
fclose($cf);
}
Ora analizziamo lo script pezzo per pezzo.
$c_ip = $HTTP_COOKIE_VARS["user_ip"];
$counter_file = "counter/count.txt";
$counter_file_line = file($counter_file);
La prima riga assegna un nome ad una variabile. La variabile che abbiamo
nominato, è la variabile che farà riferimento al nostro cookie se lo script lo
ha creato in precedenza. Non è obbligatorio usare $HTTP_COOKIE_VARS[] per
rimandare a un cookie, generalmente può essere chiamato col suo nome com una
variabile (es. $user_ip). La seconda variabile, indica dove il file di testo per
il contatore deve essere memorizzato. Questa directory può essere modificata in
base alle esigenze di ognuno. La terza variabile apre il file di testo e ne
scrive il contenuto in un array usando la funzione file().
if(!$c_ip) {
Questa riga è la nostra istruzione if() che controlla la presenza della nostra
variabile.
setcookie("user_ip", $REMOTE_ADDR, time()+360000);
Questa riga crea il nostro cookie. Se non capite il funzionamento della funzione
setcookie() fae riferimento al manuale del PHP per magiori detagli, ma
fondamentalmente viene creato un cookie col nome "user_ip" e il suo valore è
l'IP dell'utente. Il terzo argomento è il tempo che trascorrerà prima che il
cookie venga cancellato e richiama la funzione time(). Come si può vedere, c'è
scritto time()+360000 che significa l'ora corrente più 360000 secondi. Questo è
il numero che ho scelto per il mio script ed è un valore accettabile prima che
il cookie venga eliminato comunque può essere modificato a piacimento. Se non
inserite il terzo elemento, il cookie non verrà mai eliminato, dovrete farlo a
mano. Questo codice viene usato solamente se il server non trova il cookie
richiesto.
$counter_file_line[0]++;
$cf = fopen($counter_file, "w+");
fputs($cf, "$counter_file_line[0]");
fclose($cf);
}
Questa è la parte di codice che aggiunge le informazioni al contatore. La prima
riga aggiunge il numero 1 al valore della prima riga nel file di testo. La
seconda riga apre il file per modificarlo ed inserirci i dati. La terza riga
scrive i nuovi dati nel file di testo. Infine, l'ultima riga chiude il file.
elseif($c_ip != $REMOTE_ADDR) {
Queste righe controllano il valore del cookie. Se il valore del cookie non è
uguale all'IP dell'utente corrente questa parte di codice viene saltata.
$counter_file_line[0]++;
$cf = fopen($counter_file, "w+");
fputs($cf, "$counter_file_line[0]");
fclose($cf);
}
Per questa riga non servono spiegazioni. Per visualizzare il contatore ci serve
solo una riga di codice come quella illustrata qui sotto.
echo $counter_file_line[0];
Il codice riportato qui sotto, visualizza il contatore. Se volete visualizzare
il contatore in una pagina diversa da quella che dove è inserito il codice che
incrementa il contatore, usa questo:
$counter_file = "counter/count.txt";
$counter_file_line = file($counter_file);
echo $counter_file_line[0];
Configurare php per l'invio di e-mail in locale
Inviare email da ambiente locale
Quando si sviluppano, in ambiente locale, degli script in PHP che devono inviare
email, molto spesso il test in locale non funziona perchè PHP non riesce a
trovare il server SMTP da utilizzare per la posta in uscita.
Per fare in modo che PHP utilizzi il server SMTP a nostra disposizione è
sufficiente aprire con un editor di testi, il file di configurazione di PHP che
si chiama php.ini, situato nella directory principale del proprio sistema
operativo (directory WINDOWS per XP), individuare la stringa smtp e impostarla
con il proprio server SMTP preferito.
Per esempio: se utilizzate Libero.it impostate la riga nel seguente modo:
smtp = smtp.libero.it
In questo modo sarete in grado di testare anche in locale gli script PHP che
inviano email.
Aggiornare automaticamente il copyright all'anno attuale
In fondo ad ogni sito spesso è possibile trovare scritte del tipo "Tutti
i diritti riservati © 2005", che spesso vengono inserite manualmente in puro
Html.
Ma cosa facciamo la notte di S. Silvestro? Invece di festeggiare e stappare lo
spumante pensiamo a cambiare l'anno del copyright in "2006"?... Non credo
proprio.
Per evitare che la gente che si colleghi da quel momento fino a prima del nostro
aggiornamento trovi ancora il copyright "aggiornato" al 2005 useremo la funzione
date() di Php che recupererà e stamperà a video solo l'anno, a partire dalla
data corrente.
Lo script andrà così realizzato:
<?php
$anno = date ("Y");
print "Tutti i diritti riservati © $anno";
?>
Ora potete festeggiare tranquillamente con i vostri amici e parenti senza
pensare all'aggiornamento del copyright.
Il modulo Segnala ad un amico
In questo tutorial vedremo come realizzare un modulo cosiddetto "Tell a
friend", ossia un form mail attraverso cui un visitatore può segnalare ad un
amico un sito web.
Lo script si compone di due pagine:
- modulo.htm , contenente il form per l'inserimento dei dati;
- send.php , contenente il codice PHP per l'invio dell'email.
Apriamo quindi il nostro editor HTML o testuale e digitiamo il codice di 'modulo.htm'
:
<form method="post" action="send.php">
Il tuo nome<br />
<input name="nomemittente" type="text" size="50" />
<br />
Il tuo indirizzo e-mail<br />
<input name="emailmittente" type="text" size="50" />
<br />
Il nome dell'amico<br />
<input name="nomedestinatario" type="text" size="50" />
<br />
L'indirizzo e-mail dell'amico<br />
<input name="emaildestinatario" type="text" size="50" />
<br />
<input type="submit" value="Invia segnalazione" />
<input type="reset" value="Cancella segnalazione" />
</form>
Il codice qui sopra riguarda logicamente solo il form, e quindi dovremo
aggiungerlo alla struttura di base, formata dai tag classici ed indispensabili,
quali <HTML>, <HEAD> e <BODY>.
Procediamo ora con la realizzazione di 'send.php' ; per spirito di eleganza,
realizzeremo un codice PHP che invii l'email in formato HTML, basandoci su
quanto detto in un altro tutorial:
<?PHP
// Processo di recupero dei dati
$nomemittente = $_POST['nomemittente'];
$emailmittente = $_POST['emailmittente'];
$nomedestinatario = $_POST['nomedestinatario'];
$emaildestinatario = $_POST['emaildestinatario'];
// Configuro il testo del messaggio che apparirà all'amico
$messaggio = "Ciao $nomedestinatario, ricevi questa mail perchè $nomemittente ti
ha consigliato di visitare AG web solutions";
// Processo di controllo [Opzionale]
if ($nomemittente==null)
{
echo ("Errore: compilare il campo 'Il tuo nome'");
}
else
{
if ($emailmittente==null)
{
echo ("Errore: compilare il campo 'Il tuo indirizzo e-mail'");
}
else
{
if ($nomedestinatario==null)
{
echo ("Errore: compilare il campo 'Il nome dell'amico'");
}
else
{
if ($emaildestinatario==null)
{
echo ("Errore: compilare il campo 'Indirizzo e-mail dell'amico'");
}
else
{
// Processo di configurazione dell'email
// [Destinatario, mittente, ecc]
$mail_to = $emaildestinatario;
$mail_from = $emailmittente;
$mail_subject = "$nomemittente ti segnala AG web solutions";
$mail_body = "<p><font color=#000000>$messaggio</font></p>";
// Intestazioni HTML
$mail_in_html = "MIME-Version: 1.0\r\n";
$mail_in_html .= "Content-type: text/html; charset=iso-8859-1\r\n";
$mail_in_html .= "From: <$mail_from>";
// Processo di invio
if (mail($mail_to, $mail_subject, $mail_body, $mail_in_html))
{
echo ("E-mail inviata con successo");
}
else
{
echo ("Errore interno durante l'invio...");
}
}
}
}
}
?>
Il codice è sufficientemente commentato, e presenta un processo di recupero dei
dati iniziale, seguito da un controllo e dal processo di invio. Salviamo i files
e proviamo a testare lo script.
Operazioni sulle stringhe con Php
Con questo tutorial impareremo a lavorare con le stringhe in Php.
Sappiamo benissimo che anche con i Css è possibile modificare del testo. La
differenza sostanziale sta nel fatto che mentre con i Css modifichiamo solo la
visualizzazione, con Php modifichiamo la stringa vera e propria.
Ve ne chiedete l'utilità di tutto ciò? Supponete di avere a che fare con un form
e volete che tutti i dati in esso inseriti siano scritti in maiuscolo. Dato che
ogni utente ha il suo modo di compilare i form, saremo noi a risolvere questo
problema.
Innanzitutto ecco un codice che effettua tutte le possibili operazioni su
stringhe:
<?php
//definisco la stringa su cui operare
$stringa = "visita sassidesign";
//operazioni con le stringhe
$strtolower = strtolower($stringa); //la stringa rimane tale perchè è già
minuscola
$strtoupper = strtoupper($stringa);
$ucfirst = ucfirst($stringa);
$ucwords = ucwords($stringa);
//stampo tutte le variabili
echo "Il risultato con strtolower() è: $strtolower <br />";
echo "Il risultato con strtoupper() è: $strtoupper <br />";
echo "Il risultato con ucfirst() è: $ucfirst <br />";
echo "Il risultato con ucwords() è: $ucwords <br />";
?>
Il codice è abbastanza commentato. Vediamo comunque in dettaglio le possibili
funzioni:
strtolower()
Converte l'intera stringa in minuscolo. Nel nostro caso la funzione non
convertirà niente, dato che la stringa di partenza è già in minuscolo;
strtoupper()
Converte l'intera stringa in maiuscolo;
ucfirst()
Converte la prima lettera della stringa in maiuscolo;
ucwords()
Converte la prima lettera di ogni parola in maiuscolo.
Ma veniamo al nostro problema. Vogliamo che tutti i dati inseriti nel form
vengano immagazzinati nel database in maiuscolo. Ecco come fare:
<?
$username = $_POST['username']; //recupero dal form
$usernamemaiuscolo = strtoupper($username); //converto in maiuscolo
// inserimento nel database della variabile 'usernamemaiuscolo' e non di 'username'
?>
Generare password casuali
Quante volte avete dimenticato una password? E quante volte che avete
eseguito le operazioni di recupero della password vi è arrivata una mail con una
password di lettere e numeri random?
Bhe, ecco un codice semplice ma che fa il suo dovere grazie alle funzioni rand e
chr di php.
<?php
// Lunghezza della password da generare
$lunghezza_password = 10;
for ( $k=1;$k<=$lunghezza_password;$k++ )
{
// $k multiplo di 3
if ( $k % 3 )
{
// Scegliamo se maiuscola o minuscola
if ( rand( 0,200 ) <= 100 )
{
// Maiuscola
// Nella tabella ASCII da 65 a 90 ci sono le lettere dell'alfabeto Maiuscole
$newpass .= chr( rand ( 65,90 ) );
}
else
{
// Minuscola
// Nella tabella ASCII da 97 a 122 ci sono le lettere dell'alfabeto Minuscole
$newpass .= chr( rand ( 97,122 ) );
}
}
// $k non è multiplo di 3
else
{
// Inseriamo un numero
$newpass .= rand( 0,9 );
}
}
print $newpass;
?>
Con questo piccolo script, generiamo una stringa di lunghezza a vostra scelta
composta da lettere (maiscole e minuscole) e numeri.
La funzione rand non fa altro che generare un numero casuale. Se non gli viene
passato nessun range, sceglie autonomamente. La funzione chr recupera il valore
nella tabella ASCII corrispondente al numero che gli viene passato.
Variabili PHP
Ricavare la posizione sul server di una pagina web
Avete mai visto un sito che indica: Ti trovi in...
Bene, per fare in modo che sulla vostra pagina web appaia il percorso non dovete
fare altro che inserire queste poche righe:
<?php print ("Sei in: "); ?>
<?php $currentPage = $_SERVER["PHP_SELF"];
print ($currentPage); ?>
Testate tutto e dovreste avere come output: Sei in: /nomecartella/nomepagina.php
Recuperare la provenienza dell'utente
Avete notato come molti siti che offrono un servizio di statistica per il nostro
sito danno anche la possibilità di controllare i siti da cui provengono gli
utenti?
Beh, per fare una cosa del genere viene usato questo piccolissimo script che
recupera l'indirizzo della pagina di provenienza dell'utente...
<?php
$refer = $_SERVER['HTTP_REFERER'];
echo ($refer);
?>
Recuperare l'indirizzo IP del visitatore
Molte volte, per svariati motivi, ci può essere utile conoscere
l'indirizzo IP (Internet Protocol) dei nostri visitatori, specie nelle
applicazioni che riguardano operazioni di scrittura, modifica o eliminazione su
database.
Dobbiamo sapere innanzitutto che generalmente il nostro IP è dinamico, nel senso
che ogni volta che chiudiamo una sessione internet e ne riapriamo un'altra,
questo indirizzo IP cambia.
L'indirizzo è formato da quattro numeri che possono variare tra 0 e 255 separati
da un punto; quando lavoriamo in locale il nostro IP è 127.0.0.0, ma un esempio
potrebbe benissimo essere 211.20.34.87.
Recuperare l'indirizzo IP del visitatore è molto facile; il comando per
stamparlo a video è questo,
<?php echo $REMOTE_ADDR ?>
ma potete modificare questa riga per fare in modo che l'indirizzo venga salvato
su un file di testo o su un database!
Conoscere la versione installata del Php
Capita spesso, specie a chi è alle prime armi con il php, di trovarsi
dinanzi alla necessità di sapere quale versione di php è installata nel PC. Per
esempio può capitare di dover scegliere se usare gli array $HTTP_POST_VARS[] e
$HTTP_GET_VARS[] o i nuovi ed equivalenti array $_POST[] e $_GET[] dato che
questi ultimi hanno sostituito i precedenti già dalla versione 4.1.0 di PHP.
La procedura per conoscerla è la seguente:
* Aprire l'editor PHP (anche il classico notepad)
* Creare una nuova pagina PHP, immettendo in essa questa riga di codice:
<?php phpinfo(); ?>
* Salvare la pagina
* Lanciare ora la pagina sul vostro server locale. Apparirà una tabella dove
sarà fornita la risposta al vostro interrogativo!
Dettagli sul client dell'utente
Per meglio capire il funzionamento facciamo un esempio pratico
verificando il browser del nostro visitatore. Per fare ciò utilizzeremo una
delle variabili di sistema. Sto parlando della variabile globale $_SERVER['HTTP_USER_AGENT'];.
Per prima cosa visualizziamo cosa contiene questa variabile con il seguente
codice per pura curiosità:
<?php
print $_SERVER['HTTP_USER_AGENT'];
?>
Con questo semplice codice abbiamo detto al nostro server di stampare a video il
contenuto della variabile. Per rendere un pò più dinamico introduciamo un
controllo if-else:
<?php
if ( strstr($_SERVER['HTTP_USER_AGENT'], "MSIE") )
{
print 'Stai usando Internet Explorer';
}
else
{
print 'Non stai usando Internet Explorer';
}
?>
In poche parole la funzione strstr cerca nella variabile, la presenza del testo
che gli abbiamo specificato, in questo caso MSIE e se lo trova risponde true.
Quindi il controllo if risponde di conseguenza "Stai usando Internet Explorer"
se la trova, altrimenti "Non stai usando Internet Explorer".
Effettuare il redirect con Php
Per motivi di logistica o di organizzazzione alle volte può essere
necessario spostare un file da una posizione sul server ad un' altra. Per
evitare di ritrovarsi con collegamenti interrotti e perdita di posizioni nei
motori di ricerca si ricorre al redirect (reindirizzamento).
Questo argomento è stato già trattato in precedenza per due linguaggi: Html (Meta-tag)
e Javascript.
Supponiamo di disporre della pagina "guestbook.php" inizialmente collocata nella
root del sito, e di volerla trasferire nella cartella "guestbook".
Sarà innanzitutto necessario creare la pagina "guestbook/guestbook.php" per il
corretto funzionamento del guestbook nella sua nuova posizione sul server,
nonchè rimpiazzare il codice di "guestbook.php" (quello nella root) con questo:
<?php
header("Location: guestbook/guestbook.php");
?>
Tanto per spiegarmi meglio avremo due file adesso (e non più uno):
* guestbook.php (che punta al nuovo guestbook grazie al redirect);
* guestbook/guestbook.php (il nuovo guestbook).
Inserire data e ora in una pagina web
Inserire la data e l'orario del server nelle proprie pagine web è
facilissimo.
Basta solo incollare queste righe di codice php:
Per la data:
<?php print (date ("d/m/Y")); ?>
Per l'ora:
<?php print (date ("H:i:s")); ?>
Quindi, con un po di ingegno potremmo avere, per esempio:
Sono le ore <?php print (date ("H:i:s")); ?> del <?php print (date ("d/m/Y"));
?>
Per ottenere la data in altri formati, cambiate i caratteri nella sintassi del
codice.
a - "am" o "pm"
A - "AM" o "PM"
d - giorno del mese a 2 cifre (con lo zero, eventualmente), da "01" a "31"
D - giorno della settimana in inglese a tre lettere
F - mese in forma estesa in inglese
h - ora in formato 12 ore
H - ora in formato 24 ore
g - ora in formato 12 ore (senza lo zero), da "1" a "12"
G - ora in formato 24 ore (senza lo zero), da "0" a "23"
i - minuti (con lo zero, eventualmente), da "00" a "59"
j - giorno del mese a 2 cifre (senza lo zero), da "1" a "31"
l - giorno della settimana in inglese; es. "Friday"
m - mese a 2 cifre (con lo zero, eventualmente), da "01" a "12"
n - mese a 2 cifre (senza lo zero), da "1" a "12"
M - mese in inglese a tre lettere
s - secondi a 2 cifre (con lo zero, eventualmente), da "00" a "59"
S - suffiso ordinale inglese
t - numero di giorni del mese specificato, da "28" a "31"
w - giorno della settimana espresso come numero, da "0" (Domenica) a "6"
(Sabato)
Y - anno a 4 cifre
y - anno a 2 cifre
z - giorno dall'inizio dell'anno
Recuperare la dimensione di un file
Il php ci mette a disposizione un comando per ricavare la dimensione in
byte di un file presente sul server.
Il comando da eseguire ? il seguente:
$dimensione = filesize("nomedelfile.xxx");
Pertanto, supponiamo di voler calcolare il peso del nostro file index.php... il
codice sar? il seguente:
<?php
echo ("Il file pesa ");
//recupero la dimensione del file in byte
$dimensione = filesize("index.php");
echo ($dimensione);
echo (" byte, pari a ");
//converto da byte a kilobyte
$dimensioneinkb = ($dimensione / 1024) ;
echo ($dimensioneinkb);
echo (" kb.");
?>
La riga $dimensioneinkb = ($dimensione / 1024) ; serve a convertire la grandezza
da byte a kilobyte (1 kb = 1024 byte).
Realizzare un sito facilmente aggiornabile
Qui di seguito vedremo come realizzare un sito in PHP. In dettaglio
vedremo le tecniche da utilizzare per un sito web facilmente aggiornabile.
Supponiamo di avere un sito con un header superiore, un corpo centrale ed un
footer inferiore.
Inserendo in ogni pagina il codice di header, footer e corpo centrale,
l'aggiornamento risulterebbe assai difficoltoso e lento. Ci serviremo quindi del
comando include() di PHP, che permette di richiamare più files in altri.
Creiamo un file "header.php" ed inseriamoci questo codice:
<div id="header">
Qui tutto il codice dell'header...
</div>
Da notare come in questo file non siamo presenti i tags HTML o BODY.
Ora creiamo "footer.php":
<div id="footer">
Qui tutto il codice del footer
</div>
Quindi "index.php":
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Il mio sito con PHP</title>
</head>
<body>
<!-- Inizio HEADER -->
<?php include("header.php"); ?>
<!-- Fine Header -->
<!-- Inizio codice pagina -->
<div id="corpo">
Qui il codice della pagina
</div>
<!-- Fine codice pagina -->
<!-- Inizio codice footer -->
<?php include("footer.php"); ?>
<!-- Fine codice footer -->
</body>
</html>
Da notare come il codice di header e footer venga richiamato in ogni pagina, di
modo che sia possibile modificarlo nei rispettivi file e rendere effettive le
modifiche in tutte le pagine del sito.
Possiamo ora personalizzare la grafica dei tre DIV con i CSS. Sicuramente un
passo in avanti nella realizzazione di un sito web.
Creare un RSS con PHP e MySql
RSS, o Rich Site Summary ormai si sta diffondendo
a macchia d'olio su tutto il web.
Il segreto del suo successo sta nel fatto che RSS è veloce e semplice allo
stesso tempo.
In questo tutorial è descritto come creare e ad aggiornare il feed RSS
automaticamente utilizzando PHP.
Il database
Creiamo la tabella news nel nostro database mysql
CREATE TABLE news (id int PRIMARY KEY AUTO_INCREMENT,
title varchar(255),
content text);
Iniziamo a riempire qualche campo di esempio
INSERT INTO news VALUES ('', 'test', 'test content');
INSERT INTO news VALUES ('', 'test2', 'more content');
Questa è la struttura del file RSS che dobbiamo ricreare.
<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>TagTagWeb</title>
<link>http://www.tagtagweb.com</link>
<description>Feed </description>
<language>it</language>
<item>
<title>Titolo 1</title>
<link>http://www.yoururlhere.com/1</link>
<description>Contenuto 1</description>
</item>
<item>
<title>Titolo 2</title>
<link>http://www.yoururlhere.com/2</link>
<description>Contenuto 2</description>
</item>
</channel>
</rss>
Script Php
La prima cosa da fare è recuperare i dati presenti sul database
<?php
$connection = mysql_connect("localhost", "username", "password");
mysql_select_db("database", $connection);
$select = "SELECT * FROM news ORDER BY id DESC LIMIT 5";
$query = mysql_query($select) or die(mysql_error());
?>
Abbiamo chiesto al database di restituirci al massimo 5 righe ordinate dal più
recente al più vecchio
Iniziamo adesso a scrivere il file:
<?
$file = fopen("rss.xml", "w");
fwrite($file, "<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>TagTagWeb Feed</title>
<link>http://www.tagtagweb.com</link>
<description>Feed </description>
<language>it</language>");
//cicliamo sugli elementi ricavati da db e scriviamo gli items
while($array = mysql_fetch_array($query)){
extract($array);
$content = htmlentities($content);
fwrite($file, "<item>
<title>$title</title>
<link>http://www.tagtagweb.com/index.php?blog=post&id=$id</link>
<description>$content</description>
</item>");
}
fwrite($file, "</channel></rss>");
fclose($file);
?>
In questo caso abbiamo creato un file rss.xml, è possibile inoltre creare RSS al
volo e far visualizzare all'utente il contenuto xml direttamente sul browser.
Il procedimento è simile cambiano solamente alcuni accorgimenti:
<?php
$connection = mysql_connect("localhost", "username", "password");
mysql_select_db("database", $connection);
$select = "SELECT * FROM news ORDER BY id DESC LIMIT 5";
$query = mysql_query($select) or die(mysql_error());
header("Content-type: text/xml"); //riga importate per far apparire l'xml nel
browser
//scrivo direttamente sul documento
echo "<?xml version="1.0"?>
<rss version="2.0">
<channel>
<title>TagTagWeb RSS</title>
<link>http://www.tagtagweb.com</link>
<description>Feed</description>
<language>it</language>";
while($array = mysql_fetch_array($query)){
extract($array);
$content = str_replace("<br />", "\n", $content);
$content = htmlentities($content);
$content = str_replace("&", "&", $content);
echo "<item>
<title>$title</title>
<link>http://www.tagtagweb.com/index.php?blog=post&id=$id</link>
<description>$content</description>
</item>";
}
echo "</channel></rss>";
?>
=======================================================================
Creare feed Rss con PHP e MySQL
In questo tutorial ci occuperemo della realizzazione di un sistema PHP e MySQL
in grado di gestire in automatico un feed rss.
In particolare gestiremo la tabella MySQL "News", composta da tre campi:
- ID
- TITOLO
- DESCRIZIONE
Ciò che il nostro sistema dovrà fare sarà connettersi al database MySQL, quindi
selezionare la tabella "news", estrapolare i dati e visualizzare le ultime news
come elementi RSS.
Creiamo un nuovo file e chiamiamolo "rss.php":
<?php
// Eseguo le operazioni di connessione al database MySQL
$connessione = mysql_connect("localhost", "username", "password");
mysql_select_db("nomedatabase", $connessione);
$selezionedati = "SELECT * FROM news ORDER BY ID DESC LIMIT 10";
$query = mysql_query($selezionedati) or die(mysql_error());
// Modifico l'intestazione e il tipo di documento da PHP a XML
header("Content-type: text/xml");
// Eseguo le operazioni di scrittura sul file
echo ("<rss version=\"2.0\">");
echo ("<channel>");
echo ("<title>Nome del FEED </title>");
echo("<link>http://www.miosito.com</link>");
echo ("<description>Una descrizione del FEED e del mio sito</description>");
echo "<copyright>Copyright 2006 Mio sito.com </copyright>\n";
echo "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n";
echo "<managingEditor>miamail@miosito.com</managingEditor>\n";
echo "<webMaster>miamail@miosito.com</webMaster>\n";
echo ("<language>IT-it</language>");
while($array = mysql_fetch_array($query)){
extract($array);
echo "<item>
<title>$TITOLO</title>
<link>http://www.miosito.com/leggi.php?ID=$ID</link>
<description>$DESCRIZIONE</description>
</item>";
}
echo "</channel></rss>";
?>
Alcune considerazioni
Sebbene il codice sia sufficientemente commentato, sono necessarie alcune
considerazioni.
Si notino innanzitutto le righe:
// Eseguo le operazioni di scrittura sul file
echo ("<rss version=\"2.0\">");
echo ("<channel>");
echo ("<title>Nome del FEED </title>");
echo("<link>http://www.miosito.com</link>");
echo ("<description>Una descrizione del FEED e del mio sito</description>");
echo "<copyright>Copyright 2006 Mio sito.com </copyright>\n";
echo "<docs>http://blogs.law.harvard.edu/tech/rss</docs>\n";
echo "<managingEditor>miamail@miosito.com</managingEditor>\n";
echo "<webMaster>miamail@miosito.com</webMaster>\n";
echo ("<language>IT-it</language>");
in cui dovremo inserire le informazioni del nostro FEED e quindi del nostro sito
web.
Alcuni di questi elementi sono facoltativi, ma è buona abitudine inserirli
comunque.
Particolare attenzione al codice
while($array = mysql_fetch_array($query)){
extract($array);
echo "<item>
<title>$TITOLO</title>
<link>http://www.miosito.com/leggi.php?ID=$ID</link>
<description>$DESCRIZIONE</description>
</item>";
}
in cui lo script effettua il ciclo di visualizzazione dei vari records.
Ogni elemento di un file RSS è contenuto nel TAG "ITEM", e possiede tre
sub-elementi:
- title
- link
- description
Come titolo, lo script manda a video il corrispondente testo presente nel campo
TITOLO della tabella a livello del record selezionato.
Come description, lo script manda a video il rispettivo testo presente nel campo
DESCRIPTION della tabella a livello del record selezionato.
Per quanto riguarda il sub-elemento LINK:
<link>http://www.miosito.com/leggi.php?ID=$ID</link>
da notare il fatto che si presuppone nel nostro sito esista una pagina LEGGI.PHP
che in base all'ID digitato, visualizza i dati di una news particolare. Si
tratta sostanzialmente di una semplice pagina di visualizzazione delle news.
Lo script visualizza l'ID corrispondente al record selezionato per ogni elemento
ITEM.
=======================================================================
Creare un feed RSS 2.0 in 6 passi
Come creare un feed RSS 2.0
Se siete in grado di imparare l’HTML, allora potete facilmente imparare a creare
un feed RSS 2.0. In questo articolo vi accompagnerò passo passo nella creazione
di un feed RSS partendo da zero.
Passo 1: Dichiarazione XML
Visto che RSS 2.0 deve essere un documento XML valido, la prima riga nel vostro
feed rss deve essere la dichiarazione XML.
< ?xml version="1.0" encoding="utf-8"?>
L’encoding è opzionale ma raccomandato. Se state usando qualcosa di diverso da
UTF-8, ricordatevi di cambiare la riga in accordo con il set di caratteri che
utilizzate.
Passo 2: Canale RSS
In questo passo dobbiamo aprire il tag rss, e il tag channel. Tutto il contenuto
del vostro feed andrà dantro a questi tag.
Passo 3: Informazioni del Feed RSS
Successivamente dovete inserire le informazioni che riguardano il vostro feed,
tipo il titolo (spesso è uguale alnome del sito di orgine), la descrizione, e un
link al sito a cui si riferisce.
Importante è il tag language, dove è importante specificare il codice della
lingua in cui è scritto il feed. Nel nostro caso sarà it-it, ma potrebbe essere
us-en, per esempio se il contenuto è in inglese
http://www.esempio.it/
Questa è la descrizione del mio feed
Mon, 12 Sep 2005 18:37:00 GMT
it-it
Il tag lastBuildDate dovrebbe indicare la date e l’ora dell’ultima modifica del
feed. Le date nei feed RSS dovrebbero aderire al documento RFC 822.
Anche se il tag lastBuildDate non è obbligatorio è altamente consigliato
inserirlo.
Passo 4: “Items” RSS
I contenuti del nostro feed sono elencati negli “item” (elemento) di ogni feed.
Ogni Item ha un titolo, link, descrizione, data di pubblicazione e guid (un
identificatore univoco di questo elemento).
http://esempio.it/item/123
http://esempio.it/item/123
Mon, 12 Sep 2005 18:37:00 GMT
[CDATA[ Questa è la descrizione. ]]
Assicuratevi di convertire ogni carattere che potrebbe causare la mancata
validazione dell’XML, questi caratteri includono < , >, & - . E’ buona norma
includere tutto il contenuto che potrebbe essere formattato in HTML in una
sezione CDATA.
Passo 5: Chiusura del tag Channel e RSS.
Passo 6: Convalidate il Feed
Verificate la validità del vostro nuovo feed usando FeedValidator.org.
Altre cose di cui tener nota:
* Categorie – E’ una buona idea includere anche il tag category nel vostro feed
RSS, questo va all’interno del tag item. Potete dare ad ogni item molteplici
categorie, basta includere più elementi category.
* Questo è solo una micro introduzione a quello che si può fare con un feed RSS,
vi rccomando di leggere le specifiche RSS 2.0 per maggiori informazioni.
http://digitaldivide.garuti.it/2005/10/12/creare-un-feed-rss-20-in-6-passi/
Visualizzare un'immagine... solo se il campo di un
database non è vuoto
In molte applicazioni web, specie nei guestbook e nei forum notiamo come
alcuni utenti hanno, a fianco del loro username, il disegno di una casetta
linkata alla propria home page e altri utenti no! La spiegazione è semplice:
l'utente con la cesetta ha un sito web, quello senza no! La risposta è
banalissima... ma non è questo che volevo spiegarvi :)
Vediamo la parte pratica. Chi ha avuto a che fare con un'applicazione simile
saprà che è impossibile (senza adottare lo script che spiegherò tra un po')
scegliere di visualizzare l'immagine se il campo del database è pieno o di non
visualizzarla se questo è vuoto!
Creiamo pertanto uno script ad hoc per le nostre esigenze, supponendo di avere a
che fare con un database (lascio a voi il compito della connessione) che dispone
del campo 'sitoweb' e di avere accesso ai dati grazie al recorset 'dati_utente':
<?php
$sitoweb = $row_dati_utente['sitoweb']; //la variabile sitoweb corrisponde al
campo sitoweb del database
if ($row_dati_utente['sitoweb'] != "")
{
//se questa variabile non è vuota stampo la casetta con il collegamento
echo "<a href=\"http://$sitoweb\"><img src=\"/images/home.jpg\" alt=\"Visita il
sito dell'autore\" width=\"17\" height=\"17\" target=\"blank\" border=\"0\"
/></a>";
}
else
{
echo ""; //altrimenti non visualizzo niente
}
?>
Come potete capire abbiamo innanzitutto stabilito che la variabile '$sitoweb'
viene presa in input dal campo 'sitoweb' del database. In seguito abbiamo
definito che se il campo 'sitoweb' non è vuoto viene stampata l'immagine della
casetta (/images/home.jpg) con il link alla home page; in caso contrario non
viene stampato niente.
L'html relativo all'inserimento dell'immagine linkata è stato creato grazie al
comando echo di php. Abbiamo dovuto pertanto usare le cosiddette sequenze di
escape scrivendo \" al posto delle sole " (virgolette).
Più difficile a dirsi che a farsi!
Invio e-mail
In questo tutorial vedremo come inviare e-mail dal web, con dei moduli a
piacere con il PHP.
Creiamo la pagina contenete il modulo, "modulo.htm". Ecco il codice del form, da
inserire tra i tags BODY:
Codice
<form method="post" action="inviamail.php" name="inviamail">
Nome:
<input type="text" size="40" name="nome">
E-mail:
<input type="text" size="40" name="email">
Oggetto:
<input type="text" size="40" name="oggetto">
Messaggio:
<textarea cols="50" rows="10" name="messaggio"></textarea>
<input type="submit" value="Invia"><input type="reset" value="Cancella">
</form>
Ora creiamo "inviamail.php". Essa conterrà le istruzioni PHP per inviare la mail
ad indirizzo a piacere. Ecco il codice:
<?php
$indirizzo="tuamail@dominio.it";
{
mail($indirizzo,"Messaggio da parte di $nome: $oggetto","$nome - $email ha
inviato il seguente messaggio:","$messaggio");
echo ("Il messaggio è stato inviato con successo ");
}
?>
<p><a href="http://www.sito.com">Torna al sito</a></p>
Ed ecco che, una volta impostata la variabile $indirizzo con il vostro indirizzo
e-mail, lo script vi invierà tutti i contatti effettuati con il form della
pagina "modulo.htm".
Inviare mail da un form: la funzione mail()
In questa lezione vediamo come creare un modulo html capace di spedire
e-mail tramite il php.
Nel nostro caso creeremo il codice necessario per permettere all'utente di
inviarci un'email compilando un semplice form sul nostro sito web!
Così facendo nascondiamo anche il nostro indirizzo agli occhi di eventuali
spammer! Procediamo subito con la creazione delle due pagine... vediamo la prima
modulo.htm
<form action="send_mail.php" method="post" name="mail" id="mail">
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td><div align="center">Inserisci l'indirizzo presso il quale ricontattarti</div></td>
</tr>
<tr>
<td><div align="center">
<input name="indirizzo" type="text" id="indirizzo" size="40" maxlength="60">
</div></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><div align="center">Oggetto del messaggio:</div></td>
</tr>
<tr>
<td><div align="center">
<input name="oggetto" type="text" id="oggetto" size="40" maxlength="50">
</div></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td><div align="center">Corpo del messaggio: </div></td>
</tr>
<tr>
<td><div align="center">
<textarea name="corpo" cols="40" rows="7" id="corpo"></textarea>
</div></td>
</tr>
<tr>
<td><div align="center">
<input type="submit" name="Submit" value="Invia">
<input type="reset" name="Submit2" value="Pulisci">
</div></td>
</tr>
</table>
</form>
Ora passiamo alla pagina send_mail.php che recupererà i dati dal form e li
invierà tramite e-mail all'indirizzo specificato!
<?php
$mail_mittente = $_POST['indirizzo'];
$mail_destinatario = "michele@sassi.it"; //e-mail a cui saranno inviati i
messaggi
$mail_oggetto = $_POST['oggetto'];
$mail_corpo = $_POST['corpo'];
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo, "From: $mail_mittente"))
{
echo "E-mail inviata con successo";
}
else
{
echo "Errore... Non è stato possibile inviare alcun messaggio.";
}
?>
Personalizzate voi la grafica del vostro form, non posso pensare a tutto io ;)
Attenzione però perchè questa operazione non va a buon fine se il nostro server
è temporaneamente fuori servizio o se non dispone del SendMail.
Creare un circuito banners in PHP
In questo tutorial vedremo come realizzare un semplice circuito di
rotazione banner in PHP.
Supponiamo di voler far ruotare 3 banners, e di non disporre di database MySQL
per memorizzare le informazioni dei singoli banners.
La pagina in cui ruotano i nostri banners si chiamerà "circuito.php".
Tramite la funzione random genero un numero a caso compreso tra 1 e 3, quindi lo
controllo con un ciclo SWITCH (il migliore in questo caso) e infine, in base al
numero visualizzo un banner.
Ecco il codice da inserire all'inizio della pagina prima dei TAGs HTML:
<?
// Genero il numero casuale
$numero = rand(1,3);
// Ciclo SWITCH con tanti casi quanti sono i banners
switch($numero)
{
// Primo banner
case "1":
$img = "banner1.gif";
$link = "http://www.link1.it";
break;
// Secondo banner
case "2":
$img = "banner2.gif";
$link = "http://www.link2.it";
break;
// Terzo banner
case "3":
$img = "banner3.gif";
$link = "http://www.link3.it";
break;
}
?>
Ed ecco ora il codice da inserire nel punto in cui si vuole visualizzare il
banner:
<?php
// Visualizzo il banner
echo ("<a href='$link' target='_blank'><img src='$img' border='0'></a>");
?>
Potremmo inserire il primo codice in un file a parte del tipo "cod.php" e
richiamarlo con un include() nei vari files in cui deve comparire il banner...
Aggiungiamo MySQL
E' possibile far sì che le informazioni riguardo ai banners siano prelevate da
MySQL.
Supponiamo di avere una tabella "banners" con tre campi:
- id, di tipo INT - chiave primaria - AUTO INCREMENT
- img, di tipo TEXT
- link, di tipo TEXT
La selezione del banner avverrebbe in base all'ID:
<?
// Genero il numero casuale
$numero = rand(1,3);
// Genero il codice MySQL per la selezione
$query = mysql_query("SELECT * FROM banners WHERE id = '$numero'");
// Quindi assegno i risultati
$img = $row_query['img'];
$link = $row_query['link'];
?>
Il processo di visualizzazione è il medesimo del primo esempio.
Creiamo un Photoblog con PHP e MySQL
Pixelpost (http://www.pixelpost.org/), un photoblog basato su un motore
scritto in PHP e MySQL, usa correttamente XHTML e CSS tutto documentato e
modificabile con grande semplicità.
Requisiti
* Spazio web sufficiente: non per il software in se (circa 400 KB), ma per le
immagini
* Apache Webserver o Windows IIS
* PHP, versione 4.3.0 o superiore
* PHP con GD-lib con JPG-support. (richiesto per la corretta visualizzazione
delle thumbnails)
* MySQL versione 3.24.58 o superiore
* Un database MySQL funzionante
Scarichiamo il file pixelpost:
http://www.pixelpost.org/releases/pixelpost_1.4.3.zip
Editare il file pixelpost.php
Attraverso il vostro editor di testo preferito, aprite pixelpost.php che potete
trovare dentro la cartella /includes e modificate le seguenti righe: