• Non ci sono risultati.

Il linguaggio PHP Parte I – Introduzione Paolo Milazzo

N/A
N/A
Protected

Academic year: 2022

Condividi "Il linguaggio PHP Parte I – Introduzione Paolo Milazzo"

Copied!
31
0
0

Testo completo

(1)

Il linguaggio PHP

Parte I – Introduzione

Paolo Milazzo

Dipartimento di Informatica, Universit`a di Pisa http://www.di.unipi.it/∼milazzo

milazzo di.unipi.it

A.A. 2010/2011

(2)

Sommario

1 Introduzione a PHP

2 Configurazione di PHP

3 La sintassi del linguaggio Variabili ed espressioni Comandi

Stringhe Array Funzioni

Inclusione di file

4 PHP e i form HTML

(3)

Introduzione a PHP (1)

PHP `e un linguaggio di programmazione “general-purpose” che per`o viene utilizzato in pratica solo per creare siti web dinamici

PHP `e un acronimo ricorsivo che sta per “PHP: Hypertext Preprocessor”

E’ un linguaggio interpretato, non compilato

E’ un linguaggio a cui possono essere aggiunte estensioni che realizzano funzionalit`a specifiche

I e.g. aspetti di sicurezza/crittografia, interazione con altri siti web, ecc...

(4)

Introduzione a PHP (2)

PHP viene eseguito (interpretato) da un server web

I `e un linguaggio di scripting server-side

Il codice PHP viene usato per generare dinamicamente i documenti HTML che il client deve ricevere e visualizzare nel browser

I In un sito web statico (non-PHP) il documento HTML viene preso dal file system e inviato direttamente al client

I In un sito web dinamico (tipo PHP) i file del web server sono passati all’interprete PHP che genera il documento HTML da inviare al client Quindi: l’output di un “programma” PHP `e un documento HTML Il codice PHP pu`o fare quello che gli pare per creare il documento HTML

I Ad esempio: accedere a un database, consultare altri siti web, ecc....

(5)

Introduzione a PHP (3)

I file PHP sono strutturati come un documento HTML

I ma contengono sezioni di codice PHP delimitate da <?php e ?>

L’interprete PHP effettua il parsing del file (lo scandisce) e sostituisce le sezioni di codice PHP con il codice HTML risultante dalla sua esecuzione

Tutto ci`o che `e al di fuori del tag <?php .... > viene ignorato dall’interprete e dato in output cos`ı com’`e

Solitamente l’estensione usata per i file PHP `e .php

(6)

Introduzione a PHP (4)

Un semplice esempio di file PHP (il solito Hello World):

< html >

< head > < title > H e l l o W o r l d in PHP </ title > </ head >

< body >

<? php

p r i n t " <p > Hello , W o r l d ! </ p > " ;

p r i n t " <p > Q u e s t o e ’ un f r a m m e n t o di c o d i c e PHP .

N o t a che fa p a r t e di un d o c u m e n t o H T M L s t a n d a r d ! </ p >;

? >

</ body >

</ html >

E il corrispondente output HTML generato dall’interprete PHP:

< html >

< head > < title > H e l l o W o r l d in PHP </ title > </ head >

< body >

<p > Hello , W o r l d ! </ p >

<p > Q u e s t o e ’ un f r a m m e n t o di c o d i c e PHP .

N o t a che fa p a r t e di un d o c u m e n t o H T M L s t a n d a r d ! </ p >

(7)

Introduzione a PHP (5)

In realt`a esistono due alternative per “scrivere” l’output in PHP:

echo e print

I echo `e un comando nativo del linguaggio (forse pi`u veloce di print)

I print `e una funzione di libreria, quindi un’espressione (pu`o essere usata in espressioni condizionali: (a>b?print(a):print(b)) L’uso delle parentesi attorno al messaggio da stampare `e opzionale

(8)

Introduzione a PHP (6)

E’ importante sottolineare che l’output di PHP `e un documento HTML

Il client ricever`a tale output senza vedere il codice PHP che lo ha originato

In generale il client non percepisce la differenza tra un sito web statico e un sito web dinamico

I in entrambi i casi il client riceve un documento HTML e lo visualizza nel browser

(9)

Configurazione di PHP (1)

L’interprete PHP pu`o essere configurato in maniera molto dettagliata

I Elevato numero di opzioni settabili e possibili estensioni I settaggi di default sono specificati nel file php.ini

