|
|
| Un contatore grafico in PHP | Immagine random ad ogni accesso di pagina |
| Come ottimizzare le tabelle di un database MySQL | Suddividere un testo su più pagine. |
| Creare un contatore grafico in PHP appoggiandoci su un file di testo. | Come realizzare un sito in PHP. |
| Form per invio email in formato HTML | Visualizzare un'immagine... solo se il campo di un database non è vuoto |
| Generare password random | Visualizzare un link a caso |
| Cambiare il banner in base alla pagina | Fogli di calcolo al volo con Php |
| Indicare il percorso della pagina sul server | Data e ora in una pagina web |
| Cosa sono e come settare i chmod | Includere file esterni su una pagina web |
| Formattare il testo di una textarea | Calcolare la dimensione di un file |
| Un saluto personalizzato in base all'ora | Spedire e-mail da un form tramite php |
| Andare a capo in una textarea: il comando nl2br | Un motore di ricerca con Php e Google |
| Un'applicazione intelligente per lo smistamento dei messaggi provenienti da form-mail | Un'area riservata basata su un if-else |
| Creare immagini al volo con GD Library di Php | Immagini di dimensione variabile con Php e GD Library |
| Controllare la corrispondenza tra due campi di un form | Realizzare una calcolatrice con Php |
| Creare cartella e uploadare files | Collegare immagini a un database mysql |
| Reperire l'indirizzo IP di un visitatore | Convertire una stringa in maiuscolo e in minuscolo |
| Generare numeri casuali | Creare un menu dinamico in Php |
| Creare una sezione di annunci | Campi del Database di MySQL |
| Leggere il codice sorgente HTML di una pagina web (in remoto) | MySQL: generare una tabella HTML con una semplice istruzione SELECT |
| Creare un log con PHP | Caricare un file sul server con PHP |
| Ultima modifica | Evitare l'interpretazione del codice HTML |
| Un contatore di accessi in formato grafico | Ricavare informazioni sugli utenti |
| Lavorare con i file di testo | Contiamo gli accessi alle nostre pagine web con MySQL |
| La funzione Date() - 1 | Tempo di caricamento per una pagina PHP |
| Operazioni matematiche con PHP | Estrarre dati da un Db di MySQL |
| Realizziamo un semplice gioco a quiz | Spedire Email con PHP |
| La prima pagina in PHP. Il comando print ed i commenti | Un po' di sintassi... |
Un contatore grafico in PHP
Articolo a cura di
Davide Salonia
Riferimenti dell'autore: @ URL
Oggi vedremo come creare un
contatore grafico in PHP appoggiandoci su un file .TXT.
Iniziamo col creare
il nostro file .TXT con il Blocco Note, scriviamo 0 e salviamo chiamandolo
"contatore".
Creiamo una cartella e diamogli nome "imgCont", creiamo 10
immagini .jpg, e diamogli nome da 0 a 9 in base all'immagine, e inseriamole
dentro la cartella.
Adesso iniziamo col scrivere le prime righe di codice che
si connetteranno con il file, preleveranno il valore, lo incrementeranno e lo
modificheranno:
Creiamo la funzione e le variabili che ci
serviranno:
<?
function conta() { // creiamo la funzione del
contatore
$i=0;//Inizializziamo la variabile i per il ciclo del recupero
dati
$imageFolder="imgCont";// Creiamo la variabile con il percorso delle
immagini per il nostro contatore
Adesso apriamo il file e lo archiviamo in un
array:
$file=fopen("count.txt","r+");//Apriamo il file in lettura e
scrittura
$recupero=file("count.txt");//Apriamo il file archiviandolo in un
array
Controlliamo se l'utente è già entrato, in questo caso il contatore non
verrà incrementato:
if (!isset($_SESSION['PhpCounter'])) {//controlliamo se
la visita è già stata fatta
$recupero[0]++;//se è la prima volta che l'utente
entra, incrementiamo il contatore
$_SESSION['PhpCounter']="";//inizializziamo
la sessione di controllo se è la prima
volta
fwrite($file,$recupero[0]);//scriviamo il nuovo valore del contatore,
ovvero il contatore incrementato
}
A questo punto, chiudiamo il
file:
fclose($file);//chiudo il file
Ed ora, diamo vita grafica al
contatore:
$quanti=strlen($recupero[0]);//Riprendiamo l'array creato e ne
verifico la grandezza
while($i < $quanti) {//iniziamo il ciclo per la
divisione dei numeri
$numeri=substr($recupero[0],$i,1);//dividiamo i numeri
incrementando ogni volta la posizione di uno, fino alla lunghezza del
numero
echo "<img src='".$imageFolder."/".$numeri.".jpg'>";//scriviamo
i tag html per richiamare le immagini e in base al numero, richiamiamo la
corrispondente!
$i=$i+1;//incrementiamo i
}
}
conta(); //avviamo la
funzione
?>
Immagine random ad ogni accesso di
pagina
Programma Blocco note/Macromedia Dreamweaver
Difficoltà
facile
Con questo tutorial vedremo come inserire in una pagina in codice .php
per far visualizzare le immagini in modo casuale ad ogni accesso alla pagina
scelta, è un tutorial molto semplice e ci basteranno poche righe di
codice.
Questo è il codice che useremo per il nostro
scopo
<?
$num=rand(1,10);
print("<img
src=\"images/img".$num.".gif\">");
?>
Allora spieghiamo questo
codice. La variabile $num ha un valore random da 1 a 10 e ad ogni ingesso questo
numero cambia. Il comando print "stampa" sullo schermo il codice per far
visualizzare le immagini che dovranno essere rinominate come img1.gif/img2.gif.
Per far si che il codice funzioni la pagina deve avere estenzione .php.
Ecco
la pagina di esempio, entrate ed uscite pià volte per vederne i risultati.
Come ottimizzare le tabelle di un database
MySQL
Queste poche righe di codice consentono di utilizzare OPTIMIZE
TABLE, un programmino per ottimizzare le tabelle di un database MySQL (n.b.
OPTIMIZE TABLE funziona solo con tabelle di tipo MyISAM o BDB).
Questo script
è utile nel caso ci trovassimo ad utilizzare database di una certa grandezza, a
cui abbiamo fatto aggiunte, cancellazioni o modifiche. Gli spazi vuoti verranno
rimossi , e verrà riordinato l'indice del database stesso. Questo porterà
consistenti guadagni in termini di spazio, velocità e
prestazioni.
<?
$host = "host_database";
$user =
"username";
$pass = "password";
$db_name = "nome_del_database";
$db =
mysql_connect($host, $user, $pass);
mysql_select_db($db_name, $db);
echo
"Ottimizzazione DataBase in corso...";
$SQL = "OPTIMIZE TABLE ";
$result =
mysql_list_tables($DATABASE);
$i = 0;
while ($i <
mysql_num_rows($result)) {
$name_table = mysql_table_name($result,
$i);
echo "Ottimizzazione tabella: $name_table .....<BR>";
$SQL .=
$name_table;
$SQL .= ",";
$i++;
}
$SQL =
substr($SQL,0,strlen($SQL)-1);
$result_set =
mysql_query($SQL);
mysql_free_result($result_set);
?>
Basterà creare
un file con estensione .php, copiare ed incollare questo codice, ed eseguirlo
periodicamente.
Suddividere un testo su più pagine.
Questo non
è l'unico modo per farlo, ma è un metodo abbastanza utile e semplice da
utilizzare. Per selezionare il testo da suddividere, basta richiamarlo in una
variabile. Ecco due esempi:
$testo = "<strong>Prima
pagina:</strong><br />Ciao, tutto bene?<br />Sì... tutto a
posto![new_page]" ; $testo .= "<strong>Seconda
pagina:</strong><br />Ciao, dove vivi?<br />A
Milano![new_page]" ; $testo .= "<strong>Terza pagina:</strong><br
/>Ciao, sei innamorato?<br />Moltissimo!" ;
oppure
$testo =
"<strong>Prima pagina:</strong><br />Ciao, tutto bene?<br
/>Sì... tutto a posto![new_page] <strong>Seconda
pagina:</strong><br />Ciao, dove vivi?<br />A
Milano![new_page] <strong>Terza pagina:</strong><br />Ciao,
sei innamorato?<br />Moltissimo!" ;
Nel primo modo viene ripetuta per
tre volte la variabile $testo, nel secondo invece stata dichiarata una volta
sola. Decidete voi quale delle due soluzioni utilizzare... il risultato è
assolutamente identico.
Ma in tutte e due le soluzioni viste, troviamo una
cosa nel testo la scritta " [new_page] ", ed è proprio questa piccola scritta
che ci permetterà, col metodo che andiamo ora a vedere, di suddividere in più
pagine il nostro testo!
Ecco il metodo:
$tot_pages = explode (
"[new_page]" , $testo );
if (! is_numeric ( $page )) { $page = 1 ; }
echo
$tot_pages [ $page - 1 ] . "<p>" ;
for ( $i = 1 ; $i < count (
$tot_pages ) + 1 ; $i ++)
{
if ( $i == $page ) {
echo
"<strong>$i</strong> " ;
} else {
echo "<a
href=\"?page=$i\">$i</a> " ;
}
}
Analiziamo un pò questo
codice.
Nella prima riga troviamo la variabile $tot_pages che dichiara la
funzione explode() e che ci serve per suddividere il testo in più parti, tante
parti quante sono le scritte "[new_page]" e per selezionare dunque il numero di
pagine nelle quale suddividere il testo.
Una riga sotto c'è un if() che serve
per selezionare la pagina e nel caso che la variabile $page non sia dichiarata
e/o non sia di valore numerico, in automatico seleziona la pagina numero
uno.
Scendendo troviamo la funzione echo() che utiliziamo per stampare a
video il testo selezionato (tramite la variabile $page vista in
precedenza).
Infine c'è un ciclo for() per stampare a video le pagine ed
all'interno un controllo if-else che permette di stampare a video in grassetto
la pagina selezionata e fare un collegamento ipertestuale alle altre.
Lo
script è davvero molto semplice, ed anche altrettanto
personalizzabile.
Creare un contatore grafico in PHP appoggiandoci su un
file di testo.
Iniziamo col creare il nostro file .txt con il Blocco
Note, scriviamo 0 e salviamo chiamandolo "contatore".
Creiamo una cartella e
diamogli nome "imgCont", creiamo 10 immagini .jpg, e diamogli nome da 0 a 9 in
base all'immagine, e inseriamole dentro la cartella.
Adesso iniziamo col
scrivere le prime righe di codice che si connetteranno con il file, preleveranno
il valore, lo incrementeranno e lo modificheranno:
Creiamo la funzione e le
variabili che ci serviranno:
<?
function conta() { // creiamo la
funzione del contatore
$i=0;//Inizializziamo la variabile i per il ciclo del
recupero dati
$imageFolder="imgCont";// Creiamo la variabile con il percorso
delle immagini per il nostro contatore
Adesso apriamo il file e lo archiviamo
in un array:
$file=fopen("count.txt","r+");//Apriamo il file in lettura e
scrittura
$recupero=file("count.txt");//Apriamo il file archiviandolo in un
array
Controlliamo se l'utente è già entrato, in questo caso il contatore non
verrà incrementato:
if (!isset($_SESSION['PhpCounter'])) {//controlliamo se
la visita è già stata fatta
$recupero[0]++;//se è la prima volta che l'utente
entra, incrementiamo il contatore
$_SESSION['PhpCounter']="";//inizializziamo
la sessione di controllo se è la prima
volta
fwrite($file,$recupero[0]);//scriviamo il nuovo valore del contatore,
ovvero il contatore incrementato
}
A questo punto, chiudiamo il
file:
fclose($file);//chiudo il file
Ed ora, diamo vita grafica al
contatore:
$quanti=strlen($recupero[0]);//Riprendiamo l'array creato e ne
verifico la grandezza
while($i < $quanti) {//iniziamo il ciclo per la
divisione dei numeri
$numeri=substr($recupero[0],$i,1);//dividiamo i numeri
incrementando ogni volta la posizione di uno, fino alla lunghezza del
numero
echo "<img src='".$imageFolder."/".$numeri.".jpg'>";//scriviamo
i tag html per richiamare le immagini e in base al numero, richiamiamo la
corrispondente!
$i=$i+1;//incrementiamo i
}
}
conta(); //avviamo la
funzione
?>
Come realizzare un sito in PHP.
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.
Form per invio email in formato
HTML
Realizzeremo un form che invii email in formato HTML.
Il
tutorial si compone di due pagine: modulo.htm, contenente il form per
l'inserimento dei dati e send.php, contenente il codice PHP per l'elaborazione e
l'invio dei dati.
Ecco il codice di "modulo.htm":
<form method="post"
action="send.php" name="modulo">
Nome e cognome:
<input type="text"
name="nome" size="30">
Indirizzo e-mail:
<input type="text"
name="email" size="30">
Testo del messaggio:
<textarea rows="10"
cols="30" name="messaggio">
</textarea>
<input type="submit"
value="Invia">
<input type="reset"
value="Cancella">
</form>
Quindi il codice di
"send.php":
<?PHP
// Processo di recupero dei dati
$nome =
$_POST['nome'];
$email = $_POST['email'];
$messaggio =
nl2br($_POST['messaggio']);
// Processo di controllo [Opzionale]
if ($nome
== null)
{
print "Errore: è necessario compilare il campo 'Nome
e cognome'";
}
else
{
if ($email == null)
{
print "Errore:
è necessario compilare il campo 'Indirizzo
e-mail'";
}
else
{
if ($messaggio == null)
{
print "Errore:
è necessario compilare il campo 'Messaggio'";
}
else
{
//
Processo di configurazione dell'email
// [Destinatario, mittente,
ecc]
$mail_to = "tuamail@tuodominio.it";
$mail_from =
$email;
$mail_subject = "Contatto dal web da parte di $nome";
$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))
{
print "Email inviata con
successo!";
}
else
{
print
"Errore";
}
}
}
}
?>
Da notare di questo codice la
riga:
$mail_to = "tuamail@tuodominio.it";
in cui dovrete settare l'email
del destinatario.
Non di meno è la riga:
$mail_body = "<p><font
color=#000000>$messaggio</font></p>";
in cui potete inserire
altri tags html per personalizzare il risultato grafico.
NB: Vi consigliamo
di tralasciare gli apici nei tags HTML inseriti in questa variabile
($mail_body).
Questa è una struttura base del sistema di invio mail, poichè
possiamo personalizzarlo aggiungendo ad esempio gli smilies, oppure potremmo
creare un sistema di newsletter, con un ciclo while che ripeta l'invio della
mail per ogni indirizzo presente in un database.
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).
Generare password random
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?
Beh, 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.
Adesso sta a voi integrarlo
nel vostro sito come più vi piace.
Visualizzare un link a caso
In questo tutorial
useremo la funzione rand, ma questa volta la utilizzeremo per farle
scegliere un link, in una lista che abbiamo fatto prima, in maniera casuale e
reindirizzando l'utente verso quel link.
Per far ciò creiamo una nuova pagina
php con il nome 'linkrandom.php' e scriviamoci dentro questo semplice
codice:
<?php
$url[] = "http://www.google.it";
$url[] =
"http://www.xxxxxxxxxxx.org";
$url[] =
"http://www.xxxxxxxxxxx.org";
$totlink = count($url);
$linknum = rand(0,
$totlink-1);
header("Location: ".$url[$linknum]);
?>
e per
apprezzare il tutto, nel nostro sito mettiamo un link di questo tipo:
<a
href="linkrandom.php" onclick="alert('Tutorial By XXXXXXXXX');">Visita un
sito a caso</a>
Come avrete visto è un codice molto semplice ma che
funziona come deve.
La funzione rand già sappiamo cosa fa, mentre la funzione
count non fa altro che contare di quanti valori è composta l'array $url e
restituisce il numero. Ma siccome le chiavi di un'array iniziano da 0, abbiamo
la necessità di diminuire di 1 quel valore.
La funzione header non fa altro
che passare delle stringhe al browser che all'utente non vengono mostrate. Con
Location non facciamo altro che reindirizzare il browser verso il sito che gli
abbiamo passato come valore.
Cambiare il banner in base alla pagina
Con
questo trucco capiremo come molti siti, specie quelli articolati in più sezioni,
riescano a gestire il banner a seconda della pagina richiesta dall'utente. Si
tratta di un'applicazione molto utile che permette all'utente di visualizzare
banner diversi, mantenendo perfettamente identico il resto della
struttura.
Supponiamo di avere un sito articolato in molte pagine tutte
uguali e, tra queste, anche 'chat.php', 'guestbook.php' e 'forum.php'. Vogliamo
distinguere le pagine in questione dalle altre cambiandone il logo. Vi chiedete
come questo sia possibile? Semplicissimo.
Useremo il classico operatore di
scelta multipla (switch) e la variabile server PHP_SELF che ci permette di
ricavare il nome e la posizione sul server della pagina. Ci procureremo a priori
quattro immagini da inserire nella cartella "images" chiamandole chat.gif,
guestbook.gif, forum.gif ed ovviamente una generale chiamata
banner.gif.
Gestiremo questi casi facendo in modo che se l'utente apra la
pagina del forum (forum.php) visualizzeremo il logo del forum; lo stesso dicasi
per la chat ed il guestbook. Nel caso in cui l'utente non richieda una di queste
tre pagine bensì un'altra (curriculum.php, ad esempio), visualizzeremo
un'immagine di default chiamata banner.gif. Mettiamoci al lavoro: cominciamo con
il salvare questo codice in una pagina chiamata
"gestione_banner.php":
<?php
$currentPage =
$_SERVER["PHP_SELF"]; //recupero il nome della
pagina
switch($currentPage) {
//pagina della chat
case
'/chat.php':
echo "<img src=\"/images/chat.gif\" width=\"468\"
height=\"60\" alt=\"La mia chat\">";
break;
//pagina del
guestbook
case '/guestbook.php':
echo "<img
src=\"/images/guestbook.gif\" width=\"468\" height=\"60\" alt=\"Leggi il mio
guestbok\">";
break;
//pagina del forum
case '/forum.php':
echo
"<img src=\"/images/forum.gif\" width=\"468\" height=\"60\" alt=\"Il mio
Forum\">";
break;
//tutte le pagine tranne quelle su
indicate
default:
echo "<img src=\"/images/banner.gif\" width=\"468\"
height=\"60\" alt=\"Sassidesign.it\">";
break;
}
?>
Sarà di
vitale importanza richiamare all'interno di ogni singola pagina questo codice
nel punto in cui si voglia visualizzare il banner:
<?php
include("gestione_banner.php"); ?>
N.B.: Per questioni di ordine del
layout è opportuno lavorare con banner di uguali dimensioni. Il codice è
abbondantemente commentato e non necessita di ulteriori chiarimenti.
Fogli di calcolo al volo con Php
Può essere
utile in alcuni casi produrre al volo documenti ".xls" modificabili tramite il
noto programma "Excel" per la gestione dei fogli di calcolo.
L'esempio che
presentiamo in questo tutorial è estremamente semplice, ma con un po' di
esperienza e di ingegno può essere sviluppato e integrato all'interno di
applicativi complessi e basati sull'integrazione tra PHP e database come, ad
esempio, gestori di fatturazione e magazzino. Passiamo ora al
codice:
<?
header("Content-Type:
application/vnd.ms-excel");
$a=9;
$b=10;
$c=11;
$somma=
$a+$b+$c;
echo "
<table
border="1">
<tr>
<td><strong>Prodotto
a:</strong></td>
<td><strong>Prodotto
b:</strong></td>
<td><strong>Prodotto
c:</strong></td>
<td><strong>Somma:</strong></td>
</tr>
<tr>
<td>$a</td>
<td>$b</td>
<td>$c</td>
<td>$somma</td>
</tr>
</table>";
?>
Come
avrete potuto notare, all'origine di tutto abbiamo la funzione "header()" a cui
viene passato il "Content-Type", cioè la tipologia di documento che verrà
generata, nel nostro caso essa sarà "vnd.ms-excel" relativa appunto ai fogli di
calcolo. Per il resto sarà sufficente valorizzare le variabili che intendiamo
elaborare e stamparle a video "immerse" nell'HTML.
Indicare il percorso della pagina sul
server
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
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
Cosa sono e come settare i chmod
Il CHMOD è un
comando FTP che serve ad impostare i permessi di scrittura e lettura di un
file.
Esso rappresenta un problema non indifferente per un programmatore PHP,
poichè spesso gli capita di dover dare ad alcuni file qualche permesso in più
perchè funzioni lo script che sta progettando.
Il lato negativo di questo
comando è che è settabile solo su server Linux/Unix, mentre su Windows non è
possibile modificarlo (il valore di default su server win è di solito
655).
Il CHMOD è caratterizzato da una successione di 3 cifre:
es:
777
il primo setta i permessi per l' Owner (Proprietario)
il secondo per i
Group (Gruppo)
il terzo per il Public (Utenti)
Ognuno dei 3 valori è il
risulatato ottenuto dalla somma di tre numeri: 1: Execute , 2: Write , 4:
Read.
Lettura (read) = 4
Scrittura (write) = 2
Esecuzione (execute) =
1
Il numero corrispondente si ottiene sommando i valori dei permessi, per
cui:
5 = 4+1 (lettura ed esecuzione)
Ad esempio CHMOD 666 significa
permesso in Lettura + Scrittura per Owner, Group e Public (2+4 per la prima
cifra, 2+4 per la seconda e ancora 2+4 per la terza). Analogamente CHMOD 777
significa permesso in Lettura + Scrittura + Esecuzione (4+2+1=7).
Ad esempio
chmod 755
leggibile-scrivibile-eseguibile al
proprietario
leggibile-eseguibile al gruppo
leggibile-eseguibile agli
altri utenti
Queste considerazioni valgono per i file.
I chmod, quando
riferiti ad una directory, cambiano leggermente di significato.
Infatti:
Leggibile
Significa possibilità di ottenere dall'esterno della
directory l'elenco dei files
Scrivibile
Significa possibilità di creare
nuovi files all'interno della directory
Eseguibile
Significa permesso di
accesso all'interno della directory.
Questo è il motivo per cui molti
sviluppatori PHP preferiscono un server Unix.
Includere file esterni su una pagina web
Php
mette a disposizione i comandi include e require, molto utili quando vogliamo
includere script o pagine esterne nella nostra pagina web...
La sintassi è la
seguente:
<?php include("esterno.htm"); ?>
oppure:
<?php
require("esterno.htm"); ?>
Tutto il codice contenuto in "esterno.htm"
verrà elaborato dalla nostra pagina come se appartenesse alla pagina
stessa.
Potete utilizzarlo per simulare un "effetto frame" (includendo più
file in una stessa pagina), per questioni di comodità o comunque per
organizzarvi al meglio il codice.
Formattare il testo di una textarea
Vediamo
come permettere all'utente di formattare il testo di una textarea nella maniera
a lui più congeniale...
Innanzitutto distinguiamo le due pagine: la prima
conterrà il form in cui l'utente potrà scrivere, la seconda sarà quella che
interpreterà il codice.
Nella prima pagina dobbiamo fare in modo che
l'utente, cliccando su una "G" scriva del testo in grassetto e su una "I" in
corsivo...
Realizzate le due immagini gif, chiamatele g.gif e i.gif e
collocatele nella cartella images e inseritele nella vostra pagina con questo
codice...
<img src="images/g.gif"
OnClick="document.nomeform.nometextarea.value+='[B][/B]'">
<img
src="images/i.gif"
OnClick="document.nomeform.nometextarea.value+='[I][/I]'">
Nella seconda
pagina dovrete incollare queste righe:
<?
$nomevariabile =
str_replace("[B]","<strong>",$nomevariabile);
$nomevariabile =
str_replace("[/B]","</strong>",$nomevariabile);
$nomevariabile =
str_replace("[I]","<em>",$nomevariabile);
$nomevariabile =
str_replace("[/I]","</em>",$nomevariabile);
print
($nomevariabile);
?>
Tramite uno str_replace i caratteri [B], [/B],
[I], [/I] vengono convertiti rispettivamente nei tag <strong>,
</strong>, <em>, </em>... semplicissimo.
La sintassi da
seguire è la seguente...
$nomevariabile =
str_replace("testodatrovare","testoconcuisostituirlo",$nomevariabile);
Se
volete un esempio guardate pure il mio guestbook.
Questa funzione php
potrebbe essere utilizzata per eliminare parole di cattivo gusto, sostituendole
con asterischi... provateci voi!
Calcolare 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:
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).
Terminate voi lo script arrotondando la
variabile $dimensioneinkb a due cifre dopo la virgola.
Un saluto personalizzato in base
all'ora
Oedremo come personalizzare il saluto all'utente in base al
momento della giornata.
Per fare questo utilizzeremo un semplice script
basato su un if, elseif, else. Dividiamo la giornata in tre momenti:
* la
notte: dalle ore 0 alle ore 5;
* il giorno: dalle ore 6 alle ore 16;
* la
sera: dalle ore 17 alle 23.
Incolliamo queste righe dove vogliamo che appaia
il nostro saluto...
<?php
$ora = date ("H"); //recupero l'ora nel
formato 24 ore
if ($ora >= 0 && $ora <= 5 ) {
echo "
Buonanotte";
} else if ($ora > 5 && $ora <= 16) {
echo "
Buongiorno";
} else echo " Buonasera";
?>
Non credo che questo
script abbia bisogno di essere commentato... alla prossima!
Spedire e-mail da un form tramite php
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.
Andare a capo in una textarea: il comando
nl2br
Avete notato come spesso, in molti siti web, scrivendo in una
textarea di un form, non vengono rispettate le "andate a capo".
Questo
avviene a causa di un errore che sta alla base della progettazione del
form.
Supponiamo che la variabile che raccolga il testo inserito nella
textarea sia chiamata proprio textarea.
Il normale comando in php per
stampare un messaggio è questo:
<?php echo $textarea; ?>
Per
rispettare le andate a capo dovremmo invece utilizzare il comando nl2br in
questo modo:
<?php echo nl2br ($textarea); ?>
Problema
risolto.
Un motore di ricerca con Php e Google
Grazie a
pochi elementi del Php è possibile creare uno script che permetta all'utente di
effettuare ricerche su Google ; è possibile specificare che la ricerca sul noto
motore venga effettuata in tutto il Web o solo sulle pagine del nostro sito,
specificando un parametro particolare in querystring che Google interpreterà.
Per fare ciò utilizzeremo un semplice modulo Html che permetta di specificare il
testo da ricercare e se, come già detto, la ricerca dev'essere eseguita in tutto
il Web o solo sulle pagine del nostro sito.
Di seguito il codice Html da
inserire nelle pagine del nostro sito:
<form method="post"
action="google.php">
Cerca con Google
<input type="text"
name="testo">
<input type="radio" name="dove" value="s" checked> in
questo Sito
<input type="radio" name="dove" value="w"> nel
Web
<input type="submit" value="Cerca">
</form>
Ecco lo
script da inserire nel file 'google.php'
<?PHP
$testo =
$_POST['testo'];
$dove = $_POST['dove'];
if ($testo == "") {
print
"Inserisci un termine da ricercare";
}
else
{
if ($dove ==
"s")
{
header("location:
http://www.google.com/search?as_sitesearch=www.lukeonweb.net&as_q=" .
$testo);
}
else
{
header("location:
http://www.google.it/search?hl=it&ie=UTF-8&q=" . $testo .
"&meta=");
}
}
?>
Il funzionamento è semplice: recupero i
dati dal form e li memorizzo nelle variabili $testo e $dove ; controllo che
$testo non contenga una stringa vuota; controllo il valore di $dove per lanciare
il redirect verso l'indirizzo di Google ed eseguire la ricerca sul Web o sul
nostro sito.
Il primo redirect che effettuiamo, ovvero se $dove == "s", vede
nell'indirizzo un parametro in querystring a cui abbiamo accennato ad inizio
dell'articolo, ovvero as_sitesearch che contiene l'indirizzo del sito (con o
senza la specifica http://) in cui effettuare la ricerca, ad
esempio:
http://www.google.com/search?as_sitesearch= www.nomesito.xxx
&as_q=TESTO_DA_CERCARE
Un'applicazione intelligente per lo smistamento dei
messaggi provenienti da form-mail
Impareremo a creare un sistema
intelligente per lo smistamento dei messaggi ricevuti da un form-mail.
Supponiamo di voler permettere all'utente di poter contattare lo staff del
nostro sito per quattro motivi essenziali, per esempio: informazioni generali,
pubblicità, scambio link e segnalazione errori e di voler fare in modo che le
email vengano così smistate: informazioni generali a info@dominio.it, pubblicità
a pubblicita@dominio.it, scambio link a scambiolink@dominio.it e segnalazione
errori a errori@dominio.it.
Le funzioni principali che coinvolgeremo in
quest'applicazione sono essenzialmente due: mail() (che come ben sappiamo ci
permette di inviare email dal web) e switch(), che effettua una determinata
azione anzichè un'altra scegliendo in base al valore che l'utente associa alla
variabile in quel determinato istante. Quando un'istruzione switch viene
eseguita, viene calcolata l'espressione associata; se il valore dell'espressione
corrisponde a quello di una case associata, il flusso di controllo passa alla
case specificata, altrimenti si passa ad eseguire l'azione di default
(default:).
Per quel che riguarda la nostra applicazione ci serviranno
essenzialmente due pagine: vediamo la prima sulla quale non mi dilungherò molto,
dato che si tratta di un semplice form:
<form action="contattaci.php"
method="post" name="mail" id="mail">
<table width="80%" border="0"
align="center" cellpadding="0" cellspacing="0">
<tr>
<td
class="center">Inserisci l'indirizzo presso il quale ricontattarti *
</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
class="center">Oggetto del
messaggio:</td>
</tr>
<tr>
<td><div
align="center">
<select name="oggetto" id="oggetto">
<option
value="informazioni">Informazioni</option>
<option
value="pubblicita">Pubblicità</option>
<option
value="scambio_link">Scambio link</option>
<option
value="segnalazione_errore">Segnalazione
errori</option>
</select>
</div></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td
class="center">Corpo del messaggio:
</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>
Successivamente
passiamo alla seconda parte dell'applicazione che sarà quella che cambierà il
destinatario della mail in base all'oggetto specificato. E' necessario che
questa pagina si chiami contattaci.php
<?php
//dichiaro la variabile
'modulo'
$modulo = @$_POST['oggetto'];
//Effettuo lo switch sulla
variabile 'modulo'
switch($modulo)
{
//caso 'informazioni'
case
'informazioni':
$mail_mittente = $_POST['indirizzo'];
$mail_destinatario =
"info@dominio.it";
$mail_oggetto = $_POST['oggetto'];
$mail_corpo =
$_POST['corpo'];
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo,
"From: $mail_mittente"))
{
echo "Messaggio inviato con successo al
destinatario";
}
else
{
echo "Errore... Nessun messaggio
inviato.";
}
break;
//caso 'pubblicità'
case
'pubblicita':
$mail_mittente = $_POST['indirizzo'];
$mail_destinatario =
"pubblicita@dominio.it";
$mail_oggetto = $_POST['oggetto'];
$mail_corpo =
$_POST['corpo'];
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo,
"From: $mail_mittente"))
{
echo "Messaggio inviato con successo al
destinatario";
}
else
{
echo "Errore... Nessun messaggio
inviato.";
}
break;
//caso 'scambio link'
case
'scambio_link':
$mail_mittente = $_POST['indirizzo'];
$mail_destinatario =
"scambiolink@dominio.it";
$mail_oggetto = $_POST['oggetto'];
$mail_corpo =
$_POST['corpo'];
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo,
"From: $mail_mittente"))
{
echo "Messaggio inviato con successo al
destinatario";
}
else
{
echo "Errore... Nessun messaggio
inviato.";
}
break;
//caso 'segnalazione errori'
case
'segnalazione_errore':
$mail_mittente =
$_POST['indirizzo'];
$mail_destinatario =
"errori@dominio.it";
$mail_oggetto = $_POST['oggetto'];
$mail_corpo =
$_POST['corpo'];
if (mail($mail_destinatario, $mail_oggetto, $mail_corpo,
"From: $mail_mittente"))
{
echo "Messaggio inviato con successo al
destinatario";
}
else
{
echo "Errore... Nessun messaggio
inviato.";
}
break;
//caso
'default'
default:
include("index.php");
break;
}
?>
Il
codice è commentato a sufficienza e per semplicità ne vedremo solo uno in
dettaglio, commentandolo qui di seguito:
//caso 'informazioni'
case
'informazioni':
$mail_mittente = $_POST['indirizzo']; //dichiaro la mail del
mittente
$mail_destinatario = "info@dominio.it"; //dichiaro la mail del
destinatario
$mail_oggetto = $_POST['oggetto']; //dichiaro l'oggetto della
mail
$mail_corpo = $_POST['corpo']; //dichiaro il corpo della mail
if
(mail($mail_destinatario, $mail_oggetto, $mail_corpo, "From: $mail_mittente"))
//creo la funzione mail()
{
echo "Messaggio inviato con successo al
destinatario"; //avviso che la mail e' andata a buon
fine
}
else
{
echo "Errore... Nessun messaggio inviato."; //avviso
che la mail NON e' andata a buon fine
}
Un'area riservata basata su un if-else
Questa
lezione vuole essere un pretesto per imparare a capire il funzionamento del
costrutto if-else e non un modo per imparare a creare un'area riservata vera e
propria in quanto sappiamo benissimo che un sistema di protezione così
implementato è facilmente penetrabile.
Innanzitutto dobbiamo creare la pagina
del form, alla quale assegniamo un titolo a piacere. Questo il suo codice
xhtml:
<form action="login.php" method="get" name="login"
id="login">
<p>
<input name="user" type="text" id="user"
value="user" />
<br />
<input name="pass" type="text"
id="pass" value="pass" />
<br />
<input type="submit"
name="Submit" value="Invia" />
</p>
</form>
Il form
appena creato punta alla pagina "login.php" il cui scopo è quello di ricevere i
dati in ingressso, confrontarli con due variabili assegnate ($username e
$password) ed eseguire una delle due operazioni dichiarate in base al risultato
del confronto. Nel nostro caso i valori corretti da inserire sono username =
michele e password = sassi. E' inutile dire che questi valori possono, anzi,
devono essere modificati!
<?php
$username = "michele"; //dichiaro
username
$password = "sassi"; //dichiaro password
$user = $_GET['user'];
//username inserito viene preso in input dal form
$pass = $_GET['pass'];
//password inserita viene presa in input dal form
//controllo che i due
valori inseriti corrispondano a quelli stabiliti...
//in caso positivo
rimando alla pagina riservata
if ($username == $user && $password ==
$pass)
{
header("Location: areariservata.php");
}
//in caso negativo
stampo un messaggio di errore
else
{
print "Hai sbagliato l'inserimento
dei dati!";
}
?>
Da notare l'utilizzo dell'operatore di confronto
AND (&&) nella stringa in cui abbiamo dichiarato la condizione: if
($username == $user && $password == $pass); affinchè l'espressione sia
valida per l'operatore AND è necessario che entrambe le condizioni siano
soddisfatte. Apro una piccola parentesi (per spiegare la differenza)
sull'utilizzo dell'operatore OR, indicato dal doppio simbolo di pipe ( || ); per
quest'operatore è sufficiente che anche una sola delle due condizioni sia
verificata per attribuire valore positivo all'espressione.
Un suggerimento...
Nel nostro caso, per semplicità, abbiamo preferito stampare un messaggio
d'errore per dichiarare all'utente che non ha inserito i dati corretti. Un uso
più intelligente sarebbe quello di rimandare il visitatore sulla pagina con il
form per la registrazione al sito! Divertitevi pure!
Creare immagini al volo con GD Library di
Php
Forse pochi sono al corrente dell'esistenza di uno strumento
grafico chiamato GD Library che ci permette di creare immagini "al volo"
direttamente con PHP. Per riuscire nell'operazione è necessario che questa
libreria sia già compresa nella versione installata di PHP. In caso contrario
sarà possibile comunque procurarsela e installarla. In questa lezione vedremo le
seguenti funzioni relative a GD Library:
* imagecreate();
*
imagecolorallocate();
* imagefilledrectangle();
* imagerectangle();
*
header();
* imagepng();
* imagedestroy();
Vi insegnerò quindi come
creare un'immagine grazie a queste funzioni PHP e a GD Library... Ecco il codice
per crearla:
<?php
$height = 15;
$width = 100; // E' consigliato se
dobbiamo creare un'immagine che rappresenti una percentuale
$immagine =
imagecreate($width, $height);
$bg = imagecolorallocate($immagine, 255, 255,
255); // bianco
$barra = imagecolorallocate($immagine, 0, 255,
0);
imagefilledrectangle($immagine, 0, 0, $width, $height,
$barra);
imagerectangle($immagine, 0, 0, $width, $height,
$bg);
header("Content-type:
image/png");
imagepng($immagine);
imagedestroy($immagine);
?>
Commentiamo
il codice:
* Attraverso la funzione imagecreate() settiamo un blocco di
memoria per l'immagine;
* Attraverso imagecolorallocate() definiamo i colori
di questa immagine: avremo bisogno di 2 colori, uno per lo sfondo ($bg) e uno
per la barra ($barra);
* Con la funzione imagefilledrectangle() dipingiamo
nell'immagine un rettangolo riempito che mostrerà la percentuale;
* Creiamo
un altro rettangolo con imagerectangle() che, chiaramente, sarà per lo
sfondo.
A questo punto del codice l'immagine è ormai ben definita in memoria;
non ci rimane che copiarla nel browser o in un file.
* Con la funzione
header() definiamo il formato dell'immagine, in questo caso .png (GD Library
supporta anche i formati gif, jpeg, tiff, wbmp) e la inviamo al browser.
Ricordatevi che qualora manderemo questa immagine sul browser la funzione
header() dovrà necessariamente occupare la prima linea di questo codice;
*
Infine con la funzione imagepng() mandiamo sul browser una copia di questa
immagine;
* Con imagedestroy(), distruggiamo l'immagine, dato che è stata
ormai inviata.
Immagini di dimensione variabile con Php e GD
Library
Per comprendere questa lezione è necessario aver letto quella
precedente: "Creare immagini al volo con GD Library di Php".
In questa
lezione vi insegnerò come creare, grazie alle apposite funzioni PHP e a GD
Library , un'immagine la cui lunghezza varia in modo direttamente proporzionale
ad una percentuale (che dovrete però calcolarvi in un'altra pagina... se vi
presento il piatto pronto non imparerete mai a cucinare!).
Chiamate la pagina
"barra.php" ed inseriteci il seguente codice:
<?php
$height =
15;
$width = 100; // E' consigliato se dobbiamo creare un'immagine che
rappresenti una percentuale
$imm = imagecreate($width, $height);
$bg =
imagecolorallocate($imm, 255, 255, 255); // Bianco
$barra =
imagecolorallocate($imm, 255, 0, 0); // Rosso
imagefilledrectangle($imm, 0,
0, $_GET['barra_percent'], $height, $barra);
imagerectangle($imm, 0, 0,
$width, $height, $bg);
header("Content-type:
image/png");
imagepng($imm);
imagedestroy($imm);
?>
Vi spiegherò
ora come utilizzare questa immagine per i fini suddetti. I più attenti avranno
notato che alla riga 7 del codice sovrastante ho inserito al posto di $width la
variabile "$_GET[' barra_percent ']".
Questa prenderà il valore di
"barra_percent" con metodo GET da un'altra pagina.
Ecco come fare per far
variare il width della nostra immagine in base alla percentuale:
* Rechiamoci
in vista codice nella pagina dove abbiamo calcolato la percentuale (supponiamo
si chiami "pagina.php") ;
* Inseriamo nel codice PHP di "pagina.php", dopo il
calcolo della percentuale il seguente codice:
echo "<img
src=\"barra.php?barra_percent=$percent\" ></td>\n";
* Ricordate che
$percent è chiaramente la variabile con la quale io ho calcolato la percentuale
in “pagina.php”.
Cosa abbiamo fatto in questo modo? Abbiamo detto a PHP di
stampare un immagine (caricandola da "barra.php") dove il valore barra_percent è
uguale a quello della percentuale. In questo modo il width della nostra immagine
sarà direttamente proporzionale alla percentuale.
Vi faccio un esempio
pratico: il width della nostra immagine è 100 (vedi $width); supponiamo che
$percent sia 40; di conseguenza l'immagine sarà caricata nel seguente
modo:
echo "<img src=\"barra.php?width=40\" ></td>\n";
e
otterremo l'effetto tanto sperato.
Controllare la corrispondenza tra due campi di un
form
Supponiamo di voler registrare i visitatori al nostro sito, e
che il processo di registrazione preveda l'inserimento di username e password.
Supponiamo quindi di aver messo due campi per la password, uno per la scelta e
uno per la conferma:
Ecco quindi il codice del nostro form:
<form
method="post" action="modulo.php" name="modulo">
Username scelto:<input
type="text" name="username" size="30"/><br />
Digita qui la
password:<input type="password" name="password" size="30"/><br
/>
Conferma la password:<input type="password"
name="password_di_convalida" size="30" /><br />
<input
type="submit" value="Invia" />
</form>
Ecco quindi il codice di
"modulo.php":
<?php
// Recupero i dati dal form
$username =
$_POST['username'];
$password = $_POST['password'];
$password2 =
$_POST['password_di_convalida'];
// Controllo che l'input PASSWORD non sia
vuoto
if ($password==null)
{
echo ("Errore: digitare una password
valida!");
}
else
{
// Controllo la corrispondenza tra le
password
if ($password!=$password2)
{
echo ("Errore: la password
inserita non coincide con la prima!");
}
else
{
echo ("Successo: le
password coincidono!");
// Qui tutte le operazioni in caso di coincidenza da
parte delle password
}
}
?>
Il codice è abbondantemente
commentato.. a voi il compito di modificare e personalizzare i messaggi.
Realizzare una calcolatrice con Php
Creare una
calcolatrice con Php, così come con qualsiasi altro linguaggio, è molto
semplice. Le pagine da creare sono essenzialmente due; la prima che servirà a
raccogliere da un form i dati in input e la seconda che elaborerà i dati e
stamperà a video il risultato!
Vediamo la prima pagina, alla quale potete
assegnare un nome qualsiasi:
<form name="calcolatrice" id="calcolatrice"
method="post" action="calcola.php">
<table
style="background-color:#FFFF99; font-family:Verdana, Arial, Helvetica,
sans-serif; border:1px dotted #0000FF; "width="300" border="0" cellspacing="3"
cellpadding="3">
<tr>
<td colspan="2"><div
align="center"><strong>CALCOLATRICE</strong></div></td>
</tr>
<tr>
<td
width="210"><div align="right">Inserisci il primo
numero</div></td>
<td width="69"><input name="1"
type="text" id="1" size="10"
/></td>
</tr>
<tr>
<td><div
align="right">+</div></td>
<td><input
name="radiobutton" type="radio" value="addizione" checked="checked"
/></td>
</tr>
<tr>
<td><div
align="right">-</div></td>
<td><input
name="radiobutton" type="radio" value="sottrazione"
/></td>
</tr>
<tr>
<td><div
align="right">*</div></td>
<td><input
name="radiobutton" type="radio" value="moltiplicazione"
/></td>
</tr>
<tr>
<td><div
align="right">/</div></td>
<td><input
name="radiobutton" type="radio" value="divisione"
/></td>
</tr>
<tr>
<td><div
align="right">Inserisci il secondo numero
</div></td>
<td><input name="2" type="text" id="22"
size="10"
/></td>
</tr>
<tr>
<td> </td>
<td> </td>
</tr>
<tr>
<td> </td>
<td><input
type="submit" name="Submit" value="Calcola!"
/></td>
</tr>
</table>
</form>
Ora
passiamo alla seconda che, come abbiamo già detto, sarà quella che elaborerà i
dati utilizzando il solito switch! Per il funzionamento di questo comando vi
rimando ad una lettura precedente; ora vediamo il codice della pagina che dovrà
necessariamente chiamarsi "calcola.php":
<?php
$primo_valore =
$_POST['1']; //recupero il primo valore dal form
$secondo_valore =
$_POST['2']; //recupero il secondo valore dal form
$operazione =
$_POST['radiobutton']; //recupero l'operazione da eseguire dal
form
switch($operazione)
{
case 'addizione':
{
$somma =
$primo_valore + $secondo_valore;
print($somma);
}
break;
case
'sottrazione':
{
$sottrazione = $primo_valore -
$secondo_valore;
print($sottrazione);
}
break;
case
'moltiplicazione':
{
$prodotto = $primo_valore *
$secondo_valore;
print($prodotto);
}
break;
case
'divisione':
{
$quoziente = $primo_valore /
$secondo_valore;
print($quoziente);
}
break;
default: //in caso di
errore stampo un messaggio
print("Si è verificato un
errore!");
break;
}
?>
Collegare immagini a un database mysql
Qual'è la soluzione migliore per collegare o caricare delle immagini
.jpg o simili in un database mysql? come le recupero con php?
potresti
salvare le immagini in una cartella del server, e nel data base, tra i vari
campi di qui è composto metterci una colonna del tipo "indirizzo_foto" nel quale
salvi l'indirizzo della foto stessa. Praticamente lo usi per richiamare la
foto.
Non credo che salvare le foto direttamente nel db sia la via
migliore.
Concordo con luca, anche perchè salvare immagini su database
ha un peso devastate, calcoal che un record testuale su db pesa una manciata di
Byte mantre un'immagine, magari grande, può arrivare anche a un paio di
MB.
come si fa tutto questo con php?
spedisci il file tramite un form
file;
nella pagina di destinazione usi move_uploaded_file per copiarlo
definitivamente sul server;
usi fli attributri di $_FILE[....] per copiarti
il nome del file e lo aggiungi alla path(esempio la cartella
/tuosito/foto/);
salvi su db la path che ti risulta sopra
(/tuosito/foto/$nome_file)
e poi lo visualizzi sulla pagina che ti interessa
come link ad immagine
tra l'altro c'e' anche il metodo per risolvere il
problema dei fi
le doppi, ossia se c'e' un file con lo stesso nome nella
cartella viene riscritto ma mettendoci davanti la data in timestamp si sta
sicuri
viene pure spedita una mail a tutt iquelli che devono sapere che è
stato fatto l'upload (a me serviva e non ha voluto toglierlo).
Qui all'inizio
c'è una conferma per la sessione in corso, ma senza la pagina prima non ha
senso
<?PHP
require_once('../connection/connection.php');
require_once('membri.php');
session_start();
if($_SESSION['admin']
!= '***' AND $_SESSION['admin'] != '****' ){
die ("non hai accesso al sito
prima devi effettuare il <a href=\"login.php\">login</a>
");
}
$currentPage=$_SERVER['PHP_SELF'];
$cancella=
"cancella.php";
mysql_select_db($database, $database_a);
$msg_per_page =
10;
$count_mess = @mysql_query("SELECT COUNT(id) FROM table");
$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'];
if
($curr_page < 1){ $curr_page = 1;}
$primo = ($curr_page - 1) *
$msg_per_page;
$query_disk = "SELECT * FROM table ORDER BY id DESC LIMIT
$primo,$msg_per_page";
$result_disk =
mysql_query($query_disk);
$data=(date("dmyhis"));
}
if($_POST['submit']){
$titolo=$_POST['titolo'];
$nome_senza=
ereg_replace(" ","_",$_FILES["file"]["name"]);
$titolo_file=
$data."_".$nome_senza;
$file_path="../dumpingground/upload/".$titolo_file;
$firma=$_POST['firma'];
if($_POST['mail']){
$testo=$_POST['testo'];
}
//
Parte relativa all'upload
$uploaddir =
'/membri/sito/upload/';
$userfile_tmp =
$_FILES['file']['tmp_name'];
$userfile_name = $titolo_file;
if
(move_uploaded_file($userfile_tmp, $uploaddir . $userfile_name)){
echo
"<p>File ".$userfile_name." inserito con successo</p>";
$data=
date("D d-m-Y");
$query= "INSERT INTO table (id, data, titolo, firma,
download) VALUES(NULL, '$data', '$titolo', '$firma',
'$file_path')";
mysql_query($query);
echo "<p>inserimento avvenuto
corretamente di: ".$titolo."</p>";
}else{
echo "Upload del file
".$userfile_name." NON effettuato. Errore di trasmissione dati:
RITENTA</p>";
}
}
if($_POST['mail']){
$testo=$_POST['testo'];
$data_post=
date("D d-m-Y");
mail("$membri", //cambiare con l'indirizzo di
destinazione
"nuovo materiale",// oggetto
"da: $firma <a
href=\"www.sito.org/login.php\">www.sito.org/login.php</a>; $data_post;
$firma; $testo");
echo "<p>messaggio spedito
corretamente</p>";
}else{
echo "<p>spedisci da solo il
messaggio agli altri</p>";
}
$query_disk = "SELECT * FROM table
ORDER BY id DESC LIMIT $primo,$msg_per_page";
$result_disk =
mysql_query($query_disk);
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<head>
<title>Documento
senza titolo</title>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<link href="stili_pagine.css"
rel="stylesheet" type="text/css">
<style
type="text/css">
<!--
.Stile5 {color:
#00CC00}
-->
</style>
</head>
<body>
<table
width="607" height="502" border="0">
<tr>
<th width="922"
class="Stile4" scope="row"><div align="center"
class="Stile5">
<div align="center"><img src="dritto.gif"
width="462" height="61"></div>
</div></th>
<td
width="27"> </td>
</tr>
<tr>
<th
scope="row"><p class="Stile4">FILE IN
ARCHIVIO</p><p>
<?PHP
if($_SESSION['admin'] ==
'cescofry'){
while ($hot_disk = mysql_fetch_array($result_disk)) {
echo
"<table width=\"100%\" border=\"1\"><tr><td
width=\"5%\">";
$id= $hot_disk['id'];
echo $id;
echo
"</td><td width=\"45%\">";
echo $hot_disk['titolo'];
echo
"</td><td width=\"20%\">";
echo $hot_disk['firma'];
echo
"</td><td width=\"20%\">";
echo $hot_disk['data'];
echo
"</td><td
width=\"10%\">";
$download=$hot_disk['download'];
echo "<a
href=\"".$download."\">download</a>";
echo "</td><td
width=\"10%\">";
echo "<a
href=\"".$cancella."?id=".$id."\">cancella</a>";
echo
"</td></tr></table>";
}
}else{
while ($hot_disk =
mysql_fetch_array($result_disk)) {
echo "<table width=\"100%\"
border=\"1\"><tr><td width=\"5%\">";
echo
$hot_disk['id'];
echo "</td><td width=\"45%\">";
echo
$hot_disk['titolo'];
echo "</td><td width=\"20%\">";
echo
$hot_disk['firma'];
echo "</td><td width=\"20%\">";
echo
$hot_disk['data'];
echo "</td><td
width=\"10%\">";
$download=$hot_disk['download'];
echo "<a
href=\"".$download."\">download</a>";
echo
"</td></tr></table>";
}
}
?>
</p></th>
<td>
</td>
</tr>
<tr>
<th height="334"
scope="row"><p align="center" class="Stile4">INSERISCI FILE NELL
ARCHIVIO </p>
<form method="post" enctype="multipart/form-data"
name="download" action="<?PHP echo $courrentPage; ?>">
<p
align="left"><span class="Stile1">COMMENTO:</span> <input
name="titolo" type="text" id="commento2" value=""
size="50">
</p>
<p align="left"> <span
class="Stile1">SELEZIONA FILE:</span>
<input type="hidden"
name="MAX_FILE_SIZE" value="2000000">
<input name="file" type="file"
size="35">
</p>
<p align="left"> <span
class="Stile1">FIRMA:</span>
<input name="firma" type="text"
id="firma2">
notifica via mail agli altri
<input name="mail"
type="checkbox" id="mail2" value="checkbox">
</p>
<p
align="center" class="Stile1">TESTO DELLA MAIL CHE VERRA' SPEDITA :
</p>
<p align="left">
<textarea name="testo" cols="70"
rows="5" id="textarea2"></textarea>
<input name="submit"
type="submit" id="submit" value="Invia">
</p>
<p
align="right"> </p>
</form> </th>
<td>
</td>
</tr>
<tr>
<th height="35"
scope="row">powered by <a href="mailto:cescofry@hotmail.com">free_zone
</a></th>
<td>
</td>
</tr>
</table>
</body>
Creare cartella e uploadare files
Sto
realizzando un semplice codice php che deve eseguire delle operazione su file e
cartelle ( tipo copia, rinomina a richiesta dell'utente)
Es: interrogando lo
script a questa maniera:
page.php?make=ciao
Lo script dovrebbe, creare la
dir "ciao", copiare un fil e "file.swf" della dir principale nella dir creata, e
successivamente rinominare questo file copiato con nome "ciao.swf". Seguendo le
refenrece offerte dal sito php.net/it ho arrangiato qualche script ottimale, ma
purtroppo il risultato è che mi crea solamente la directory, gli altri comandi
(copia del file, e rinomina) non me li esegue. Come mai? Ci tengo a precisare
che lo script lo testato su altervista.org e in Locale.
Devo impostare quale
permesso particolare oppure ho elaborato uno script fetticcio?
Spero potete
darci un occhiatina, e consigliarmi qualcosa di
gratificante.
<?
if($genera == "ok")
{
$target =
$make;
if (strlen($target)<2)
{
echo "Scrivi minimo 2
caratteri!<br><br><a href=./genera.php>Torna
indietro</a>"; echo "</td></tr>";exit();
}
if
(is_dir($target)) echo "Firma già presente!<br><br><a
href=./genera.php>Torna indietro</a>"; echo
"</td></tr>";exit();
if (ereg('\.\.', $target) ||
ereg("[^a-zA-Z0-9\._\-\/]", $target)) echo "Caratteri invalidi!";
exit();
//if (!is_dir($target))
if (file_exists($target) &&
!is_dir($target)) return 0;
mkdir($target);
if(is_dir($target)) echo
"$target Creata!";
copy("firma_esempio.swf",
$target);
rename("$target/firma_esempio.swf",
"$target/$target.swf");
exit();
}
?>
Reperire l'indirizzo IP di un visitatore
La
funzione getenv() del Php permette di reperire le variabili d'ambiente del
server; in questo modo è semplice reperire l'indirizzo IP di un visitatore ed
utilizzarlo per registrarlo in un cookie, in un database, o per qualsiasi altro
controllo.
Il codice seguente si limita a stamparlo a video:
Il tuo
indirizzo IP è <?echo getenv("REMOTE_ADDR")?>
Convertire una
stringa in maiuscolo e in minuscolo
In Php è semplice effettuare la
conversione di una stringa in minuscolo o in maiuscolo, operazione utile in
molti occasioni, dato che spesso si tratta di applicazioni case-sensitive sulle
stringhe.
Utilizzeremo le funzioni strtolower() e strtoupper().
Il
seguente codice trasforma il testo in minuscolo:
<?PHP
echo
strtolower('LukeOnWeb.Net');
?>
Il seguente codice, invece, trasforma
il testo in maiuscolo:
<?PHP
echo
strtoupper('LukeOnWeb.Net');
?>
Generare numeri casuali
In Php è possibile
generare numeri casuali mediante il comando rand().
La sintassi è
rand(inizio,fine);
dove inizio e fine sono rispettivamente i limiti
minimi e massimi scelti, e tra questi viene estratto un numero a caso.
Un
esempio:
<?PHP
$n = rand(0,100);
echo $n;
?>
Per
verificare il funzionamento basta aggiornare la pagina e verificare che il
numero sia diverso e senza una particolare logica rispetto al
precedente.
Creare un menu dinamico in Php
Con questo
semplicissimo script è possibile creare un menu dinamico. Allo scopo sono
utilizzati gli array, e ci servoe una sola pagina (navigation.php).
Vediamo
il codice:
<?PHP
function navigation()
{
global $HTTP_HOST;
$nav[] = array(
"txt" => "Homepage",
"pag" =>
"index.php"
);
$nav[] = array(
"txt" => "Links",
"pag" =>
"links.php"
);
$nav[] = array(
"txt" => "Contatti",
"pag" =>
"contatti.php"
);
for ($id = 0; $id <= count($nav) - 1;
$id++)
{
echo "<a href=\"http://" . $HTTP_HOST . "/" . $nav[$id]["pag"]
. "\">" . $nav[$id]["txt"] . "</a><br>\n";
}
}
?>Per
aggiungere un'altra sezione, basta aggiungere questa stringa di codice:
$nav[] = array(
"txt" => "Nome_Della_Sezione",
"pag" =>
"Pagina_Della_Sezione.Estensione"
);
Ed ora vediamo come visualizzare il
menu su tutte le pahine .php che volete:
<?PHP
require("navigation.php");
navigation();
?>
Creare una sezione di annunci (non testato)
La
tabella Annunci che memorizza gli annunci contiene i campi:
ID [chiave
primaria]
Nome [nome dell'autore dell'annuncio]
Email
[email]
Testo [testo dell'annuncio]
Per fare funzionare il tutto
creiamo dei file nel seguente modo:
show.php3 [mostra gli annunci
presenti]
insert.php3 [inserisce un annuncio]
search.php3 [cerca una
o più parole nel database]
Supponiamo di ricevere dei dati da una
form nelle variabili $nome,$email,$testo. Per inserire un nuovo annuncio basta
fare le seguenti operazioni:
<?
# dati da modificare a seconda del
database
$host="localhost";
$user="";
$pass="";
$db=mysql_connect($host,$user,$pass)
or die ("Errore durante la connessione al database");
$sql="INSERT INTO
Annunci (Nome,Email,Testo)
VALUES('".$nome."','".$email."','".$testo."')";
mysql_db_query("db_annunci",$sql,$db);
mysql_close();
?>
In
questo caso il database inserisce automaticamente una chiave unica che
contraddistingue l'annuncio nel campo ID della tabella Annunci.
Ovviamente si
possono anche fare delle operazioni di controllo sulla validità dell'indirizzo
email o per verificare che alcuni campi non siano
nulli.
Mostrare gli annunci
Per mostrare gli annunci
presenti nel database basta inserire il seguente codice:
<?
# dati
da modificare a seconda del
database
$host="localhost";
$user="";
$pass="";
$db=mysql_connect($host,$user,$pass)
or die ("Errore durante la connessione al database");
$sql="SELECT * FROM
Annunci";
$result=mysql_db_query("db_annunci",$sql,$db);
while
($row=mysql_fetch_array($result)) {
print("<B>Nome</B>: <A
HREF=\"".$row["Email"]."\">".$row["Nome"]."</A><BR>");
print("<B>Testo
dell'annuncio</B>:<BR>");
print(htmlentities($row["Testo"])."<BR>");
print("<HR
SIZE=\"1\">");
}
mysql_close();
?>
La funzione
htmlentities() permette di "tradurre" le lettere accentate e gli altri caratteri
particolari nella loro codifica html, in modo da poter venire visualizzate
correttamente dai vari browser.
Ricerca di un
annuncio
Per la ricerca di un annuncio particolare, pensiamo di ricevere
una stringa $str da una form, in modo che $str contenga una serie di parole da
ricercare separate da spazi.
Il seguente codice permette di effettuare la
ricerca e visualizzare i risultati:
<?
# dati da modificare a
seconda del
database
$host="localhost";
$user="";
$pass="";
$db=mysql_connect($host,$user,$pass)
or die ("Errore durante la connessione al database");
$sql="SELECT * FROM
Annunci ";
$where="";
$words=explode(" ",$str);
$j=0;
while
(isset($words[$j])) {
$where=$where."Testo LIKE '%".$words[$j]."%'";
if
(isset($words[$j+1])):
$where=$where." OR
";
endif;
$j++;
}
$result=mysql_db_query("db_annunci",$sql.$where,$db);
while
($row=mysql_fetch_array($result)) {
print("<B>Nome</B>: <A
HREF=\"".$row["Email"]."\">".$row["Nome"]."</A><BR>");
print("<B>Testo
dell'annuncio</B>:<BR>");
print(htmlentities($row["Testo"])."<BR>");
print("<HR
SIZE=\"1\">");
}
mysql_close();
?>
Campi del Database di MySQL
|
campo testo | ||
| tipo | lunghezza massima | descrizione |
| varchar | 255 caratteri | campo di testo a lungh. variabile - 255 byte X+1 byte ( X è lo spazio occupato dal testo all'interno del campo) |
| char | 255 caratteri | campo di testo a lungh fissa - 255 byte X byte ( X è lo spazio occupato dal testo all'interno del campo) |
| tinytext tynyblob |
255 caratteri | campo di testo a lungh. variabile - 255 byte X+1 byte ( X è lo spazio occupato dal testo all'interno del campo) |
| text blob |
65.535 caratteri | campo di testo a lungh. variabile - 65535 byte X+2 byte ( X è lo spazio occupato dal testo all'interno del campo) |
| mediumtext mediumblob |
16.777.215 caratteri (1,6 Mb) | campo di testo a lungh. variabile - 1,6 MB X+3 byte ( X è lo spazio occupato dal testo all'interno del campo) |
| longtext longblob |
4.294.967.295 caratteri (4 Gb) | campo di testo a lungh. variabile - 4,2 GB X+4 byte ( X è lo spazio occupato dal testo all'interno del campo) |
| enum | 65.535 caratteri | Valori potenziali di un campo di testo |
|
campo numerico | ||
| int | 4.294.967.295 | Campo numerico con o senza segno (4 byte da -2147483648 a +2147483647 da 0 a +4294967295) |
| tinyint | 255 | Campo numerico con o senza segno (1 byte da -128 a +127 da 0 a +255) |
| smallint | 65.535 | Campo numerico con o senza segno (2 byte da -32768 a +32767 da 0 a +65535) |
| mediumint | 16.77.215 | Campo numerico con o senza segno (3 byte da -8388608 a +8388607 da 0 a +16777215) |
| bigint | 18.446.744.073.709 | Campo numerico con o senza segno (8 byte da -9223372036854775808 a +9223372036854775807 da 0 a +18446744073709550615) |
| fload | - | Campo numerico in virgola mobile con segno (4 byte A seconda dei valori ) |
| double | - | Campo numerico in virgola mobile con segno (8 byte A seconda dei valori) |
| decimal | - | Campo numerico in virgola mobile con segno (Il peso di I + 2 Byte A seconda dei valori= |
|
campo data e ora | ||
| date | dal 01-01-1001 al 31-12-9999 | Memorizza i dati in formato YYYY-MM-DD (anno-mese-giorno) |
| time | da -838:59:59 a 838:59:59 | Memorizza i dati in un formato ora (hh:mm:ss 00:00:00) |
| datetime | dalle 00:00:00 del 01-01-1001 alle ore 23:59:59 del 31-12-9999 | Memorizza i dati in un formato YYYY-MM-DD HH:MM:SS (anno-mese-giorno, ore:minuti:secondi) |
| timestamp | 2-14 | Memorizza i valori numerici per presentare
diversi tipi di indicatori dati data e ora Unix TIMESTAMP(2) AA 00 TIMESTAMP(4) AAMM 0000 TIMESTAMP(6) AAMMGG 000000 TIMESTAMP(8) AAAAMMGG 00000000 TIMESTAMP(10) AAMMGGhhmm 0000000000 TIMESTAMP(12) AAMMGGhhmmss 000000000000 TIMESTAMP(14) AAAAMMGGhhmmss 00000000000000 |
| year | dal 1901 al 2155 | memorizza quattro cifre (o due) per presentare l'anno |
Leggere il codice sorgente HTML di una pagina web (in
remoto)
<?php
//lettura di un file remoto
if
(isset($_POST['webpage']))
$webpage = $_POST['webpage'];
else
$webpage
= "";
echo "Inserire l'indirizzo della pagina Web (senza
http://)";
echo "<form action='" . $_SERVER['PHP_SELF'] . "'
method='post'>";
echo "<input type='text' size='50' name='webpage'
value='$webpage'>";
echo "<input type='submit'
value='Visualizza'>";
echo "</form>";
if ($webpage) {
$fp1
= fopen("http://" . $_POST['webpage'],"r");
echo "Il contenuto della pagina
Web è:<p>";
echo "<form>";
echo "<textarea cols=60
rows=30>";
$c=1;
$s=fgets($fp1, 4096);
while(!feof($fp1)) {
echo
"$s";
$s=fgets($fp1,4096);
}
echo
"/textarea></form>";
fclose($fp1);
}
?>
Creare un log con PHP
Il trucco di oggi
riguarda il PHP e vi insegnerà a creare un semplice Log delle visite. Infatti un
semplice "logger" dei visitatori può aiutarvi a tenere traccia di chi ha appena
visitato il vostro sito e la provenienza.
Il logger che andremo a creare sarà
memorizzato in un normale file di testo: questo significa che non abbiamo
bisogno di alcun database come mySQL. Il nostro script memorizzerà queste
quattro informazioni di base:
1. Data e ora della visita.
2. L'indirizzo
IP dell'utente.
3. L'indirizzo di provenienza (referer) dell'utente, se
disponibile.
4. Che browser stava utilizzando.
Tutte e quattro queste
informazioni sono ricavabili da funzioni native del PHP. Tutto ciò che dobbiamo
fare è definire questi dati e poi mandarli nell'apposito file di log HTML. Per
primo, avrete bisogno di creare un file log.html con permessi 777 (chmod 777
log.html). Useremo la funzione date() per impostare data e ora. Tutte le altre
variabili sono predefinite in PHP. La seconda parte dello script aprirà il file
log.html utilizzando fopen() e scriverà dentro tutti i dati utilizzando
fputs().
Ecco il codice PHP, i
commenti vi aiuteranno a capire meglio:
<?
$time = date("F jS Y,
h:iA"); //usiamo la funzione date()
$ip = $REMOTE_ADDR;
//$remote_addr è
una variabile del PHP per determinare l'indirizzo ip
del
visitatore
$referer = $HTTP_REFERER;
//$http_referer è un variabile
di PHP per conoscere l'indirizzo (url) di
provenienza del
visitatore
$browser = $HTTP_USER_AGENT;
//$http_user_agent determina il
tipo di browser
$fp = fopen("log.html", "a");
//usiamo la funzione
fopen()
fputs($fp, "<b>Time:</b>
$time<br><b>IP:</b> $ip<br><b>Referer:</b>
$referer<br>
<b>Browser:</b>
$browser<br><br>");
//usiamo la funzione
puts()
fclose($fp);
//Ora chiudiamo la funzione
?>
E questo è
tutto il codice che dobbiamo scrivere per creare un semplice "logger" dei
visitatori. Potete mettere questo codice ovunque nella vostra pagina da
tracciare, ed esso farà il resto. Ricordate di creare una file log.html vuoto,
caricarlo sul server nella stessa directory dove si trova la pagina che conterrà
il codice, e di dargli i permessi 777 (chmod 777 log.html). Bene, questo è
tutto.
NB: - si ricorda che a partire dalla versione 4.1.0 del PHP le
variabili di ambiente ($REMOTE_ADDR,$HTTP_REFERER,$HTTP_USER_AGENT,ecc.)
potranno essere richiamate utilizzando gli array superglobal es.: $REMOTE_ADDR
diventa $_SERVER['REMOTE_ADDR'] · il file HTML prodotto non è propriamente
corretto, dato che non contiene i tag <HTML>, <BODY>, <HEAD>
ecc..
Ebbene tutta la lezione è scaricabile gratuitamente
cliccando qui (http://click.be3a.com/click_it.html?ADVD=602047.326453.4.0190020.
oppure quì)
Caricare un file sul server con PHP
Questo
tutorial vi insegnerà a costruire un semplice script per caricare un'immagine
gif sul vostro server o spazio hosting.
Innanzitutto dobbiamo parlare
delle restrizione che PHP a riguardo la possibilità di caricare attraverso
script file sul server; tale restrizione limitano la grandezza massima del file
a 2 MB (impostazione di default). Per verificare tale impostazione è sufficiente
lanciare phpinfo() e poi controllare il valore massimo dell'upload consentito
alla voce "upload_max_filesize".
Visto abbiamo sotto mano le impostazioni del
PHP, vi consiglio di dare un'occhiata alla voce "upload_tmp_dir" ovvero la
directory temporanea dove PHP caricherà il vostro file: per il momento vi basti
verificare tele impostazione nel corso del tutorial capire il
perchè.
Iniziamo con il Form di caricamento in puro HTML
<form
name="form1" method="post" action="carica.php"
enctype="multipart/form-data">
<input type="file"
name="imagefile">
<input type="submit" name="Submit"
value="carica">
File di elaborazione
Adesso è necessario scrivere lo
script che elaborerà il form ovvero il file a cui il form punta (
action="carica.php" )
Innanzitutto voglio applicare una restrizione per
consentire l'upload di file sono in formato gif.
if
($_FILES['imagefile']['type'] == "image/gif"){
copy
($_FILES['imagefile']['tmp_name'],
"directory_di_destinazione/".$_FILES['imagefile']['name'])
or die
("Impossibile caricare il file sul server");
Nota:
"directory_di_destinazione" deve essere rescrivibile dello script ovvero deve
avere Chmod 777 (per quanto riguarda server Linux).
Se il file che tentiamo
di caricare è in formato gif, visualizzazione sullo schermo il nome del
file,
la dimensione e la sua estensione (gif).
echo "Nome del file:
".$_FILES['imagefile']['name']."";
echo "Dimesione:
".$_FILES['imagefile']['size']."";
echo "Estensione:
".$_FILES['imagefile']['type']."";
echo "<br><b>Il file è stato
caricato con successo sul server</b>"
Nel caso in cui qualcosa sia
andata storto e quindi il file non sia stato caricato sul vostro spazio
web
else {
echo "";
echo "<b> Upload non effettuato!</b>,
estensione del file non consentita
(".$_FILES['imagefile']['name'].")";
}
}
?>
Ultima modifica
Stampa la data e l'ora
dell'ultima modifica del file.
<?php
echo date( "F d Y h:i:s",
getlastmod() );
?>
Evitare l'interpretazione del codice HTML
Ho
fatto un test con il guestbook che ho creato l'altro giorno e ho scoperto che se
nel testo del messaggio che posto inserisco codice html, questo mi viene
interpretato dalla pagina! come di fa per disabilitare
l'interpretazione?
$msg = stripslashes($msg);
$msg =
htmlspecialchars($msg);
$msg = nl2br($msg);
prima dell'inserimento del
database dove $msg è l'imput del messaggio, tt quello ke ci scrivi nel mey come
< sarà riportato e non calcolato come programazione in + quando fai enter ti
mette un
<br>
http://it.php.net/manual/it/function.htmlspecialchars.php
$messaggio
= stripslashes($messaggio);
$messaggio =
strip_tags($messaggio);
$messaggio =
htmlspecialchars($messaggio);
$messaggio =
nl2br($messaggio);
$nickname = $_POST["nickname"];
$messaggio =
$_POST["messaggio"];
$conn =
mysql_connect('localhost','davidez','miodb');
$sel_db =
mysql_select_db('davidez',$conn);
if(($conn!=FALSE) && ($sel_db!=
FALSE)){
$qr = mysql_query("INSERT INTO gb (nickname, messaggio)
VALUES('$nickname', '$messaggio')");
if ($qr==FALSE)
{
echo(mysql_error());
} else {
echo ('<div
class="confirm"><b>Messaggio inserito con
successo!</b><br>redirect in corso...</div>' . '<META
HTTP-EQUIV="Refresh" CONTENT="2; URL=index.php">');
}
} else
{
echo(mysql_error());
}
Un contatore di accessi in formato
grafico!
Iniziamo a vedere "il contatore" vero e proprio, ovvero il
file PHP che tiene il conto degli accessi alle tue pagine salvando i risultato
su un semplice file di testo. Ecco il codice:
<?php
$file =
$_SERVER['DOCUMENT_ROOT'] . 'contatore.txt';
$visite =
file($file);
$visite[0]++;
$fp = fopen($file , "w");
fputs($fp ,
"$visite[0]");
fclose($fp);
?>
Inserite queste righe di codice PHP
in ogni pagina (.php) che volete tracciare.
Non ritengo opportuno commentare
il codice qui sopra dato che abbiamo più volte affrontato l'argomento in
articoli precedenti.
Vediamo ora il "cuore" della nostra applicazione, ovvero
la funzione che recupera il numero delle visite dal file "contatore.txt" e lo
"traduce" in numeri.
Ecco il codice:
<?php
function
view_tot_entries() {
$file = $_SERVER['DOCUMENT_ROOT'] .
'contatore.txt';
$fp = fopen($file, "r");
$tot = fgets($fp,
4096);
fclose($fp);
for ($i = 0; $i <= 10; $i++) {
$tot =
str_replace($i, "<img src=\"/img/numeri/n_{$i}.gif\" border=\"0\"
alt=\"$i\">", $tot);
}
return $tot;
}
?>
1)
Innanzitutto abbiamo selezionato il file da aprire (in modalità di sola lettura)
ed abbiamo recuperato il numero degli accessi tramite la variabile $tot.
2)
Il ciclo "for" è la parte forte dello script: infatti abbiamo usato la funzione
str_replace() per modificare il numero da testo a immagine sostituendo tutte le
cifre (da 0 a 9) con il loro equivalente grafico.
Il codice che abbiamo visto
sopra va salvato come "converti.php" e va incluso in tutte le pagine (.php) in
cui volete visualizzare il contatore.
Per visualizzare il contatore grafico
useremo poi questa stringa da inserire nel punto esatto della vostra pagina
(.php) in cui volete appaia il contatore:
<?php
echo
view_tot_entries();
?>
Vorrei sottolineare una cosa che potrebbe
sembrare scontate ma a mio parere non lo è: createvi le immagini dei singoli
numeri da 0 a 9 e salvateli in questa modalità: n_X.gif (dove "X" sta per il
numero!).
Ricavare informazioni sugli utenti
Con PHP è
piuttosto semplice ricavare informazioni sul nostro utente.
Più precisamente,
vedremo in questo breve tutorial come ricavare:
- l'indirizzo IP
- Il
browser utilizzato
- Il refer
Per conoscre l'indirizzo IP del nostro
visitatore useremo semplicemente:
<?
echo $REMOTE_ADDR;
?>
Per
conoscere i dati relativi al browser utilizzato:
<?
echo
$HTTP_USER_AGENT;
?>
Per conoscre il refer (ovvero da quale sito
proviene il nostro utente) useremo:
<?
echo
$HTTP_REFERER;
?>
Lavorare con i file di
testo
fopen()
Per aprire un file useremo la funzione "fopen()", la
quale restituirà "true" in caso di esito positivo o "false" in caso di esito
negativo.
Ecco come usare "fopen()".
$fp = fopen("data.txt",
"r");
if(!$fp) die ("Errore nella operaione con il file");
Come vedete
all'interno della funzione, oltre al percorso del file da aprire, abbiamo usato
l'attributo "r" (che prende il nome di "mode"). Ma vremmo potuto usare anche
diversi valori.
Ecco una tabella riassuntiva del significato di
ciascuno:
r - Apertura del file per sola lettura;
r+ - Apertura del file
per lettura e scrittura;
w - Apertura del file per sola scrittura; I
contenuti del file esistente andranno persi, qualora il file non esiste PHP
cercherà di crearlo;
w+ - Apertura del file per lettura e scrittura. I
contenuti del file esistente andranno persi, qualora il file non esiste PHP
cercherà di crearlo;
a - Apertura del file per sola aggiunta. I nuovi dati
verranno aggiunti in coda ai dati già presenti, qualora il file non esiste PHP
cercherà di crearlo;
a+ - Apertura del file per lettura e aggiunta. I nuovi
dati verranno aggiunti in coda ai dati già presenti, qualora il file non esiste
PHP cercherà di crearlo;
Dopo aver aperto il file possiamo lavorarci sopra.
Le funzioni utili a questo punto saranno "fread()" e "fwrite()" che
utilizzeremo, rispettivamente, per leggere e per scrivere sul
file.
fread()
Questa funzione viene utilizzata per estrarre una stringa di
caratteri da un file. Quindi (dopo aver aperto il file nel modo visto sopra)
aggiungeremo qualcosa del genere:
$data = fread($fp, 10);
echo $data
Il
numero utilizzato all'interno della funzione sta ad indicare il numero massimo
di byte da leggere (nell'esempio abbiamo messo 10). Arrivato a quel numero PHP
smetterà di leggere.
Con "echo" abbiamo poi chiesto al nostro script di
stampare a video il contenuto ricavato dal file.
fwrite()
Ovviamente,
prima di usare questa funzione dovremo aprire il file in modo adeguato, quindi
non utilizzeremo "r" ma, ad esempio, "w" in modo da consentire la
scrittura.
Ora useremo qualcosa del genere:
fwrite($fp, "ciao a
tutti");
In questo modo scriveremo la stringa "ciao a tutti" all'interno del
nostro file (la posizione in cui verrà inserita la stringa di testo all'interno
del file dipende dal valore precisato per "mode" al momento dell'aperura del
file)
fclose()
Una volta concluso il nostro lavoro sul file è buona norma
chiedere a PHP di chiudere lo stesso. In questo modo:
fclose($fp)
Contiamo gli accessi alle nostre pagine web con l'aiuto di
MySQL
Lo script che creeremo sfrutterà le potenzialità di MySQL e
delle sessioni (le sessioni le abbiamo trattate in un precedente
tutorial).
Iniziamo quindi a creare una pagina, chiamata "crea_tabella.php",
che avrà il seguente codice:
<?
$host = "localhost";
$user =
"root";
$pass = "";
$nome_db = "test";
$nome_tab =
"sito";
@mysql_connect($host, $user,
$pass);
@mysql_select_db($nome_db);
$query = "CREATE TABLE $nome_tb
(
accessi int(10) unsigned NOT NULL default '0',
visite int(10) unsigned
NOT NULL default '0'
id tinyint(3) unsigned NOT NULL
auto_increment,
PRIMARY KEY
(id)
)";
@mysql_query($query);
?>
Questa pagina serve a creare la
tabella della quale ci serviremo tra un po'. Il suo codice si può commentare
così:
$host = "localhost";
Questa variabile contiene il percorso dell'host
dove si trova il database MySQL al quale ci colleghiamo. Se siamo il locale
lasciamo la variabile così com'è, se siamo in remoto dovrebbe andare bene lo
stesso; se non dovesse funzionare dovrete chiedere al vostro fornitore di
servizi l'indirizzo del database MySQL
$user = "root";
Questa variabile
contiene lo username che verrà usato per collegarsi a MySQL. Se siamo in locale
va bene così com'è, se siamo in remoto bisogna chiedere al proprio fornitore di
servizi quale username usare.
$pass = "";
Questa variabile contiene la
password che verrà usata per autenticarsi a MySQL. Se siamo in locale la si può
lasciare com'è (ovvero vuota), se siamo in remoto dovremo chiedere al nostro
fornitore di servizi quale password usare.
$nome_db = "test";
Questa
variabile contiene il nome del database al quale ci collegheremo. Se siamo in
locale può rimanere così com'è, dato che il database test è creato
automaticamente all'atto dell'installazione di MySQL. Se siamo in remoto
dobbiamo cambiarla con il nome del database che ci è stato assegnato. Come fare
a sapere quale database ci è stato assegnato ? Provate a indovinare... Lo
chiediamo al nostro fornitore di servizi!
$nome_tab = "sito";
Questa
variabile contiene il nome della tabella che andremo a creare. ATTENZIONE! Nello
stesso database non possono esistere due o più tabelle con lo stesso nome, in
altre parole i nomi delle tabelle devono essere
UNIVOCI.
@mysql_connect($host, $user, $pass);
Mi collego al database
utilizzando la funzione mysql_connect(), passandole tre parametri. La
chiocciolina prima della funzione serve per non far comparire a video eventuali
errori di connessione.
@mysql_select_db($nome_db);
Una volta collegato a
MySQL, uso la funzione mysql_select_db() passandole un parametro per selezionare
il mio database. Se in locale abbiamo la possibilità di creare più database, in
realtà è difficile che in hosting ne abbiamo a disposizione più di uno, quindi
in remoto questa riga potrebbe anche essere superflua, ma per sicurezza noi la
scriviamo lo stesso...
$query = "CREATE TABLE $nome_tb (
accessi int(10)
unsigned NOT NULL default '0',
visite int(10) unsigned NOT NULL default
'0'
id tinyint(3) unsigned NOT NULL auto_increment,
PRIMARY KEY
(id)
)";
Questa variabile contiene la struttura della nostra tabella.
Senza addentrarmi troppo a spiegare le strutture delle tabelle in MySQL (non è
questa la sede adatta), dico che la query crea una tabella di nome $nome_tb.
Tale tabella è formata da tre campi; i primi due, accessi e visite, entrambe di
tipo integer (ovvero numeri interi), unsigned (ovvero di soli valori positivi),
NOT NULL (ovvero non vuoti) e che hanno 0 come valore predefinito, ovvero quando
creiamo la tabella. Il terzo campo, id, è un numero integer positivo di massimo
3 caratteri, NOT NULL e auto_increment.
@mysql_query($query);
Tramite la
funzione mysql_query() eseguo la query prima dichiarata, creando effettivamente
la mia tabella.
Dobbiamo adesso creare un'altra pagina (che chiameremo
"conta.php") con lo script adibito a contare gli accessi e le visite. Il codice
è questo:
<?
$host = "localhost";
$user = "root";
$pass =
"";
$nome_db = "test";
$nome_tab = "sito";
@mysql_connect($host, $user,
$pass);
@mysql_select_db($nome_db);
$query = "SELECT * FROM
$nome_tab";
$esegui_query = @mysql_query($query);
while ($ris =
@mysql_fetch_array($esegui_query)) {
$accessi = $ris[0];
$visite =
$ris[1];
$id = $ris[2];
}
session_start();
if (!$_SESSION['visite'])
{
$_SESSION['visite'] = 1;
$visite++;
}
$accessi++;
$query =
"UPDATE $nome_tab SET accessi = '$accessi', visite = '$visite' WHERE id =
'$id';";
@mysql_query($query);
echo "Ci sono stati $accessi accessi e
$visite visite a questa pagina...";
?>
Ovviamente non commento le prime
otto righe, esattamente uguali a quelle già presenti in "crea_tabella.php", e
che servono solo a definire le variabili che verranno usate per connettersi al
database e la connessione al database stesso.
$query = "SELECT * FROM
$nome_tab";
Con questa query selezioniamo tutti i dati presenti nella tabella
$nome_tab. L'asterisco (*) serve appunto per selezionare il contenuto di tutti i
campi.
$esegui_query = @mysql_query($query);
Eseguo la query prima
descritta.
while ($ris = @mysql_fetch_array($esegui_query)) {
Questa riga
crea un array di nome $ris, che ha come elementi i dati prelevati dal database:
il primo elemento ($ris[0]) conterrà il numero degli accessi; il secondo
elemento ($ris[1]) conterrà il numero delle visite; il terzo elemento ($ris[2])
conterrà l'id, ovvero 1.
$accessi = $ris[0];
$visite = $ris[1];
$id =
$ris[2];
Con queste tre righe creo tre variabili, ognuna delle quali sta per
uno degli elementi dell'array prima creato. In questo modo i dati saranno
disponibili anche al di fuori del ciclo while.
session_start();
Avvio una
sessione.
if (!$_SESSION['visite']) {
Se la variabile $_SESSION['visite']
non esiste... Il punto esclamativo (!) significa
negazione.
$_SESSION['visite'] = 1;
...crea tale variabile e assegnale il
valore 1...
$visite++;
...quindi incrementa il valore di
$visite.
Queste ultime righe servono per contare le visite. Abbiamo detto che
le visite sono univoche, e rappresentano il numero di persone che si sono
collegate al server. Abbiamo quindi due casi: se il visitatore ha aperto per la
prima volta la pagina, viene registrato in una variabile di sessione il valore
1, quindi viene incrementato il valore di $visite. Se il visitatore non ha già
aperto la pagina altre volte nel corso della stessa connessione, il valore della
variabile di sessione impedisce che il valore di $visite sia
incrementato.
$accessi++;
Incremento il valore di $accessi. Questo valore
si riferscie al numero delle volte che la pagina è richiesta, e quindi va
incrementato sempre, senza ricorrere adl alcun controllo.
$query = "UPDATE
$nome_tab SET accessi = '$accessi', visite = '$visite' WHERE id =
'$id';";
Questa query serve per modificare il contenuto della tabella con i
nuovi dati.
$esegui_query = @mysql_query($query);
Eseguo la query.
echo
"Ci sono stati $accessi accessi e $visite visite...";
Stampo a video il
numero di accessi e visite della pagina...
La funzione
Date()
In questa pillola studieremo la funzione date() per poterla
usare nei nostri script. Questa funzione consente di ottenere la data e l'ora
impostate sul server sul quale girano i nostri script. Analizziamo dunque i suoi
parametri principale:
a = fa comparire accanto all'ora la dicitura "am" se
l'ora è compresa tra mezzanotte e mezzogiorno, fa invece comparire la dicitura
"pm" se l'ora è compresa tra mezzogiorno e mezzanotte. Per esempio 9:25 am per
le nove e venticinque del mattino, 9:25 pm per le ventuno e venticinque di
sera.
A = ha la stessa funzione del parametro precedente, ma fa comparire le
lettere in maiuscolo anzichè in minuscolo. Per esempio 9:25 AM per le nove e
venticinque del mattino, 9:25 PM per le ventuno e venticinque di sera.
D =
indica le prime tre lettere del nome inglese del giorno della settimana. Per
esempio Sun, Mon, Fri, Sat.
l = indica il nome inglese del giorno della
settimana. Per esempio Sunday, Monday, Friday, Saturday.
g = indica l'ora, in
formato 12 ore (da usare magari con i parametri a e A), senza l'eventuale zero
iniziale. Quindi assumerà un valore compreso tra 1 e 12.
G = indica l'ora, in
formato 24 ore, senza l'eventuale zero iniziale. Quindi assumerà un valore
compreso tra 1 e 24.
h = indica l'ora, in formato 12 ore, con l'eventuale
zero iniziale. Quindi assumerà un valore compreso tra 01 e 12.
H = indica
l'ora, in formato 24 ore, con l'eventuale zero iniziale. Quindi assumerà un
valore compreso tra 01 e 24.
i = indica i minuti, con l'eventuale zero
iniziale. Quindi assumerà un valore compreso tra 00 e 59.
I = restituisce 1
se c'è l'ora legale, 0 se c'è quella solare.
j = indica il giorno del mese,
senza l'eventuale zero iniziale. Quindi assumerà un valore compreso tra 1 e
31.
d = indica il giorno del mese, con l'eventuale zero iniziale. Quindi
assumerà un valore compreso tra 01 e 31.
L = restituisce 1 se l'anno è
bisestile, 0 se non lo è.
m = indica il numero del mese con l'eventuale zero
iniziale. Quindi assumerà un valore compreso tra 01 e 12.
n = indica il
numero del mese senza l'eventuale zero iniziale. Quindi assumerà un valore
compreso tra 1 e 12.
M = indica le prime tre lettere del nome inglese del
mese in cui ci troviamo. Per esempio Jan, Mar, Aug, Nov.
F = indica il nome
inglese per intero del mese in cui ci troviamo. Per esempio January, March,
August, November.
O = indica la differenza dal meridiano di Greenwich. Per
esempio +0200 per indicare due ore di ritardo, o -0400 per indicare quattro ore
di anticipo.
Z = indica la differenza dal meridiano di Greenwich in secondi.
Per esmpio +43200 o - 43200.
r = restituisce la data formattata secondo la
norma RFC 822. Per esempio Thu, 21 Dec 2000 16:01:07 +0200. (Disponibile a
partire da PHP 4.0.4)
s = indica i secondi, con l'eventuale zero iniziale.
Quindi assumerà un valore compreso tra 00 e 59.
S = indica il suffisso
inglese per i numeri cardinali. Per esempio st, nd, rd, th.
t = indica il
numero di giorni di un dato mese senza lo zero iniziale. Quindi assumerà un
valore compreso tra 1 e 31.
U = indica il numero di secondi trascorsi
dall'Unix Epoch, ovvero il 1 Gennaio 1970.
w = indica il numero del giorno
della settimana senza lo zero iniziale. Bisogna tenere conto che la settimana
inglese inizia la Domenica, e che in PHP gli elementi si contano a partire da 0.
Quindi assumerà 0 per Domenica, 1 per Lunedì e così via fino a 6 per
Sabato.
W = indica il numero della settimana in cui ci troviamo. Per questo
parametro le settimane iniziano il Lunedì, e non la Domenica.
Y = indica
l'anno utilizzando quattro cifre. Per esempio 2003.
y = indica l'anno
utilizzando le ultime due cifre. Per esempio 03.
z = indica il numero di
giorno dell'anno senza l'eventuale zero iniziale. Quindi assumerà un valore
compreso tra 1 e 366
Ora che conosciamo i parametri principali da usare con
la funzione date(), passiamo alla loro applicazione pratica.
Immaginiamo di
voler ottenere una data del tipo 22/04/85 (la mia data di nascita ;-)), dovremmo
scrivere una riga come questa:
date("d/m/y");
Per ottenere una data del
tipo 4/6/1998 dovremmo scrivere una riga come questa:
date("j-n-Y");
Per
ottenere un'orario del tipo 15:54:06 dovremmo scrivere una riga come
questa:
date("H:i:s");
Per ottenere un'orario del tipo 9.54 pm dovremmo
scrivere una riga come questa.
date("g.i a");
Passiamo adesso a vedere
come ottenere delle date un po' più comlesse. Nulla infatti ci vieta di ottenere
una data del tipo 06/4/2000 9:54.65 PM. La riga da scrivere sarà come
questa.
date("d/n/Y g:i.s A");
Vediamo adesso un'ultimo esempio, un po'
più complicato degli altri, che però non deve spaventare. Supponiamo di voler
ottenere una data del tipo Lunedì 6 Ottobre 2002, sono le 19, 24 minuti e 36
secondi. Le righe di codice sarebbero queste:
$giorni = array("Domenica",
"Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì", "Sabato");
$mesi =
array("Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno", "Luglio",
"Agosto", "Settembre", "Ottobre","Novembre",
"Dicembre");
$numero_giorno_settimana = date("w");
$nome_giorno =
$giorni[$numero_giorno_settimana];
$numero_giorno_mese =
date("j");
$numero_mese= date("n");
$numero_mese--;
$nome_mese =
$mesi[$numero_mese];
$numero_anno = date("Y");
$ore =
date("G");
$minuti = date("i");
$secondi = date("s");
echo "Oggi è
$nome_giorno $numero_giorno_mese $nome_mese $numero_anno, sono le $ore, $minuti
minuti e $secondi secondi";
Ma analizziamole meglio:
$giorni =
array("Domenica", "Lunedì", "Martedì", "Mercoledì", "Giovedì", "Venerdì",
"Sabato");
Creo un array, lo chiamo $giorni e scrivo sette valori,
corrispondenti ai nomi italiani della settimana, partendo dalla domenica. Parto
dalla Domenica e non dal Lunedì perchè la settimana inglese parte appunto di
Domenica e non di Lunedì (scusate il gioco di parole ma meglio di coì non ci
riuscivo a spiegarlo). Questo array ci sarà utile utilizando il parametro w,
vedete la spiegazione sopra.
$mesi = array("Gennaio", "Febbraio", "Marzo",
"Aprile", "Maggio", "Giugno", "Luglio", "Agosto", "Settembre",
"Ottobre","Novembre", "Dicembre");
Creo un array e lo chiamo $mesi, inserisco
dodici valori, corrispondenti ai nomi italiani dei mesi. Questo array ci sarà
d'aiuto quando useremo il parametro n.
$numero_giorno_settimana =
date("w");
La variabile $numero_giorno_settimana contiene adesso un valore
compreso tra 0 e 6.
$nome_giorno = $giorni[$numero_giorno_settimana];
Do
alla variabile $nome_giorno il valore di un nome del giorno della settimana
contenuto nell'array $giorni. Il nome del giorno cambia il funzione del valore
di $numero_giorno_settimana.
$numero_giorno_mese = date("j");
Assegno alla
variabile $numero_giorno_mese un valore compreso tra 1 e 31.
$numero_mese=
date("n");
Assegno alla variabile $numero_mese un valore compreso tra 1 e
12;
$numero_mese--;
Decremento di un'unità il valore di $numero_mese. La
variabile avrà quindi un valore compreso tra 0 e 11. Questo perchè negli array
il primo elemento è l'elemento 0, il secondo è l'elemento 1 e così via. Ne
abbiamo già parlato spiegando il parametro w.
$nome_mese =
$mesi[$numero_mese];
Assegno alla variabile $nome_mese il valore di un nome
di mese contenuto nell'array $mesi.
Prendiamo un attimo in esame le ultime
tre righe e cerchiamo di capirle meglio. Ammettiamo che $numero_mese= date("n");
mi restituisca 9, ovvero settembre. Se utilizzassi direttamente $nome_mese =
$mesi[$numero_mese]; senza prima decrementare il valore di $numero_mese,
$nome_mese assumerebbe il valore del nono elemento dell'array, ovvero Ottobre e
non Settembre. Per questo è necessario decrementare prima il valore di
$numero_mese.
$numero_anno = date("Y");
Assegno alla variabile
$numero_anno il valore dell'anno in cui ci troviamo utilizzando 4 cifre.
$ore
= date("G");
Assegno alla variabile $ore il valore dell'ora in cui
siamo.
$minuti = date("i");
Assegno alla variabile $minuti il valore dei
minuti in cui siamo.
$secondi = date("s");
Assegno alla variabile $secondi
il valore dei secondi in cui siamo.
echo "Oggi è $nome_giorno
$numero_giorno_mese $nome_mese $numero_anno, sono le $ore, $minuti minuti e
$secondi secondi";
Stampo a video la mia stringa, ovvero Lunedì 6 Ottobre
2002, sono le 19, 24 minuti e 36 secondi.
Tempo di caricamento per una pagina
Php
<?
function tempo() {
$tempo = microtime();
$tempo =
explode(" ", $tempo);
$tempo[0] = floatval($tempo[0]);
$tempo[1] =
floatval($tempo[1]);
return ($tempo[0] + $tempo[1]);
}
$tempo_iniziale
= tempo();
for ($a = 0; $a < 1000; $a++) {
}
$tempo_finale =
tempo();
$tempo_trascorso = $tempo_finale -
$tempo_iniziale;
$tempo_trascorso = substr($tempo_trascorso, 0, 6);
echo
$tempo_trascorso;
?>
Ma vediamo di analizzarlo nei
dettagli...
function tempo() {
creo una funzione, la chiamo tempo e non le
passo nessun parametro
$tempo = microtime();
La funzione microtime
restituisce una stringa di tipo "Millisecondi Secondi", il tutto misurato a
partire all'Unix Epoch (1 Gennaio 1970)
$tempo = explode(" ",
$tempo);
Spezzo la variabile tempo e creo un array: il primo elemento
($tempo[0]) sono i millisecondi, il secondo elemento ($tempo[1]) sono i
secondi.
$tempo[0] = floatval($tempo[0]);
$tempo[1] =
floatval($tempo[1]);
Abbiamo detto che la funzione microtime() restituisce
una stringa, e siccome sue stringhe non si possono sommare (al massimo si
possono "unire" con "."), dobbiamo convertire i due valori in numeri di tipo
float, ovvero a virgola mobile. La funzione floatval() serve appunto a
questo.
return ($tempo[0] + $tempo[1]);
Dico alla funzione di avere come
risultato la somma dei due valori, quindi il risultato sarà un numero float del
tipo 1063897097.2178
$tempo_iniziale = tempo();
Creo una variabile e le
assegno il valore della funzione tempo(), quindi $tempo_iniziale sarà qualcosa
come 1063897097.2178
for ($a = 0; $a < 1000; $a++) {}
Questo codice è
assolutamente inutile, e serve solo a fare "perdere tempo" allo script. Al posto
di questa riga dovrete inserire il corpo della vostra pagina.
$tempo_finale =
tempo();
Creo una variabile e le assegno il valore della funzione tempo(),
quindi $tempo_finale sarà qualcosa come 1063897097.2202, in quanto per contare
da 1 a 1000 (le righe di script "inutili" servono a quello) il server avrà
impiegato un po' di tempo.
$tempo_trascorso = $tempo_finale -
$tempo_iniziale;
Creo un'altra variabile e le assegno il valore della
differenza tra il tempo iniziale e quello finale. La variabile avrà quindi un
valore tipo 0.0024149251937866
$tempo_trascorso = substr($tempo_trascorso, 0,
6);
siccome la variabile $tempo_trascorso è troppo lunga, tramite la funzione
substr() considero solo i primi 6 caratteri (il terzo parametro) a partire dal
primo (il secondo parametro, 0)
echo $tempo_trascorso;
Stampo a video il
tempo trascorso
Operazioni matematiche con il PHP
Nello
scrivere programmi in PHP può risultare utile eseguire operazioni matematiche di
diverso tipo.
In questo tutorial cercheremo di spiegare semplicemente come
effettuare addizioni, sottrazioni, divisioni e moltiplicazioni.
Iniziamo con
l'esporre la sintassi degli operatori:
- somma (+)
- sottrazione (-)
-
moltipicazione (*)
- divisione (/)
Poniamo, ad es., di voler sommare due
numeri: 7 e 3.
Ecco cosa dovremmo fare:
<?PHP
$somma = (7 +
3);
echo $somma;
?>
Per offrire una panoramica più ampia ritengo
utile postare qualche esempio esclusivamente teorico che (mi auguro) vi offirà
qualche utile spunto.
Creiamo quindi un piccolo script definendo al suo
inizio il valore numerico di due variabili che ci serviranno per eseguire le
diverse operazioni: "$Numero_1" e poniamo che abbia come valore 8 e "$Numero_2"
con valore 2 (Ovviamente potete assegnare a queste variabili i valori che
volete...).
Ecco finalmente il nostro script
"matematico":
<?PHP
$Numero_1=8;
$Numero_2=2;
$Somma =
($Numero_1+$Numero_2);
echo "$Numero_1 + $Numero_2 = $Somma
<br>";
$Sottrazione = ($Numero_1-$Numero_2);
echo "$Numero_1 -
$Numero_2 = $Sottrazione <br>";
$Moltiplicazione =
($Numero_1*$Numero_2);
echo "$Numero_1 x $Numero_2 = $Moltiplicazione
<br>";
$Divisione = ($Numero_1/$Numero_2);
echo "$Numero_1 :
$Numero_2 = $Divisione <br>";
?>
Poniamo invece di voler
effettuare una complessa
equazione...
<?PHP
$Numero_1=8;
$Numero_2=2;
$Equazione =
((($Numero_1+$Numero_2)/$Numero_2)*$Numero_1);
echo "((($Numero_1 +
$Numero_2) : $Numero_2) x $Numero_1) =
$Equazione";
?>
Estrarre dati da un db MySql
In
questo semplice tutorial spiegheremo (in poche parole) come realizzare un
piccolo script Php in grado di connettersi ad un db MySql e recuperarne i
dati.
Ovviamente è necessario avere installato sul proprio server (olre a PHP
ovviamente...) il supporto di MySql.
Per gestire i database MySql è
consigliabile avere installato sul proprio server PhpMyAdmin (Ndr: PhpMyAdmin è
un'applicazione Php che aiuta a gestire con estrema facilità i nostri db
MySql).
Quindi: entriamo in PhpMyAdmin e creiamo una nuova tabella nel nostro
DB (che chiameremo "amici") composta da 3 campi: nome, email e sex.
Ai
fini dell'esempio, utlizzeremo la tabella "amici" come fosse una semplice agenda
con nome ed email di tutti i nostri amici. Poniamo inoltre che il campo "sex"
possa avere solo 2 valori: "uomo" o "donna".
Ecco la query:
mysql>
CREATE TABLE amici (
> id INT NOT NULL AUTO_INCREMENT,
> nome
VARCHAR (50),
> email VARCHAR (50),
> sex VARCHAR (5),
>
PRIMARY KEY (id));
A questo punto la nostra nuova tabella "amici" è
pronta per essere utilizzata...
Vediamo adesso com'è possibile recuperarne i
dati con Php...
<html>
<head>
<title>Recuperare
i dati da un DB
MySql</title>
</head>
<body>
<?
/*
dichiariamo alcune importanti variabili per collegarci al database */
$DBhost
= "Hostname o IP del tuo database";
$DBuser = "il tuo username";
$DBpass =
"la tua password";
$DBName = "il nome del database";
/* specifichiamo il
nome della nostra tabella */
$table = "amici";
/* Connettiamoci al
database */
mysql_connect($DBhost,$DBuser,$DBpass) or die("Impossibile
collegarsi al server");
@mysql_select_db("$DBName") or die("Impossibile
connettersi al database $DBName");
/* impostiamo la query e cerchiamo
solo le amiche donne...*/
$sqlquery = "SELECT * FROM $table WHERE sex =
'donna'";
$result = mysql_query($sqlquery);
$number =
mysql_num_rows($result);
$i = 0;
if ($number < 1) {
print
"<center><p>La ricerca non ha prodotto nessun
risultato</p></center>";
}
else {
while ($number > $i)
{
$thename = mysql_result($result,$i,"nome");
$theemail =
mysql_result($result,$i,"email");
print "<p><b>Nome:</b>
$thename<br><b>E-Mail:</b>
$theemail</p>";
$i++;
}
}
?>
</body>
</html>
Salviamo
tutto il codice qui sopra in una pagina con estensione ".PHP" e godiamoci il
risultato...
Attenzione: il tutto viene molto meglio se si ha la
premura di inserire un po' di dati nel DB, in caso contrario verrà visualizzato
solamente un messaggio che ci avvisa che la ricerca non ha prodotto
risultati...
Realizziamo un semplice gioco a quiz
Lo scopo
di questo tutorial è quello di introdurre alle capacità di PHP di interagire con
l'utente attraverso i form.
Nello specifico impareremo a costruire un piccolo
quiz on-line: si tratterà pertanto di porre una domanda al nostro utente e di
verificarne la risposta in modo automatico.
Ovviamente si tratta solo di un
esempio in grado di far comprendere in che modo il linguaggio riellabora e
risponde alle informazioni inserite dagli utenti.
Il nostro esempio si
compone di 2 diverse parti: una pagina HTML contenente il form con la domanda ed
una pagina PHP che riceve i dati dal form, li interpreta e da una
risposta.
Questo il codice della pagina
Html:
<html>
<head></head>
<body>
<form
method="get" action="quiz.php">
In quale squadra di calcio italiana ha
giocato Maradona?<br>
<br>
<input name="risposta"
type="radio" value="Juve"> Juve<br>
<input name="risposta"
type="radio" value="Milan"> Milan<br>
<input name="risposta"
type="radio" value="Napoli"> Napoli<br>
<br>
<input
type="submit" value="INVIA
RISPOSTA">
</form>
</body>
</html>
In questa
sede non è certo il caso di dilungarsi sul funzionamento della pagina in Html e
dei form (per i quali rimandiamo alla lettura di un comune manuale di
Html).
Salviamo questa pagina come "domanda.html" e passiamo all'applicazione
in Php.
In sostanza dovremo impostare 2 diverse azioni che si
realizzeranno l'una in caso di risposta esatta e l'altra nel caso
contrario.
Ecco il
codice:
<html>
<head></head>
<body>
<?php
if
($_GET['risposta'] == "Napoli") echo "Risposta esatta!";
if
($_GET['risposta'] != "Napoli") echo "Risposta sbagliata! Maradona giocò nel
Napoli";
?>
</body>
</html>
Salviamo questo codice in
un file chiamato "quiz.php".
Come avrete notato per recuperare i dati dal
form abbiamo introdotto una variabile $_GET['risposta'] ed abbiamo usato la
condizione "if" associandola nel primo caso all'operatore di equivalenza (==) e
nell'altro all'operatore di diseguaglianza (!=).
Ora non ci resta che
caricare entrambi i file sul nostro server, aprire il file "domanda.html" con il
nostro browser, provare a rispondere al quiz e vedere cosa
succede.
Spedire email con il Php
Inviare e-mail con PHP
è un'operazione abbastanza semplice: l'unico comando che ci servrà in questo
contesto è la funzione "mail()".
La nostra funzione Mail() una volta
richiamata all'interno della nostra applicazione "contatterà" il sistema postale
del nostro server (sendmail o server SMTP). Nel caso in cui il nostro server non
ne sia attrezzato la nostra operazione non potrà riuscire.
Questa la sintssi
di Mail():
mail(destinatario, oggetto, messaggio, headers)
Ecco un piccolo
esempio di codice PHP per l'invio di e-mail:
<?PHP
#Specifica la tua
mai e quella del destinatario
$mail_mittente =
"mittente@sito.com";
$mail_destinatario =
"destinatario@sito.com";
#specifica il subject ed il body della
mail
$mail_oggetto = "Messaggio di prova";
$mail_corpo = "Questo è un
messaggio di prova per testare la mia applicazione";
if
(mail($mail_destinatario, $mail_oggetto, $mail_corpo, "From:
$mail_mittente"))
echo "Messaggio inviato con successo a
$mail_destinatario";
else
echo "Errore. Nessun messaggio
inviato.";
?>
Ovviamente è possibile personalizzare il codice qui sopra
nel modo che si ritiene più opportuno.
Con qualche piccolo accorgimento e con
l'aiuto dei form potrete creare facilmente applicazioni molto interessanti come,
ad es., un applicazione per raccogliere i suggerimenti degli utenti oppure per
inviare cartoline virtuali.
La prima pagina in PHP. Il comando print ed i
commenti.
Se è la prima volta che avete a che fare con PHP questo
piccolo tutorial potrà esservi utile, in quanto vin introdurrà alle piu'
semplici funzionalita' del PHP, ovvero: la stampa di un testo e la possibilita'
di commentare il codice.
Qui sotto il codice da inserire nella nostra
nuova pagina "prova.php" (per scriverla possiamo usare anche un semplice editor
come il notepad di Windows e poi salvare come file .php)
Ecco il
codice:
<?PHP
/*
**************************
* Il mio
primo programma
*
**************************
*/
// <--- Indica
un commento su una linea
/*
Indicano un commento
multi-linea
*/
// Stampo una stringa a
video
print "Hello Baby!";
?>
Lo scopo
dell'esempio è di mostrare il formato speciale dei tag di PHP. In questo esempio
abbiamo usato <?PHP per indicare l'inizio e ?> per indicare la fine del
codice Php. All'esterno dei due tag può essere tranquillamente inserito del
normale codice Html.
Il risultato? Proviamo a caricare la pagina "prova.php"
e staimo a vedere... Se tutto funziona correttamente (e se PHP è installato
sulla vostra macchina) il risultato a video sarà: Hello Baby!
Un po' di sintassi...
| Simbolo | Significato |
| /* */ |
Segna più righe come commenti |
| // | Indica un commendo su una riga. E' uguale a # |
| # | Segna una riga come commento |
| \n | L'equivalente di un invio - nuova riga |
| \r | Nuova riga |
| == (due simboli dell'uguale) | Uguale |
| === (tre simboli dell'uguale) | Identico (uguale e dello stesso tipo - solo PHP4) |
| <= | Non maggiore |
| >= | Non minore |
| != | Non uguale (diverso da) |
| !== | Non identico (diverso ma dello stesso tipo - solo PHP4) |
| && | AND |
| || (due pipe - sbarrette verticali) | OR |
| ! (punto esclamativo) | NOT |
| . (punto) | Operatore di concatenazione |
| strlen ($variabile) | Conta il numero di caratteri in una
riga Es. $title = "TITOLO"; $size = strlen($title); if ($size <= 60) { //controllo del numero di caratteri echo "la lunghezza del titolo è $size. OK"; } else { echo "la lunghezza del titolo è $size. NON VA BENE!"; } |