Corso di Php (base)
Massimo Di Paolo
m.dipaolo@labforweb.it
Indice delle lezioni
Php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Introduzione
I concetti di base
Le variabili, i tipi di dato
Operatori di confronto e logici. Espressioni
Struttura di controllo e i cicli
Array
Le Funzioni
Accesso ai file
I Form
Le variabili $_GET, $_POST, $_COOKIES e $_SESSION
Php e MySql
Progetto di sito con le seguenti funzionalità
1.
2.
3.
4.
Upload di file
Paginazione dei risultati
Inviare mail
Criptare i dati con le funzioni md5 e/o sha1
1.1 Php – Un po’ di storia
Nasce nel 1994, ad opera di Rasmus Lerdorf, come una serie di macro la cui
funzione era quella di facilitare ai programmatori l’amministrazione delle
homepage personali: da questo uso ha origine il suo primo nome Personal
Home Page.
È un prodotto Open Source (Codice Aperto) perfettamente integrato con altri due
prodotti simili per filosofia Apache (Web Server) e MySql (database
relazionale)
La versione "stabile" attuale è la 5.4.14, rilasciata ad aprile 2013
Oggi PhP è conosciuto con il nome Pre Hypertext Processor oppure, più
semplicemente, Hypertext PreProcessor
è un linguaggio completo di scripting;
può girare praticamente su qualsiasi server Web Apache, Microsoft IIS, …;
su qualsiasi sistema operativo Windows o Unix/Linux, ma anche Mac,
AS/400, Novell, OS/2, …;
consente di interagire praticamente con qualsiasi tipo di database SQLite,
MySQL, PostgreSQL, Microsoft Access/SQL Server, Oracle, SyBase, …
1.2 Php – Un po’ di storia
Php non è l'unico linguaggio di programmazione per il Web
La sua scelta rispetto ad altri è di tipo soggettivo
Però vogliamo ricordare che:
1. È il più vecchio (ed ancora usato) linguaggio di programmazione per il Web;
2. È gratis;
3. Ha moltissime librerie di funzioni ormai testate al 100%;
4. Ha la più vasta comunità di sviluppatori che aggiorna continuamente tali
librerie;
5. Tutti i CMS più usati nelle aziende sono scitti in Php e producono file in Php
(vedi Wordpress, Joomla, …)
Microsoft ha intrapreso da qualche anno la stessa politica dei prodotti Open
Source attraverso le versioni Express dei suoi tools di sviluppo ma, come al solito,
non fornisce tutto e soprattutto "le cose in più" (librerie, plugin, …) molto spesso
sono a pagamento.
1.3 Php – Introduzione
Risorse sul Web
www.php.net sito ufficiale della comunità Php (in inglese)
www.mysql.com sito ufficiale della comunità MySql (esiste anche una
sezione in lingua italiana in questo sito, ma non è del tutto tradotta)
www.w3schools.com/php sito legato al consorzio W3C (in inglese) … c'è
tutto di tutto !!!!
WAMP e LAMP ?????
E per il MAC XAMPP (X= per ogni S.O. – A=Apache – M=MySql – P=PhP –
P=Perl) ha dei problemi su Windows, conviene usare EasyPhP
Sistema di sviluppo in locale
EasyPhp www.easyph.org
Editor
Adobe Dreamweaver quello che useremo (breve spiegazione)
NetBeans (scritto in Java per Java e poi esteso anche ad altri linguaggi)
Visual Studio IDE 2008/2010/2012 con particolari plugin di terze parti (a
pagamento !!!!!)
Framework
Zend, CodeIgniter, Yii, … raccolta di classi e funzioni soprattutto per
interfacce grafiche evolute e accesso ai dati
1.4 Php – Introduzione
Php: lato server e lato client
Pagine statiche (Html) e pagine dinamiche (PhP, Asp.net, Jsp, …)
le pagine dinamiche (Php) sono elaborate dal server web e restituite
all'utente come pagine statiche (Html); al massimo possono contenere
"script" che funzionano lato client (ad esempio in javascript)
le pagine in Php hanno estensione .php
1.5 Php – Introduzione
PhP la sua funzione fondamentale è quella di produrre codice HTML.
PhP è però un linguaggio di programmazione lato server
quindi abbiamo la possibilità di analizzare cosa è stato richiesto al server
Web
e possiamo produrre come risposta codice Html condizionato ai risultati
della richiesta
In definitiva abbiamo realizzato il Web dinamico
1.6 Php – Introduzione
Istallare EasyPhp il file è nella cartella C:\Temp
Shortcut sul desktop della cartella /www
Copia del file index.php da C:\Temp /www
Lanciare EasyPhp
Click con il pulsante destro sull'icona
Dal menù selezionare Configuration EasyPhp
Impostare la lingua su Italiano;
Lasciare la spunta solo sulla terza, quinta e sesta voce
Premere OK
Il menù di EasyPhp passa in lingua italiana
Fare click sulla voce Sito locale notare indirizzo del sito (127.0.0.1 = localhost)
uguale per tutti e la porta (8080, 8887, …) che può essere diversa da computer a
computer per motivi, prevalentemente, di software istallato.
Cosa succede se il file index.php lo rinominiamo default.php
2 Php – I concetti di base: la sintassi del linguaggio
Come fa il Server Web a capire che gli stiamo spedendo codice scritto in PhP ?
guardando l'estensione del file (.php) non basta, perché se rinomino un file
.html con .php il Server Web me lo rimanda indietro così come è
inserendo dei TAG opportuni all'interno della pagina per distinguerlo dal
codice Html:
TAG di apertura <?php … ?> TAG di chiusura
nelle versioni precedenti alla 5 si usavano anche:
TAG di apertura <script language="php" …</script> TAG di chiusura
i cosiddetti TAG BREVI
TAG di apertura <? … ?> TAG di chiusura
TAG di apertura <% … %> TAG di chiusura (stile Microsoft Asp)
Sono disabilitati dalla versione 5 ma attivabili nel file php.ini per motivi di
retrocompatibilità.
Usate sempre i primi per i nuovi progetti !!!
2.1 Php – I concetti di base: istruzioni e commenti
Istruzione (token) blocco di codice;
; separatore di istruzioni;
() e/o {} raggruppamento di istruzioni.
Tutte le istruzioni in Php terminano con il punto e virgola, solo alcune fanno
eccezione: i commenti, le espressioni dentro i cicli condizionali, …, altre che
scopriremo nel corso delle lezioni
2 tipi di commenti in Php
// commento su una linea;
/* … */ commento su più linee.
2.2 Php – I concetti di base: ouptut dei dati
Echo output a video
Print output a video
Attenzione alla leggibilità del codice non basta che gli script php siano scritti
ben formattati, con i commenti, et altro: occorre che anche l'HTML della pagina
risulti ben leggibile perché molti errori si capiscono subito guardando il codice
sorgente della pagina prodotta carattere di escape \n usato opportunamente
3 Php – Variabili e tipi di dato
Variabili
contenitori di informazioni
iniziano sempre con il carattere $
Per definirle si possono utilizzare tutti i caratteri dalla a alla z (minuscolo o
maiuscolo), i numeri da 0 a 9 e il carattere speciale _ (underscore);
sono vietati gli spazi e qualunque altro carattere;
$a è diversa da $A le variabili sono di tipo case sensitive;
le variabili possono essere valorizzate con qualsiasi dato testo, numeri,
date, valori vero/falso, valori complessi;
in Php una variabile può essere utilizzata senza dichiararne il tipo prima
Php è un linguaggio di programmazione fortemente tipizzato (tipizzazione
dinamica): possiamo quindi riferirci ad una variabile direttamente con la sua
valorizzazione;
3.1 Php – Variabili e tipi di dato
Errori con le Variabili
Errori di tipo E_NOTICE sono gli errori meno gravi, la cui visualizzazione
dipende dalle impostazioni nel il file di configurazione php.ini (per default
sono abilitati). Un errore di questo tipo non compromette il buon
funzionamento dello script, che infatti viene eseguito regolarmente.
3.2 Php – Variabili e tipi di dato
Tipizzazione del linguaggio
PhP è un linguaggio debolmente tipizzato al contrario di altri linguaggi di
programmazione (Asp.Net, Jsp, …) non serve indicare di che tipo di dato è la
variabile, basta solo definirla e assegnargli un valore Php, da questo
valore capisce e assegna il tipo di dato giusto alla variabile
Questa operazione si chiama CAST ;
Questo facilita la programmazione … ma è rigoroso dal punto di vista della
logica di programmazione ? La risposta è No.
3.3 Php – Variabili e tipi di dato
PhP, come accennato in precedenza, è un linguaggio fortemente tipizzato:
non assegna il Tipo di dato alla variabile ma lo deduce dal valore associato;
Php gestisce i seguenti tipi di dato,
String;
Number;
Boolean;
Array;
Constant;
Date e Time;
3.4 Php – Variabili e tipi di dato
String sequenza di caratteri alfanumerici
Due sistemi per specificare una stringa virgolette semplici, virgolette doppie Per
un carattere di base occorrono 8 bit = 1 byte, quindi la dimensione dipende dal
numero di caratteri.
Per stringhe contenenti già "doppie virgolette" o "virgolette singole" escape
character (\, \n, \t, \\, \$)
Per concatenare 2 stringhe usare il "punto" $stringa 1 . $stringa2 (lo spazio
serve solo a migliorare la leggibilità)
3.5 Php – Variabili e tipi di dato
Stringhe: espansione delle variabili
Le stringhe delimitate da doppie possono contenere delle variabili perché
l’interprete Php sa come trattarle. La tecnica si chiama Espansione della
variabile
3.6 Php – Variabili e tipi di dato
Number due diversi tipi di numeri: intero e in virgola mobile
Intero (int) dipende dal sistema operativo ma, tipicamente, è a 32 bit
possono assumere valori con segno da -2.147.483.648 a +2.147.483.647
zero compreso (da -232 a 232).
In virgola mobile (float) su piattaforme a 32 bit si estende da 1.7E-308 a
1.7E+308 (da -264 a 264) con una precisione fino a 14 cifre decimali.
Per compatibilità supporta anche la parola double.
Per i numeri interi, quando superano il loro limite vengono, automaticamente
convertiti in virgola mobile
Funzione var_dump(); per ritornare il tipo di dato numerico;
3.7 Php – Variabili e tipi di dato
Variabili booleane come tutti i linguaggi di programmazione, Php utilizza
particolari variabili per mostrare condizioni del tipo vero/falso.
Se una variabile è TRUE mostra 1
Se una varibile è FALSE mostra niente (blank)
3.8 Php – Variabili e tipi di dato
COSTANTI variabile che mantiene immutato il suo valore durante tutta
l'esecuzione dello script in cui è richiamata
Non hanno il prefisso $ davanti;
Distinguono tra maiuscole e minuscole ma per convenzione si richiede che
siano scritte solo in maiuscolo;
Non possiedono operatore di assegnazione (=) ma si utilizza l’istruzione
define
Se chiamate 2 volte nello stesso script, generano errore
3.9 Php – Variabili e tipi di dato
Array è un tipo di dato che contiene una serie di valori, anche diversi nel
tipo.
Possono essere semplici o di tipo associativo;
Per vedere come è fatto un array dal punto di vista della struttura basta usare
la funzione print_r(nome_array);
per vedere il tipo di dati presenti in un array basta usare la funzione
var_dump(nome_array) utile per array misti;
ritorneremo a parlare di array dopo i cicli si esaminano tramite un
particolare ciclo noto come foreach.
3.10 Php – Variabili e tipi di dato
Conversioni tra tipi di dato
Diverse funzioni e operazioni necessitano che le variabili siano dello stesso tipo
per ottenere il risultato voluto
Conversione implicita effettuato direttamente dal motore di Php
3.11 Php – Variabili e tipi di dato
Conversioni tra tipi di dato
Esistono delle funzioni interne a Php (funzioni di sistema) che indicano se una
variabile è di un determinato tipo:
Is_type richiede un argomento e restituisce un valore booleano;
Settype richiede due argomenti, la variabile da convertire e il tipo in cui deve essere
convertita, e restituisce una variabile nel tipo richiesto.
3.12 Php – Variabili e tipi di dato
DATE e TIME altro dato di tipo complesso
Php è nato su SO Unix, quindi utilizza il timestamp dello stesso per rappresentare
date e ore una particolare data-ora è misurata in secondi a partire dal
01/01/1970 ed è quindi rappresentata da un numero (le date precedenti sono
rappresentate da numeri negativi.
I codici di formattazione sono moltissimi, li trovate sul sito ufficiale di Php. Sono
riassunti nella slide successiva.
3.13 Php – Variabilie tipi di dato
Date
Codice
Descrizione
Y
anno su 4 cifre
y
anno su 2 cifre
n
mese numerico (1-12)
m
mese numerico su 2 cifre (01-12)
F
mese testuale ('January' - 'December')
M
mese testuale su 3 lettere ('Jan' - 'Dec')
d
giorno del mese su due cifre (01-31)
j
giorno del mese (1-31)
w
giorno della settimana, numerico (0=dom, 6=sab)
l
giorno della settimana, testuale ('Sunday' - 'Saturday' )
D
giorno della settimana su 3 lettere ('Sun' - 'Sat')
H
ora su due cifre (00-23)
G
ora (0-23)
i
minuti su due cifre (00-59)
s
secondi su due cifre (00-59)
mySql usa il proprio formato Datatime oltre al Timestamp, quindi salvare le date in
esso è una questione distinta che và verificata con le regole del database.
4 Php – Operatori aritmetici, di confronto e logici
Operatori aritmetici sono quelli classici e lavorano con numeri interi e in virgola
mobile. Gli operandi che non sono di questo tipo vengono convertiti in uno di
questi tipi e valutati.
Operatori confronto ci permettono, effettuando dei confronti fra valori, di
prendere delle decisioni, cioè di far svolgere al nostro codice determinate
operazioni invece di altre.
Operatori logici confrontano i risultati di due espressioni
4.1 Php – Operatori aritmetici
+ addizione
- sottrazione
* moltiplicazione
/ divisione
% modulo (resto della divisione)
Possiedono anche una versione di assegnazione in cui l’operando sinistro è anche
la variabile in cui collocare il risultato:
+=
-=
*=
/=
%=
4.2 Php – Operatori di confronto
Gli operatori confronto sono 7 e sono riportati nella tabella seguente:
==
uguale
!=
Diverso (<>)
=== identico (cioè uguale e dello stesso tipo: ad es. per due variabili di tipo intero)
>
maggiore
>=
maggiore o uguale
<
minore
<=
minore o uguale
4.3 Php – Operatori di confronto
Esempio di confronto tra numeri
Nel confronto tra numeri non c'è nulla da spiegare a parte il terzo:
Il risultato è falso perché nonostante le due variabili siano entrambe
valorizzate con il valore 7, una è identificata di tipo INTERO e l'altra di tipo
VIRGOLA MOBILE
$a = 7; $b = 7.0; $c = 4; //assegniamo valori a tre variabili
$a == $b; // vero
$a == $c; // falso
$a === $b; // falso, perché $a è intero mentre $b è float
$a > $c; // vero
$c >= $a; // falso
$c < $a; // vero
$c <= $b; // vero:
4.4 Php – Operatori di confronto
Esempio di confronto tra stringhe
In questo caso il confronto viene fatto basandosi sull’ordine alfabetico dei caratteri
vale a dire che vengono considerati ‘minori’ i caratteri che ‘vengono prima’
nell’ordine alfabetico:
‘a’ è minore di ‘b’, ‘b’ è minore di ‘c’, …
tutte le lettere minuscole sono ‘maggiori’ delle lettere maiuscole;
tutte le lettere, maiuscole e minuscole, sono ‘maggiori’ delle cifre da 0 a 9.
$a = 'Mario'; $b = 'Giorgio'; $c = 'Giovanni'; $d = 'antonio'; $e = '4 gatti';
$a < $b; // falso, la 'G' precede la 'M'
$b < $c; // vero, la 'r' ('Gior') precede la 'v' ('Giov')
$d > $a; // vero, la 'a' minuscola è 'maggiore' di qualsiasi lettera maiuscola
$c > $e; // vero, ogni lettera è 'maggiore' di qualsiasi cifra
4.5 Php – Operatori logici
Gli operatori logici sono 3 e sono riportati nella seguente tabella:
Operatore
Descrizione
Or oppure ||
Se almeno una delle due espressioni è true, ritorna true
altrimenti ritorna false
And oppure &&
Se entrambe le espressioni sono vere, ritorna true
altrimenti ritorna false
Not oppure !
È l’operatore di negazione. Ritorna true quando
l’espressione è falsa e false quando l'espressione è vera
Ordine di applicazione degli operatori logici:
Operatore logico 'And'
Operatore logico 'Or'
Not (!) può andare dovunque
4.6 Php – Operatori logici
Esempi di uso degli operatori logici
10 > 8 And 7 < 6; // falso, perché la prima condizione è vera ma la seconda è falsa;
10 > 8 && 7 < 6
10 > 8 Or 7 < 6; // vero;
10 > 8 || / < 6
9 > 5 And 5 == 5.0; // vero, entrambe le condizioni sono vere;
9 > 5 And 5 === 5.0; // falso
!9 > 5 // falso
5 Php – Strutture di controllo e cicli
Strutture di controllo
Strutture di controllo altro aspetto fondamentale della programmazione
Rappresenta la possibilità di eseguire operazioni diverse, una o più volte,
valutando determinate condizioni.
5.1 Php – Strutture di controllo e cicli
Strutture di controllo
L'istruzione If è una di questa e ci permette di eseguire o non eseguire certe
porzioni di codice. La sua struttura completa è:
If (<condizione>) {
<codice>
}
[elseIf {
}
La presenza di parentesi [ … ] indica che il
codice è opzionale
…
else {
}]
Appena è verificata una delle condizioni, se ne esiste più di una, esce dall'If
5.2 Php – Strutture di controllo e cicli
Strutture di controllo
Operatore ternario è una forma sintetica di If … else, permette di risparmiare
codice
$risultato = (condizione da verificare) ? ‘valore per true’ : ‘valore per false’;
5.3 Php – Strutture di controllo e cicli
Strutture di controllo
L'istruzione switch può essere utilizzata come alternativa alla if per selezionare
opzioni da un elenco di possibilità quando sono molte rende il codice più
compatto
switch (<condizione>) {
case (<valore 1>):
<codice>
[break; o exit / die;]
case (<valore 2>):
<codice>
[break; o exit / die;]
......................
default:
<codice>;
[break; o exit / die;]
}
5.4 Php – Strutture di controllo e cicli
Strutture di controllo
L’istruzione switch nel linguaggio Php, al contrario di altri linguaggi, può
esaminare anche etichette non numeriche
Con switch il codice prosegue anche dopo che la condizione è verificata per
uscire dal ciclo usare l’istruzione break che interrompe il ciclo e prosegue
nell’esecuzione di ciò che è scritto nella pagina .php
Nel caso si presentasse una condizione in cui si deve ignorare tutto il codice
scritto dopo switch , usare le istruzioni exit oppure die che interrompono
completamente l’esecuzione della pagina, qualunque cosa scritta dopo il ciclo.
5.5 Php – Strutture di controllo e cicli
Cicli
Presenti in tutti i linguaggi di programmazione, ci permettono di eseguire più volte
la stessa operazione su i dati con condizioni ben precise.
Sono di 3 tipi:
Ciclo WHILE
Ciclo DO WHILE (variante del precedente)
Ciclo FOR
5.6 Php – Strutture di controllo e cicli
Cicli WHILE
WHILE Nella sua forma generale è:
$variabile=inizializzazione_valore_variabile;
While ($variabile "operatore_di_confronto" valore) {
<codice>
incremento_valore_variabile
}
È una specie di If ripetuto più volte
Il ciclo non ci permette di definire l'intervallo di validità della variabile quindi
Il valore viene inizializzato prima del ciclo;
Il valore viene incrementato durante il ciclo.
Il ciclo termina quando la condizione fra parentesi () diventa false
Il ciclo potrebbe non essere mai eseguito se la condizione è false fin
dall'inizio
5.7 Php – Strutture di controllo e cicli
Cicli DO … WHILE
DO … WHILE Nella sua forma generale è:
$variabile=inizializzazione_valore_variabile;
do {
<codice>
}
while ($variabile "operatore_di_confronto" valore)
Si differenzia dal precedente perché, anche se non è mai verificata la
condizione tra parentesi, mi fa vedere il valore che assume la variabile al
termine del ciclo.
5.0 Php – Strutture di controllo e cicli
Cicli FOR
È quello più usato e la sua forma generica è la seguente:
codice ….
for (valore_iniziale; valore_finale; incremento/decremento) {
risultato
}
codice …
For parola chiave
( …. ) istruzioni per definire il ciclo (step)
la prima è eseguita una sola volta;
la terza ad ogni step
la seconda è valutata prima di ogni step. Quando risulta false, il ciclo termina
e il controllo passa all'istruzione immediatamente dopo il ciclo for
{ …. } istruzioni ripetute per ogni step
5.9 Php – Strutture di controllo e cicli
Cicli FOR
Attenzione a non generare un ciclo infinito (loop), in cui il ciclo non raggiunge mai
una via d’uscita. In questo caso, infatti, lo script rieseguirebbe il nostro ciclo
all’infinito.
In alcuni casi, un errore di questo genere potrebbe costringerci a forzare la
chiusura del programma o addirittura a eseguire il restart del Server Web anche se
in PhP, questo di solito non succede, in quanto gli script PHP hanno un limite di
tempo per la loro esecuzione, oltre il quale si arrestano (30 sec) e che si imposta
nel file php.ini.
6 Php – Array
Array
Abbiamo già introdotto gli array come "tipo di dato complesso che contiene più
valori di un'unica variabile"
Gli array sono di 2 tipi:
Numerico si accede al valore (elemento) attraverso l'indice o posizione (da
0 a N-1 se N è il numero di elementi dell'array) dell'elemento stesso ;
associativi. oltre che attraverso l'indice, si può accedere al valore
(elemento) attraverso una "chiave" associata all'elemento stesso.
Possiamo esaminare il contenuto dei dati in diversi modi come esposto
nell'esempio citato. In particolare introduciamo un nuovo tipo di ciclo ideato
apposta per gli array: FOREACH
Foreach (array as nome_variabile) {
codice
}
7 Php – Funzioni
Definizione
Una funzione è un insieme di istruzioni che hanno lo scopo di eseguire
determinate operazioni.
La praticità delle funzioni sta nel fatto che ci consentono di non dover
riscrivere tutto il codice ogni volta che abbiamo la necessità di eseguire
quelle operazioni comuni: ci basta infatti richiamare l'apposita funzione,
fornendole eventuali parametri per la sua esecuzione.
Le funzioni possono essere interne a Php oppure definite dall'utente. In
entrambi i casi, il modo di definirle e utilizzarle è lo stesso:
function nome_funzione([p1,p2,…,pN]) {
<codice>
return $risultato
}
nome_funzione ([p1,p2,…,pN]) se non ritorna alcun valore
$variabile = nome_funzione([p1,p2,…,pN]) se ritorna un valore;
dove p1,…, pN sono i parametri. Il fatto che siano presentati tra
parentesi indica che sono opzionali
7.1 Php – Funzioni
Funzioni definite dall'utente
I parametri scritti fra "parentesi tonde" sono le variabili passate alla funzione:
possono essere passati per valore (non possono essere cambiati) o per
riferimento (possono essere cambiati)
È possibile assegnare un valore predefinito ad un parametro di modo che, in
assenza di valore, venga utilizzato questo.
È possibile passare anche un array come parametro.
Le funzioni possono eseguire solo delle operazioni oppure restituire un valore in
questo caso bisogna inserire l’istruzione return;
7.2 Php – Funzioni
Funzioni definite dall'utente
Porzioni di codice scritte dall'utente per:
utilizzarle in più punti del programma;
per rendere il codice più leggibile e quindi manutenibile
il modo migliore è usare l'istruzione include
Possono essere chiamate con una qualsiasi combinazione di caratteri alfanumerici
e l’undescore ma non con un numero;
È sconsigliato l’uso di caratteri speciali perché creano problemi con alcuni S.O.
7.3 Php – Funzioni
Funzioni definite dall'utente
È possibile realizzare funzioni che non mostrano solo il risultato a video a seconda
dell'input ma eseguono una o più azioni e ne mostrano il risultato.
Esempio di funzione (a 2 parametri) che ritorna un risultato:
function nome_funzione(parametro1, parametro2)
{
<codice>
return $variabile;
}
Per richiamarla scrivo:
$parametro1=valore1;
$parametro2=valore2;
$risultato=nome_funzione (parametro1,parametro2);
echo $risultato;
7.4 Php – Funzioni
Include e Require
Sono 2 istruzioni che permettono di includere file esterni, ovvero copiare il loro
contenuto completo dentro il file che lo richiede
Sintassi:
include “percorso_file/nome_file“; oppure include (‘‘percorso_file/nome_file“);
require “percorso_file/nome_file“; oppure require (‘‘percorso_file/nome_file“);
I due comandi producono il medesimo risultato. Unica differenza consiste nella
gestione di eventuali errori: nel caso in cui il file da includere non si
esiste, include() genererà un errore di tipo warning (non blocca l’esecuzione dello
script) mentre require() genererà un errore di tipo fatal error (blocca di fatto
l'esecuzione dello script).
E' da segnalare l'esistenza di due varianti, include_once e require_once. La loro
funzione e sintassi è identica alle precedenti con l'unica differenza che prima di
includere il file verificano che questo non sia già stato precedentemente incluso
nella pagina: in questo caso non fanno nulla.
7.5 Php – Funzioni
Funzioni interne generiche
Sono funzioni che agiscono sulle variabili in generale per verificarne un
particolare attributo (tipicamente tipo, stato e valore) ritornando True o
False a seconda del caso
Is_numeric($valore)
Is_bool($valore)
Is_null($valore)
Meritano una menzione particolare
empty ($valore)
Isset($valore)
Per settare un tipo
Settype($valore,tipo) dove tipo è passato come stringa tra apici o
doppie virgolette
7.6 Php – Funzioni
Funzioni interne per stringhe – parte 1
Sono la classe di funzioni più numerose interne a PhP ed altre ancora possono
essere costruite dall'utente con una loro combinazione. Vediamo le più usate,
rimandando alla documentazione in linea (www.php.net) per tutte le altre
strlen() restituisce la lunghezza di una stringa, spazi compresi;
trim(), ltrim(), rtrim() rispettivamente eliminano spazi vuoti a destra e sinistra, solo
sinistra e solo a destra; strlen() applicata prima o dopo di essa produce risultati diversi;
strtolower(), strtoupper() trasforma una stringa rispettivamente tutto in minuscolo o
tutto in maiuscolo;
substr() estrae una stringa da un'altra stringa;
strpos() trova la posizione di una stringa all'interno di un'altra ritorna un numero
str_replace() sostituisce una stringa dentro un'altra o anche un carattere dentro un
altro
7.7 Php – Funzioni
Funzioni interne per stringhe – parte 2
htmlspecialchars () converte caratteri speciali <,>,& e " nell'equivalente HTML;
addslashes/stripslashes sostituiscono rispettivamente "l'apostrofo" con "\'" e
viceversa. Molto utile nel caso delle query quando sono presneti stringhe di testo con
apostrofi all’interno (esempio L’Aquila);
explode() trasforma una stringa in un array. Accetta due parametri obbligatori:
il carattere separatore nella stringa;
la stringa;
Possiede la sua inversa, implode(), come funzione degli array.
7.8 Php – Funzioni
Funzioni interne per i Numeri – parte 1
Per manipolare i numeri occorre anzitutto assicurarci che questi siano tali. tre sono le
funzioni di controllo (ritornano true o false):
is_numeric(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero
(intero, decimale o negativo). può essere utilizzata anche con stringhe contenenti solo numeri;
is_int(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero intero.
può essere utilizzata anche con stringhe contenenti solo numeri;
is_float(): accetta come parametro una variabile di qualsiasi tipo e verifica se è un numero con
decimali. Nel caso di un numero interno, tale funzione ritorna false.
7.9 Php – Funzioni
Funzioni interne per i Numeri – parte 2
intval(): fondamentale soprattutto nell'interazione con i database, trasforma qualsiasi tipo di
variabile in un intero
se si tratta di un numero decimale lo arrotonda a intero;
se si tratta di un numero negativo lo trasforma in positivo;
se si tratta di altro lo trasforma in 0 (zero).
È utilizzata soprattutto nell'ambito delle query su MySql se occorre eseguire una query su
un campo numerico e di tipo intero di MySql, tale funzione ci garantisce che il parametro
immesso nella query sarà effettivamente un intero.
max() e min(): restituiscono un massimo e un minimo di una serie di valori numerici contenuti
dentro variabili singole o array. Le stringhe coinvolte in tale funzioni assumeranno come valore
0 (zero).
7.10 Php – Funzioni
Funzioni interne per i Numeri – parte 3
rand(): genera numeri casuali tra val1 e val2;
ceil(), floor(), round(): arrotondamento dei numeri in virgola mobili in interi.
ceil() arrotonda per eccesso;
floor() arrotonda per difetto;
round() per difetto o per eccesso a seconda delle cifre scartate. Possiede 3 parametri
di cui:
il primo è obbligatorio e rappresenta il numero da arrotondare;
il secondo è facoltativo e rappresenta il numero di cifre da mantenere dopo la
virgola (default = 0);
il terzo è facoltativo e gestisce l'arrotondamento dell'ultima cifra nel caso questa sia
pari a 5 il valore è espresso tramite delle costanti (PHP_ROUND_HALF_UP e
PHP_ROUND_HALF_DOWN)
7.11 Php – Funzioni
Funzioni interne per i Numeri – parte 4
number_format() formatta un numero e restituisce una stringa che non è più utile per
operazioni matematiche in pratica il suo uso è solo estetico, di stampa a video.
Accetta 4 parametri ma solo a coppie di due (2):
La prima coppia indica il numero da formattare e i numero di decimali (omesso corrisponde
a nessun decimale e la stringa risultante rappresenta un numero intero);
Il terzo indica il separatore tra parte intera e decimale (default = il punto);
Il quarto il separatore delle migliaia (default = la virgola)
7.12 Php – Funzioni
Funzioni interne per Array
Visto che abbiamo appena parlato di Array, cominciamo con esse.
count(array) ritorna il numero di elementi di un array;
array_reverse(array) inverte gli elementi di un array. Ha un secondo parametro di tipo
booleano: se vogliamo mantenere l'associazione originale chiave-valore dobbiamo
impostarlo su true
sort() ordina in maniera crescente (array semplici);
rsort() ordina in maniera decrescente (array semplici);
ksort() come sort() ma secondo le chiavi (array associativi);
krsort() come rsort() ma secondo le chiavi (array associativi);
asort() come sort() ma secondo i valori (array associativi);
arsort() come rsort() ma secondo i valori (array associativi);
array_search() cerca un valore in un array, se lo trova mostra la chiave altrimenti
ritorna False;
in_array() cerca un valore in un array, se lo trova ritorna True altrimenti False
end() punta all'ultimo elemento dell'array
implode() trasforma un array in un stringa
7.13 Php – Funzioni
Funzioni interne per Date
time() restituisce la data in formato unix timestamp. È un numero intero
rappresentante i secondi intercorsi dal 1 gennaio 1970 al momento attuale. Valori
precedenti sono espressi come numeri negativi.
date() restituisce la data nel formato desiderato e, quindi, è impiegata,
prevalentemente, solo ai fini di visualizzazione della data. Accetta due parametri: il
primo è una stringa (il formato di visualizzazione); il secondo, opzionale, è il
timestamp (default = timestamp attuale la data attuale);
mktime(par1,par2,par3,par4,par5,par6)
(dove
da
par1
a
par6
sono
rispettivamente ore, minuti, secondi, giorno, mese e anno. L'assenza di uno di questi
genera errore) serve ad impostare il timestamp di una data passata o futura.
8 Php – Accesso ai file (parte 1)
Php, dalla versione 5, offre la possibilità di accedere ai file esterni.
Il primo gruppo di istruzioni permette la manipolazione dei file
file_exists(nome_file) verifica se il file esiste ritorna True/False
file_get_contents(nome_file) carica un file in una stringa e ne fa l’output a video.
file(nome_file) legge rigo per rigo di un file restituendo un array composto da tanti
elementi quante sono le righe del file in oggetto;
filesize(nome_file) ritorna il numero di caratteri del file;
copy(file_origine,file_destinazione) copia un file in un altro file ritorna True/False;
rename(file_origine, file_destinazione) rinomina un file ritorna True/False;
unlink(nome_file) cancella il file ritorna True/False.
8.1 Php – Accesso ai file (parte 2)
Il secondo gruppo di istruzioni permette la scrittura/lettura dei file
fopen ($filename, $mode, [,]) apre un file con diverse modalità. Se l’apertura riesce
restituisce l’handle del file (un numero intero > 0 diverso per ogni file che si apre) altrimenti
restituisce False:
r apre il file in sola lettura. Se il file non esiste, dà un errore di tipo Warning;
r+ apre il file in lettura e scrittura . Se il file non esiste, dà un errore di tipo Warning;
w apre il file in sola scrittura cancellandone il contenuto. Se il file non esiste, tenta di crearlo;
w+ apre il lettura e scrittura cancellandone il contenuto esistente. Se il file non esiste, tenta di
crearlo.
a apre il file modalità scrittura di tipo append . Se il file non esiste tenta di crearlo;
a+ apre il file in modalità lettura e scrittura di tipo append . Se il file non esiste tenta di crearlo
fwrite ($filename, $testo_da_scrivere [, $lunghezza_testo_da_scrivere) scrive una stringa in
un file. Restituisce il numero di byte scritti oppure False generando un errore di tipo Warning.
fclose($file) chiude il file chiudere sempre i file per non lasciarli appesi in memoria
9 Php – I FORM
Sono presenti in tutti i siti Web
In genere interagiscono con l'utente attraverso l'uso di controlli caricati
dinamicamente da codice Php che attinge i dati da un qualsiasi contenitore (ad
esempio un database).
Tre cose dobbiamo vedere: i controlli, il loro caricamento dinamico e l'invio dei dati
immessi all'utente o sotto forma di pagina di riepilogo oppure via mail
Sono delimitati dal TAG <form> … </form> che possiede 2 attributi fondamentali
che ne caratterizzano il comportamento:
Action una volta riempito il form con i dati, quale pagina li dovrà elaborare
e farne l'uso per cui il form è stato progettato ?
Method con quale metodo devono essere spediti i dati da una pagina
all'altra ?
10 Php – Le variabili $_GET, $_POST
Php fornisce 4 variabili globali di sistema per il passaggio dei dati da una pagina
all'altra oppure per memorizzare informazioni importanti per l'utente:
$_GET spedisce in chiaro le informazioni e queste si possono leggere nella URL
della pagina. È consigliato solo nel caso di informazioni non sensibili. Questa
tecnica è usata nei link per inviare informazioni anche complesse da una pagina
all'altra: si chiama querystring..
Le informazioni viaggiano associate ad una variabile nella forma var1=val1;
Più coppie di informazioni sono separate dal simbolo & var1=val1&var2=val2&….
$_POST è quella più usata con i FORM Html. È più discreta, i valori viaggiano
nascosti alla vista degli utenti.
Il ciclo di vita di queste variabili è limitato alla pagina .php: se si passa in una
pagina dove non sono richiamate, vanno perse.
10.1 Php – Le variabili $_COOKIE e $_SESSION
$_COOKIE scrive le informazioni in un file. Il ciclo di vita di questa variabile è stabilito da chi
scrive il codice, ma l'utente può anche ridurlo a 0 cancellando periodicamente i cookies tramite
qualche opzione del browser .
setcookie(nome_cookie,
valore_assegnato_cookie,
durata_cookie)
l’ultimo
parametro
rappresenta un caso di utilizzo del timestamp tramite la funzione time().
Per i cookies in Firefox guardare in Strumenti Opzioni Privacy sezione Cronologia
$_SESSION a differenza dei cookie, le sessioni non scrivono nulla sul computer del utente,
ma operano sul server web creando degli specifici files dove vengono salvati alcuni dati
importanti relativamente alla sessione di navigazione del nostro utente;
una volta che la sessione è terminata il file con i dati della sessione stessa verrà eliminato;
una sessione termina nel momento in cui l'utente chiude il browser (o in un diverso
momento eventualmente specificato nelle impostazioni del server o nel codice
dell'applicazione).
session_star(); inizializza la sessione (va richiamata in tutte le pagine)
$_SESSION[‘nome_variabile_di_sessione’]; definisco la variabile di sessione
unset($_SESSION[‘nome_variabile_di_sessione’); cancello la variabile di sessione
session_unset(); cancello tutte le variabili di sessione
session_destroy(); distruggo tutte le sessioni rimaste appese, se esistono
11 Php e MySql
In questa sezione conclusiva vedremo insieme come è possibile far interagire le
nostre pagine PHP con i database MySql.
Ricordiamo che PHP è in grado di connettersi a quasi tutti database server
presenti sul mercato (PostgreSql, Oracle, Microsoft Access & Microsoft Sql Server,
Sybase, ...) anche se MySql è quello con cui interagisce nativamente.
Tre librerie sono a disposizione:
mysql_based la prima realizzata, utilizzata nella programmazione procedurale
(utilizzabile solo con MySql)
mysqli_based la seconda uscita, utilizzata nella programmazione ad oggetti ma, per
alcune sue funzionalità, anche in quella procedurale (utilizzabile solo con MySql)
PDO (Php Data Object) l’ultima uscita (dalla versione di Php 5.1 in poi) e utilizzabile solo
con la programmazione orientata agli oggetti ma con tutti i database.
Nel corso base vedremo solo quella mysql_based
11.1 Php e MySql
Le istruzioni per far lavorare Php con MySql sono in tutto 4:
mysql_connect per connettersi al server di database
mysql_select _db per connettersi al database prescelto
mysql_query per eseguire query di selezione, di inserimento, di
aggiornamento e di cancellazione.
mysql_query possiede dei metodi (azioni) per gestire le query di selezione
mysql_close per chiudere la connessione al server. È importante acquisire
una prima regola fondamentale: non lasciare mai connessioni aperte. Una
connessione si apre (idealmente) in testa alla pagina e si chiude (idealmente)
in fondo alla pagina, quando non serve più.
Le prime due istruzioni, dato il loro ripetersi in ogni pagina .php del sito, conviene
inserirle in un file esterno da richiamare tramite l’istruzione
include (‘nome_file’);
11.2 Php e MySql: mysql_connect
Sintassi
$variabile = mysql_connect(server, utente, password);
server nome o indirizzo IP del server di database. In locale è ‘localhost’ oppure
127.0.0.1
utente nome dell’utente abilitato nel server di database. Il default è ‘stringa
vuota’ o root;
password password dell’utente. Il default è ‘stringa vuota’
Esempio di connessione:
$con_db = mysql_connect(‘127.0.0.1’, ‘root’, ‘’) or die (‘Errore nella connessione al server’);
11.3 Php e MySql: mysql_select_db
Sintassi
$variabile = mysql_select_db(database, server);
database nome del database a cui connettersi;
server nome della connessione al server.
Esempio di selezione (connessione) ad un database:
$con_db = mysql_connect(‘127.0.0.1’, ‘root’, ‘’) or die (‘Errore nella connessione al server’);
$sel_db = mysql_select_db(‘videoteca’, $con_db);
11.4 Php e MySql: esempio di file da includere
Nome del file connessione.php
Listato:
<?php
$a_capo = ‘<br />\n’;
$host=‘254.197.31.44';
$database=‘prova';
$username=‘pippo';
$password=‘pluto';
// Connessione al server
$con_db = mysql_connect($host,$username,$password) or die ("Server $host non trovato $a_capo");
// Seleziono il DB
$sel_db = mysql_select_db($database,$con_db) or die ("Impossibile accedere al database $database $a_capo");
?>
11.5 Php e MySql: mysql_close
Sintassi
mysql_close(server);
server nome della connessione al server.
Esempio di sconnessione ad un server di database:
mysql_close($con_db);
11.6 Php e MySql: esecuzione di query (parte 1)
Sintassi
$variabile = mysql_query("sintassi Sql", "server");
Sintassi Sql SELECT … FROM … INNER JOIN oppure
INSERT INTO tabella …. Oppure
UPDATE tabella SET ……
server nome della connessione al server.
Esempio di query di selezione:
$mio_sql = "SELECT * FROM nome_tabella WHERE campoX = valoreX";
$ris = mysql_query($mio_sql, con_db) or die ("Errore nella query");
A questo punto mysql_query possiede dei metodi (azioni) per esaminare il risultato
della query e mostrare i dati a video
11.7 Php e MySql: query di selezione
Esempio di query di selezione:
$mio_sql = "SELECT * FROM nome_tabella […];
$ris = mysql_query($mio_sql, con_db) or die ("Errore nella query");
4 metodi per esaminare il risultato della query:
mysql_num_rows($risultato_query); ritorna il numero di record della query;
mysql_fetch_row() recupera il contenuto dei records trovati restituendo una array
semplice contenente i valori di ogni campo che possiamo poi richiamare specificando il
relativo indice nella matrice dell’array;
mysql_fetch_assoc() alternativo al precedente restituisce una array contenente i valori
di ogni campo riscontrato nel recordset che potremo poi richiamare specificando il
relativo nome del campo nella matrice dell’array
mysql_fetch_array() alternativo ai due precedenti, supporta indistintamente entrambe
le tecniche di chiamata è quello più usato per la sua flessibilità
Per richiamare i dati si usa il ciclo While { «condizione»} dove mysql_fetch_X
include già l’incremento della variabile.
11.8 Php e MySql: query di inserimento, modifica e cancellazione
Conosciute anche con il nome di QUERY DI COMANDO
Sintassi:
$variabile = mysql_query("sintassi Sql", "server");
sintassi Sql INSERT INTO … oppure UPDATE … oppure DELETE
server nome della connessione al server.
Esempio di query di comando:
$mio_sql = "UPDATE nome_tabella SET campo1 = valore1 ";
$ris = mysql_query($mio_sql, con_db) or die ("Errore nella query");
12.1 Php – Upload di file (parte 1)
Altra operazione molto comune è l'upload dei file. È bene tenere presente alcuni
valori:
upload_max_filesize 2Mb (è un parametro di php.ini);
impostare nel TAG <form> l'attributo enctype = “multipart/form-data”
tramite la variabile globale $_FILES, sono accessibili informazioni sul file inviato:
$_FILES["userfile"]["name"]: nome del file caricato;
$_FILES[" userfile "]["type"]: tipo di file caricato (in formato MIME type);
$_FILES[" userfile "]["size"]: dimensione del file caricato;
$_FILES[" userfile "]["tmp_name"]: percorso e il nome del file temporaneo sul
server;
$_FILES[" userfile "]["error"]: un codice numerico compreso fra 0 e 8 indicante il
tipo di errore che si è verificato, pari a 0 in assenza di errore.
dove « userfile » è il nome del controllo che esegue l’upload.
Nota: il file transita prima dentro la cartella temporanea del server (nel nostro caso
www/tmp e poi spostato dove decidiamo noi)
12.1 Php – Upload di file (parte 2)
Il controllo sull’upload nella cartella www/tmp viene fatto dalla funzione
is_uploaded_file ritorna un valore booleano a seconda dell’esito dell’operazione
Infine il file viene spostato dalla cartella www/tmp in quella finale usando la
funzione move_uploaded_file(tmp_name, final_name) ritorna un valore
booleano a seconda dell’esito dell’upload
Errori possibili
Possiamo e dobbiamo inoltre controllare che la cartella dove vogliamo fare l'upload
esiste (is_dir) e possieda i diritti di scrittura (is_writable)
su Windows Xp, in locale,
da un errore del tipo Strict Standars mentre funziona
perfettamente online.
su Windows 7 funziona perfettamente sia in locale che online.
12.1 Php – Upload di file (parte 3)
È possibile utilizzare direttamente le proprietà dell’Ftp (File Transfert Protocol) per
effettuare l’upload di un file con le funzioni:
ftp_connect(host[,port,timeout]) dove host è il nome del dominio (www.miodominio.ext)
oppure l’IP del dominio (aaa.bbb.ccc.ddd), port è la porta usata (default = 21) e timeout è il
tempo massimo per eseguire l’operazione (default = 90 secondi) ritorna un valore True o
False
viene
associato
ad
una
variabile
(ad
esempio
$my_connection
=
ftp_connect(…,…,…);)
ftp_login(ftp_connect, username, password) dove ftp_connect è il parametro precedente,
username e password forniscono l’account di accesso ritorna un valore True o False
viene associato ad una variabile (ad esempio $my_login = ftp_login(…,…,…);)
ftp_put(ftp_connect,remote_file,local_file,mode[,startpos]) dove ftp_connect è il paramentro
precedente, renote_file indica cartella e nome del file in remoto, local_file indica il file che
voglio caricare, mode indica se il file è binario o ascii e startpos, opzionale, indica da che
punto (byte o carattere) iniziare il caricamento (0 = default) ritorna True o False viene
associata ad una variabile (ad esempio $upload = ftp_put(…)):
12.2 Php – Paginazione dei risultati (1)
Due approcci possibili: usando l’istruzione Limit offset, record presente nel
linguaggio SQL oppure non usandola.
La prima prevede 2 query sul database
la prima per calcolare il totale dei record senza il Limit
la seconda per estrarre i record interessati
ovviamente, a parte il Limit, le due query devono essere identiche anche nelle
condizioni.
12.2 Php – Paginazione dei risultati (2)
Prima query mi dà il totale dei record ($tot_rec)
SELECT COUNT(campoX) FROM tabella [condizione1, condizione2, .., condizioneN ]
Numero totale di record $tot_rec
Record per pagina $pag_rec = 10 (il secondo parametro di Limit)
Totale pagine $tot_pag = ceil ($tot_rec / $pag_rec) mi interessano solo numeri interi
Pagina corrente $current_pag. Presupponendo che mi sto muovendo tra le pagine usando
funzione di sistema $_GET[‘nome_variabile’]
If ($_GET[‘pag’]) {$current_pag = $_GET[‘pag’];}
else {$current_pag = 1;}
oppure con l’operatore ternario
$current_pag = ($_GET[‘pag’]) ? $_GET[‘pag’] : 1;
Il primo parametro di LIMIT (offset = il record da cui partire) è
$primo = ($current_pag – 1) * $pag_rec;
12.2 Php – Paginazione dei risultati (3)
Seconda query estraggo i record da $primo a $pag_rec
$mio_sql = SELECT * FROM tabella [condizione1, condizione2, …, condizioneN ]
LIMIT $primo, $pag_rec
// ciclo
While { $ris = mysql_fetch_assoc($mio_sql, $mia_connessione);
echo … record 1
echo … record 2
…
echo … record 10
}
12.2 Php – Paginazione dei risultati (4)
// paginazione dei record
$paginazione = "["
for($i = 1; $i <= $tot_pag; $i++) {
if ($i == $current_pag) {
$paginazione = $paginazione . $i . " ";
}
else {
$paginazione .= "<a href=pippo.php"?page=$i">$i</a>";
}
}
$paginazione = $paginazione . "]"
12.3 Php – Inviare mail
PHP mette a disposizione la funzione mail().
È possibile la codifica MIME quindi permette quindi l'invio di messaggi anche
molto complessi, con allegati, immagini ecc...
È una funzione di tipo booleano se l'invio ha successo ritorna true altrimenti
ritorna false
Sintassi della funzione:
mail (string $to, string $subject, string $message [, string $additional_headers, string $additional_parameters])
nei $to, utenti multipli sono separati da virgola;
negli $additional_headers sono contenuti From, CC e BCC, MIME, TIPO, CODIFICA e SET
CARATTERI separati dal CRLF (in Php è \r\n);
negli $additional_parameters sono contenuti altri parametri meno importanti
Esempi nella cartella Email
prova-mail.php invio mail in forma semplice
mail-testo.php invio mail in tramite un form
12.4 Php – Criptare i dati
PHP mette a disposizione due funzioni per criptare i dati
md5 (string, raw)
string è la stringa di testo da criptare
raw è il modo di criptare valore booleano default = False cripta in 32 caratteri
formato esadecimale mentre True cripta in 16 caratteri formato binario
INSERT INTO tabella (campo_da_criptare) VALUES (md5(stringa_da_criptare));
SELECT
campo1,
…,
campoN
FROM
tabella
WHERE
campo_criptato
=
md5(stringa_da_criptare)
sha1
string è la stringa di testo da criptare
raw è il modo di criptare valore booleano default = False cripta in 40 caratteri
formato esadecimale mentre True cripta in 20 caratteri formato binario
INSERT INTO tabella (campo_da_criptare) VALUES (md5(stringa_da_criptare));
SELECT
campo1,
…,
md5(stringa_da_criptare)
campoN
FROM
tabella
WHERE
campo_criptato
=