I la directory in cui si trova questo file dipende dall’istallazione La configurazione corrente di php su un web server pu`o essere visualizzata chiamando la funzione PHP php info()

L’output di questa funzione `e un documento HTML (intero)

contenente una tabellona che riassume tutte le opzioni ed estensioni configurate

Utile per il mantenimento di un’installazione di PHP e per il debugging di applicazioni

I tipicamente si usa appena si `e installato PHP (o un’estensione) sul proprio computer per vedere se `e tutto OK

(10)

Configurazione di PHP (3)

<? php

p h p _ i n f o ();

? >

(11)

Overview

La sintassi di PHP `e simile a quella di C,C++ e Java (ma senza tipi) Tutto il codice PHP va messo all’interno di tag <?php .... ?>

I il tag <?php .... ?> pu`o essere usato pi`u volte all’interno dello stesso file

I tutto ci`o che si trova al di fuori di tali tag viene dato in output cos`ı com’`e

Come C,C++ e Java:

I I comandi sono separati da ;

I PHP `e case-sensitive (distingue tra maiuscole e minuscole) PHP supporta commenti a singola linea e multilinea con la stessa sintassi di C++ e Java:

<? php

// Q u e s t o e ’ un c o m m e n t o che v e r r a ’ t r a s c u r a t o // d a l l ’ i n t e r p r e t e PHP . . . .

/* . . . . t a n t o q u a n t o q u e s t o c o m m e n t o , che puo ’ o c c u p a r e t r a n q u l l a m e n t e piu ’ l i n e e

*/

? >

(12)

Le variabili (1)

Come in ogni linguaggio di programmazione imperativo, in PHP si ci sono le variabili

Differentemente dal solito il nome di una variabile deve iniziare con $, seguito da una lettera o un

I Esempi: $username, $color, $i, $ nome....

Non esiste un costrutto di dichiarazione di variabili

I Ossia,non c’e’ bisogno di dichiarare una variabile prima di iniziare a usarla!

I tipi di dato `e come se non esistessero!

I Una variabilepu`o essere assegnata a valori di tipo diverso in momenti diversi

L’operatore di assegnamento di una variabile `e = (come in C,C++ e Java)

(13)

Le variabili (2)

Lo scope di una variabile in PHP `e la pagina stessa

Ogni variabile esiste solo per lo script (pagina) in cui `e definita e alla fine dell’esecuzione viene distrutta

Si pu`o verificare se una variabile `e stata inizializzata con la funzione isset:

i s s e t ( $ v a r )

restituisce true se $var `e stata precedentemente assegnata, $false altrimenti

E’ possibile distruggere una variabile precedentemente assegnata tramite la funzione unset:

u n s e t ( $ v a r )

(14)

Le espressioni

Gli operatori che si possono usare nelle espressioni sono sostanzialemente gli stessi di C/C++/Java:

I Operatori aritmetici: +,-,*,/,%,++,--

I Operatori di confronto: ==,!=,<,>,<=,>=

I Operatori logici: &&,||,!

(15)

Comandi

Anche i comandi del linguaggio sono come in C/C++/Java:

Comandi di selezione:

I if ($trovato) {...}

I if ($trovato) {...} else {...}

I switch ($msg) { case "a" : ...

break;

case "b" : ...

break;

default : ...

}

Comandi di iterazione:

I while (!$trovato) {...}

I do {...} while (!$trovato)

I for ($i=0;$i<10;$i++) {...}

(16)

Le stringhe (1)

In PHP le stringhe possono essere delimitate da virgolette (ossia ") o da apici (ossia ’)

Quando si usano gli apici (’) la stringa viene interpretata letteralemente (esattamente com’e’ scritta)

Quando si usano le virgolette (") le eventuali variabili contenute nella stringa vengono sostituite con il loro valore

// e s e m p i o s u l l ’ uso d e l l e v i r g o l e t t e e d e g l i a p i c i

$ f o o d = " p a t a t e "

$ v i r g o l e t t e = " Io a d o r o m a n g i a r e $ f o o d . " ;

$ a p i c i = ’ Io i n v e c e a d o r o m a n g i a r e $ f o o d . ’ ; p r i n t " <p > $ v i r g o l e t t e </ p > " ;

p r i n t " <p > $apici </ p > " ;

Risultato:

Io adoro mangiare patate.

Io invece adoro mangiare $food.

(17)

Le stringhe (2)

L’operazione di concatenazione di stringhe `e il punto: .

$ n o m e = " M a r i o " ;

$ c o g n o m e = " R o s s i " ;

$ n o m e i n t e r o = $ n o m e . " " . $ c o g n o m e ;

Altre operazioni sulle stringhe includono:

I strlen($s) – restituisce la lunghezza della stringa $s

F strlen("Hello world!") restituisce 12

I strpos($s1,$s2) – restituisce la posizione di $s2 in $s1, o false se non presente

F strpos("Hello world!","world") restituisce 6

I trim($s) – elimina gli spazi all’inizio e alla fine di $s

F trim(" Hello world! ") restituisce "Hello world!"

I ....

(18)

Gli array (1)

PHP offre due tipi di array (in realt`a il secondo `e un caso particolare del primo):

I array numericicome in C/C++/Java che associano valori a indici numerici

chiavi 1 2 3 4

valori ”pippo” ”pluto” ”paperino” ”topolino”

I array associativiche associano valori achiavi, possibilmente non numeriche

chiavi ”a” ”b” ”c” ”d”

valori ”pippo” ”pluto” ”paperino” ”topolino”

Il costrutto per la creazione di un nuovo array `e array(...), e per associare una chiave ad un valore si usa =>:

I Array numerico:

$an = array("pippo","pluto","paperino","topolino");

I Array associativo: $aa = array("a" => "pippo", "b" =>

"pluto", "c" => "paperino", "d" => "topolino");

(19)

Gli array (2)

L’accesso all’array pu`o avvenire tramite l’indice o la chiave:

I echo $an[0];

I echo $aa["a"];

Un array pu`o anche essere creato assegnandone un elemento:

I $an[0] = "pippo";

I $aa["a"] = "pippo";

Nel caso di un array numerico, se non si specifica l’indice il nuovo elemento verr`a aggiunto in coda all’array (l’array `e creato se non esiste):

I $an[] = "pippo";

Per itererare su tutti gli elementi di un array si pu`o usare il costrutto foreach:

I foreach ($myarray as $var) { ... }

I foreach ($myarray as $index => $var) { ... }

che scorre l’array $myarray associando alla variabile $var i valori contenuti (e alla variabile $index le chiavi corrispondenti)

(20)

Gli array (3)

Esempio: mostra i personaggi contenuti in un array in una tabella HTML:

< t a b l e b o r d e r = " 1 " >

< tr > < th > P e r s o n a g g i o </ th > </ tr >

<? php

$ p e r s = a r r a y ( " p i p p o " , " p l u t o " , " p a p e r i n o " , " t o p o l i n o " );

f o r e a c h ( $ p e r s as $ n o m e ) {

p r i n t " < tr > < td > $nome </ td > </ tr >\ n " ; }

? >

</ table >

Con array associativo:

< t a b l e b o r d e r = " 1 " >

< tr > < th > Chiave </ th > < th > P e r s o n a g g i o </ th > </ tr >

<? php

$ p e r s = a r r a y ( " a " = > " p i p p o " , " b " = > " p l u t o " ,

" c " = > " p a p e r i n o " , " d " = > " t o p o l i n o " );

f o r e a c h ( $ p e r s as $ i d x = > $ n o m e ) {

p r i n t " < tr > < td > $idx </ td > < td > $nome </ td > </ tr >\ n " ; }

? >

</ table >

(21)

Gli array (4)

Alcune funzioni utili per lavorare con gli array:

I count($a) – restituisce il numero di elementi di un array (simile al metodo length di Java e JavaScript)

if ( c o u n t ( $ p e r s ) = 0 ) {

e c h o " Errore , l ’ a r r a y e ’ v u o t o ! " ; }

I in array(val, $a) – verifica se il valore val `e presente nell’array

$ n o m e = " p l u t o " ;

if ( i n _ a r r a y ( $nome , $ p e r s ))

e c h o " Il p e r s o n a g g i o $ n o m e e ’ p r e s e n t e n e l l ’ a r r a y " ;

I array merge($a1,...,$aN) – unisce tutti gli array elencati in un unico array

$ p e r s 1 = a r r a y ( " p l u t o " , " p a p e r i n o " );

$ p e r s 2 = a r r a y ( " t o p o l i n o " , " p a p e r o n e " );

$ p e r s = a r r a y _ m e r g e ( $array1 , $ a r r a y 2 );

I sort($a) e rsort($a) – ordinano l’array passato come parametro (modificandolo) in ordine crescente e decrescente

segue...

(22)

Gli array (5)

Alcune funzioni utili per lavorare con gli array:

I explode(sep,str) e implode(sep,$a) – convertono una stringa in un array e viceversa per mezzo di un carattere separatore:

$ p e r s o n a g g i = " p i p p o t o p o l i n o p a p e r i n o p a p e r o n e " ;

$ p e r s _ a r r a y = e x p l o d e ( " " , $ p e r s o n a g g i );

$ p e r s o n a g g i _ v i r g o l a = i m p l o d e ( " , " , $ p e r s _ a r r a y );

e c h o $ p e r s o n a g g i _ v i r g o l a ;

Il risultato `e pippo,topolino,paperino,paperone.

(23)

Funzioni (1)

Come in JavaScript, le funzioni si definiscono tramite la parola chiave function.

Le funzioni possono prevedere argomenti di cui non `e necessario specificare il tipo.

Le funzioni possono prevedere un valore di ritorno da restituire tramite return.

Le variabili usate dentro a una funzione sono locali alla funzione stessa.

Di default una funzione non vede le variabili create fuori della

funzione stessa. Per poter accedere a una variabile “globale” bisogna usare la dichiarazione global dentro la funzione

$a = 22;

f u n c t i o n f () { g l o b a l $a ; e c h o $a ; }

(24)

Funzioni (2)

Esempi di funzioni:

Una funzione che restituisce un valore:

f u n c t i o n add ( $x , $y ) { r e t u r n $x + $y ; }

Una funzione senza valori di ritorno che stampa l’intestazione della pagina web:

f u n c t i o n i n t e s t a z i o n e () {

p r i n t " < h1 > Il mio sito </ h1 >\ n " ; p r i n t " < hr > " ;

p r i n t d a t e ( " l F d , Y " );

p r i n t " < hr > " ; }

Chiamate di funzioni:

$ s o m m a = add (5 ,10);

i n t e s t a z i o n e ();

(25)

Inclusione di file (1)

Per condividere e riutilizzare porzioni di script e funzioni si usa frammentare il codice in pi`u file in modo da poterlo includere quando serve.

In PHP abbiamo due funzioni che importano il codice da un file esterno:

I include(nomefile) – importa il codice contenuto nel file indicato, senza interrompersi se il file non esiste

I require(nomefile) – importa il codice contenuto nel file indicato, interrompendo l’esecuzione se il file non esiste

Le due funzioni possono essere usate ovunque nel codice, ma comunque prima dei riferimenti fatti a variabili o funzioni contenuti nel file da includere

(26)

Inclusione di file (2)

Le funzioni per l’inclusione di files consentono di realizzare le “Server Side Includes”: porzioni di documenti HTML comuni a pi`u pagine (e.g. menu, intestazioni di pagine, ecc...)

< html >

< body >

< div c l a s s = " l e f t m e n u " >

<? php i n c l u d e ( " m e n u . php " ); ? >

</ div >

< h1 > W e l c o m e to my h o m e p a g e . </ h1 >

<p > S o m e t e x t . </ p >

</ body >

</ html >

dove menu.php potrebbe essere:

< a h r e f = " / d e f a u l t . php " > Home </ a >

< a h r e f = " / t u t o r i a l s . php " > T u t o r i a l s </ a >

< a h r e f = " / r e f e r e n c e s . php " > R e f e r e n c e s </ a >

< a h r e f = " / e x a m p l e s . php " > E x a m p l e s </ a >

< a h r e f = " / a b o u t . php " > A b o u t Us </ a >

< a h r e f = " / c o n t a c t . php " > C o n t a c t Us </ a >

(27)

PHP e i form HTML (1)

Un modo semplice per interagire con applicazione PHP `e tramite un form HTML

I valori immessi negli elementi di un form HTML sono

immediatamente disponibili all’applicazione PHP a cui vengono inviati Il motore PHP provvede ad inserire tutti i valori di un form all’interno di uno dei seguenti array superglobal:

I $ GET se il tag HTML <form> specifica method="get"

I $ POST se il tag HTML <form> specifica method="post"

Alternativamente, l’array $ REQUEST `e la fusione di $ GET e $ POST (e anche $ COOKIE, che non vediamo) e pu`o essere usato

indipendentemente dal metodo specificato da <form>

(28)

PHP e i form HTML (2)

Esempio: invio dei dati con metodo get Form HTML:

< f o r m a c t i o n = " w e l c o m e . php " m e t h o d = " get " >

N o m e : < i n p u t t y p e = " t e x t " n a m e = " f n a m e " / >

Eta : < i n p u t t y p e = " t e x t " n a m e = " age " / >

< i n p u t t y p e = " s u b m i t " / >

</ form >

Il metodo get fa si che quando si preme submit il browser far`a richiesta al server di una URL simile a:

http://www.miosito.com/welcome.php?fname=Peter&age=37 Il file welcome.php pu`o ora accedere a $ GET (array associativo) per ottenere i valori inseriti dall’utente:

B e n v e n u t o <? php e c h o $ _ G E T [ " f n a m e " ]; ? >. < br >

Tu hai <? php e c h o $ _ G E T [ " age " ]; ? > a n n i !

(29)

PHP e i form HTML (3)

Esempio: invio dei dati con metodo post Form HTML:

< f o r m a c t i o n = " w e l c o m e . php " m e t h o d = " p o s t " >

N o m e : < i n p u t t y p e = " t e x t " n a m e = " f n a m e " / >

Eta : < i n p u t t y p e = " t e x t " n a m e = " age " / >

< i n p u t t y p e = " s u b m i t " / >

</ form >

Il metodo get fa si che quando si preme submit il browser far`a richiesta al server di una URL simile a:

http://www.miosito.com/welcome.php

Il file welcome.php pu`o ora accedere a $ POST (array associativo) per ottenere i valori inseriti dall’utente:

B e n v e n u t o <? php e c h o $ _ P O S T [ " f n a m e " ]; ? >. < br >

Tu hai <? php e c h o $ _ P O S T [ " age " ]; ? > a n n i !

(30)

PHP e i form HTML (4)

Bisogna notare che:

I Il metodo get, modificando l’URL richiesto dal browser consente di memorizzare tale URL nella history del browser o nei bookmarks

I Per questo motivo, per`o, il metodo get `e sconsigliabile quando i valori da inviare sono dati sensibili (e.g. password)

I Inoltre, il metodo get ha limiti di spazio (qualche centinaio di caratteri)

I Quindi, il metodo post `e preferibile in certi casi

(31)

PHP e i form HTML (5)

Nell’attributo name del tag <input> si pu`o far riferimento ad un array

< f o r m m e t h o d = " get " a c t i o n = " p r o v a . php " >

P a t e n t i p o s s e d u t e : < br >

p a t e n t e A < i n p u t t y p e = " c h e c k b o x " n a m e = " p a t e n t i [] " v a l u e = " A " > < br >

p a t e n t e B < i n p u t t y p e = " c h e c k b o x " n a m e = " p a t e n t i [] " v a l u e = " B " > < br >

< i n p u t t y p e = " s u b m i t " v a l u e = " I n v i a " >

</ form >

che pu`o essere letto nel file PHP

e c h o " <p > P a s s a m i a p r e n d e r e " ; if (! i s s e t ( $ _ G E T [ " p a t e n t i " ]))

e c h o " a piedi </ p > " ;

e l s e if ( i n _ a r r a y ( " A " , $ _ G E T [ " p a t e n t i " ])) e c h o " in m a c c h i n a </ p > " ;

e l s e if ( i n _ a r r a y ( " B " , $ _ G E T [ " p a t e n t i " ])) e c h o " in moto </ p > " ;

Riferimenti

Documenti correlati

hostname: il nome di rete della macchina ospitante il Database server, ad esempio un indirizzo IP o &#34;localhost&#34; nel caso di installazioni locali;. username: il

Tale cartella deve essere impostata come valore per la variabile di ambiente JAVA_HOME nelle fasi successive della installazione e in tutti quegli script che

• Once such fields are set up, the application must show all the artworks of authors born during the specified range and located in the selected city, ordered by author's surname,

Struttura di un programma Variabili e tipi (array associativi) Espressioni e operatori Strutture di controllo (foreach).. Acquisizione dei parametri dai

  $name è il nome della variabile associata al cookie e può essere usata anche per specificare un elemento di array.   $value è il valore associato e viene inviato in

Il livello di interfaccia con l’utente finale (Front End) corrisponde alle pagine HTML o DHTML interpretate dal browser del client, il livello intermedio

Devserver 17.0 disponibile sul sito: http://www.easyphp.org.

Notare che questa funzione restituisce solo il codice errore della più recente funzione MySQL eseguita, quindi se la si vuole usare, assicurarsi di controllare il valore prima