1 php php hypertext preprocessor programmazione lato server

101
1 PHP PHP PHP Hypertext PHP Hypertext Preprocessor Preprocessor Programmazione lato Programmazione lato server server

Upload: bianca-marra

Post on 01-May-2015

263 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

11

PHPPHPPHP Hypertext PreprocessorPHP Hypertext Preprocessor

Programmazione lato serverProgrammazione lato server

Page 2: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

22

Building applicationsBuilding applications

“… “… While many sites act as simple repositories, While many sites act as simple repositories,

providing users with a collection of files they can providing users with a collection of files they can

retrieve and navigate through with hyperlinks, retrieve and navigate through with hyperlinks,

web sites are capable of much more sophisticated web sites are capable of much more sophisticated

interactionsinteractions. Sites can. Sites can collect informations collect informations from from

users through forms, users through forms, customize their appearance customize their appearance

and their contentand their content to reflect the interests of to reflect the interests of

particular users, or particular users, or let the users interact let the users interact with a with a

variety of variety of information sourcesinformation sources…”…”

Page 3: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

33

Cosa vediamo…Cosa vediamo…

Page 4: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

44

Cosa vediamo…Cosa vediamo…

web server

Comunicazione HTTP

Apache

Logica applicativa

PHP

Data source

MySQL

Page 5: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

55

Cosa vediamo…Cosa vediamo…

Page 6: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

66

Architettura 3-tier Architettura 3-tier (dal sito Microsoft)(dal sito Microsoft)

Page 7: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

77

ApacheApache

È un web server.È un web server.

• Parla e capisce il protocollo http.Parla e capisce il protocollo http.

Primo web server, sviluppato da Tim Primo web server, sviluppato da Tim

Berners-Lee presso il CERN.Berners-Lee presso il CERN.

Predecessore di Apache: Predecessore di Apache: NCSA httpd NCSA httpd

serverserver (1995). (1995).

Page 8: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

88

PHPPHP

Open-source server-side scripting language Open-source server-side scripting language

sviluppato appositamente per il web.sviluppato appositamente per il web.

Il progetto inizia nel 1994 Il progetto inizia nel 1994 (Rasmus Lerdorf).(Rasmus Lerdorf).

Inizialmente PHP = Personal Home Page, poi Inizialmente PHP = Personal Home Page, poi

diventa PHP Hypertext Preprocessor.diventa PHP Hypertext Preprocessor.

1998: PHP 3.1998: PHP 3.

Versioni correnti: PHP 5.2.11 e PHP 5.3.0.Versioni correnti: PHP 5.2.11 e PHP 5.3.0.

Page 9: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

99

PHPPHP

PHP

HTML + JavaScript

PHP

HTML + JavaScript

Un file con codice PHP deve essere salvato in formato solo testo e con estensione .php.

Un file con codice PHP deve essere salvato in formato solo testo e con estensione .php.

Page 10: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1010

Introduzione a PHPIntroduzione a PHP

Linguaggio di scripting per realizzare pagine web Linguaggio di scripting per realizzare pagine web

dinamiche, il cui contenuto viene generato dinamiche, il cui contenuto viene generato

(dinamicamente) nel momento in cui queste vengono (dinamicamente) nel momento in cui queste vengono

richieste al web server.richieste al web server.

Script PHP: pagina HTML nella quale viene inserito il codiceScript PHP: pagina HTML nella quale viene inserito il codice

• PHP viene descritto come “HTML-embedded”.PHP viene descritto come “HTML-embedded”.

Il codice PHP viene eseguito sul server prima che la pagina Il codice PHP viene eseguito sul server prima che la pagina

venga inviata al browser, che vedrà solo il risultato finale.venga inviata al browser, che vedrà solo il risultato finale.

Page 11: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1111

Introduzione a PHP: esempio “Ciao Introduzione a PHP: esempio “Ciao mondo!”mondo!”

Script PHPScript PHP::

<html><html><head><title>Esempio 1</title></head><head><title>Esempio 1</title></head><body><body><?php<?phpecho “<h1>Ciao mondo!</h1>”;echo “<h1>Ciao mondo!</h1>”;?>?></body></body></html></html>

Pagina inviata al browserPagina inviata al browser::

<html><html><head><title>Esempio 1</title></head><head><title>Esempio 1</title></head><body><body><h1>Ciao mondo!</h1><h1>Ciao mondo!</h1></body></body></html></html>

Page 12: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1212

Introduzione a PHP: come si Introduzione a PHP: come si inserisce il codice?inserisce il codice?

Stile abbreviatoStile abbreviato

<?<?codice PHP quicodice PHP qui

?>?>

Stile classicoStile classico

<?php<?phpcodice PHP quicodice PHP qui

?>?>

Stile Microsoft ASPStile Microsoft ASP

<%<%codice PHP quicodice PHP qui

%>%>

Alternativa (utile con gli editor HTML visuali, come Front Page, che Alternativa (utile con gli editor HTML visuali, come Front Page, che

potrebbero non tollerare gli altri tipi di sintassi)potrebbero non tollerare gli altri tipi di sintassi)

<SCRIPT LANGUAGE=“php”><SCRIPT LANGUAGE=“php”>codice PHP quicodice PHP qui

</SCRIPT></SCRIPT>

Page 13: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1313

Introduzione a PHP: come si Introduzione a PHP: come si inserisce il codice?inserisce il codice?

Le istruzioni devono essere separate Le istruzioni devono essere separate

tra loro dal tra loro dal ;;

CommentiCommenti

• //// questo è un commentoquesto è un commento

• /*/* questo è un commento questo è un commento **//

• ## questo è un commentoquesto è un commento

Page 14: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1414

Le funzioni fondamentali: sintassi Le funzioni fondamentali: sintassi per le funzioniper le funzioni

La sintassi per richiamare una funzione è la seguente:La sintassi per richiamare una funzione è la seguente:

nome_funzione(valore1, valore2,…);nome_funzione(valore1, valore2,…);

È possibile che alcune funzioni non necessitino di alcun È possibile che alcune funzioni non necessitino di alcun

parametro. In questo caso, vanno comunque indicate le parametro. In questo caso, vanno comunque indicate le

parentesi tonde.parentesi tonde.

Page 15: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1515

Le funzioni fondamentali: phpinfo( )Le funzioni fondamentali: phpinfo( )

phpinfo()phpinfo(): genera dinamicamente una pagina contenente : genera dinamicamente una pagina contenente

informazioni sulla versione di PHP installata e altre cosette, informazioni sulla versione di PHP installata e altre cosette,

quali i nomi delle variabili predefinite.quali i nomi delle variabili predefinite.

<html><html>

<head><title>phpinfo()</title></head><head><title>phpinfo()</title></head>

<body><body>

<?php<?php

phpinfo( );phpinfo( );

?>?>

</body></body>

</html></html>

Page 16: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1616

Le funzioni fondamentali: echoLe funzioni fondamentali: echo

echoecho: serve per scrivere l’output che viene inviato al browser che : serve per scrivere l’output che viene inviato al browser che

accede allo script.accede allo script.

• Non si tratta propriamente di una funzione, bensì di un costrutto del Non si tratta propriamente di una funzione, bensì di un costrutto del

linguaggio; per questo non si usano le parentesi tonde.linguaggio; per questo non si usano le parentesi tonde.

<html><html>

<head><title>echo</title></head><head><title>echo</title></head>

<body><body>

<?php<?php

echo “<h1>Benvenuto!</h1>”;echo “<h1>Benvenuto!</h1>”;

?>?>

</body></body>

</html></html>

Page 17: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1717

Le funzioni fondamentali: echoLe funzioni fondamentali: echo

Grazie a echo si può visualizzare il contenuto delle variabili.Grazie a echo si può visualizzare il contenuto delle variabili.

<html><html>

<head><title>echo</title></head><head><title>echo</title></head>

<body><body>

<?php<?php

echo “Benvenuto su ” . $_SERVER[“HTTP_HOST”];echo “Benvenuto su ” . $_SERVER[“HTTP_HOST”];

?>?>

</body></body>

</html></html>

$_SERVER[“HTTP_HOST”]$_SERVER[“HTTP_HOST”]: variabile contenente il nome di : variabile contenente il nome di

dominio del sito su cui lo script viene eseguito.dominio del sito su cui lo script viene eseguito.

Page 18: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1818

Le funzioni fondamentali: exit( ) e Le funzioni fondamentali: exit( ) e die( )die( )

exit() exit() ee die() die(): arrestano l’esecuzione dello script; : arrestano l’esecuzione dello script; die() die() consente consente

anche di stampare un messaggio. Tali funzioni possono essere anche di stampare un messaggio. Tali funzioni possono essere

utilizzate per gestire eventuali situazioni di errore che non utilizzate per gestire eventuali situazioni di errore che non

consentono la prosecuzione dello script. consentono la prosecuzione dello script.

<html><html>

<head><title>exit</title></head><head><title>exit</title></head>

<body><body>

<? exit( ); ?><? exit( ); ?>

<p>Questa frase non si vedrà</p><p>Questa frase non si vedrà</p>

</body></body>

</html></html>

Page 19: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

1919

Le funzioni fondamentali: esempiLe funzioni fondamentali: esempi

Nell’esempio seguente controlliamo il valore della variabile $n e Nell’esempio seguente controlliamo il valore della variabile $n e

mostriamo un messaggio di errore, bloccando l’esecuzione del mostriamo un messaggio di errore, bloccando l’esecuzione del

programma, se tale variabile è maggiore di 1. programma, se tale variabile è maggiore di 1.

<html><html>

<head><title>die</title></head><head><title>die</title></head>

<body><body>

<?<?

$n=5;$n=5;

if ($n>1) die(“<h1>$n è maggiore di uno!!!</h1>”);if ($n>1) die(“<h1>$n è maggiore di uno!!!</h1>”);

echo “<h1>$n è minore o uguale a uno!</h1>”;echo “<h1>$n è minore o uguale a uno!</h1>”;

?>?>

</body></body>

</html></html>

Vedere cosa succede Vedere cosa succede

sostituendo $n=5 con sostituendo $n=5 con

$n=1.$n=1.

Page 20: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2020

Variabili e tipi di dato: sintassi delle Variabili e tipi di dato: sintassi delle variabilivariabili

I nomi delle variabili sono prefissati dal simbolo I nomi delle variabili sono prefissati dal simbolo $$

• Esempio: $a = $b + $c serve per assegnare alla Esempio: $a = $b + $c serve per assegnare alla

variabile a la somma dei valori delle variabili b e c. Il variabile a la somma dei valori delle variabili b e c. Il

simbolo = è l’operatore di assegnazione.simbolo = è l’operatore di assegnazione.

In PHP, per creare una variabile, è sufficiente In PHP, per creare una variabile, è sufficiente

assegnarle un valore. Le variabili, cioè, non vanno assegnarle un valore. Le variabili, cioè, non vanno

dichiarate esplicitamente.dichiarate esplicitamente.

Per visualizzare il valore di una variabile, come Per visualizzare il valore di una variabile, come

già visto, si usa echo.già visto, si usa echo.

Page 21: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2121

Variabili e tipi di dato: sintassi delle Variabili e tipi di dato: sintassi delle costanticostanti

Il formato per assegnare il valore ad una costante è:Il formato per assegnare il valore ad una costante è:

define(“nome_costante”,”il valore che si intende dare”);define(“nome_costante”,”il valore che si intende dare”);

Esempio:Esempio:

define(“FILM”,”Codice d’onore”);define(“FILM”,”Codice d’onore”);

define(“TIPOFILM”,” è un dramma nell’ambito della define(“TIPOFILM”,” è un dramma nell’ambito della

giustizia militare.”);giustizia militare.”);

Per visualizzare una costante in uno script si usa echo e Per visualizzare una costante in uno script si usa echo e

l’operatore di concatenazione:l’operatore di concatenazione:

echo “Il film ”.FILM.TIPOFILM;echo “Il film ”.FILM.TIPOFILM;

L’operatore L’operatore . . è l’operatore di concatenazione.è l’operatore di concatenazione.

Page 22: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2222

Operatori (I)Operatori (I)

Operatori aritmeticiOperatori aritmetici

• ++: addizione ($a + $b).: addizione ($a + $b).

• --: sottrazione ($a - $b).: sottrazione ($a - $b).

: moltiplicazione ($a : moltiplicazione ($a $b). $b).

• //: divisione ($a / $b).: divisione ($a / $b).

• %%: modulo ($a % $b).: modulo ($a % $b).

Operatori di confrontoOperatori di confronto

• ====: uguale ($a == $b).: uguale ($a == $b).

• ======: identico ($a === $b) (cioè $a e $b sono anche dello stesso tipo).: identico ($a === $b) (cioè $a e $b sono anche dello stesso tipo).

• !=!=: diverso ($a != $b).: diverso ($a != $b).

• <><>: diverso ($a <> $b).: diverso ($a <> $b).

• <<: minore di ($a < $b).: minore di ($a < $b).

• <=<=: minore o uguale di ($a <= $b).: minore o uguale di ($a <= $b).

Page 23: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2323

Operatori (II)Operatori (II) Operatori logiciOperatori logici

• !!: NON (!$b: rende vero se $b è falso e viceversa).: NON (!$b: rende vero se $b è falso e viceversa).

• &&&&: E ($a && $b: rende vero se $a e $b sono entrambe vere; altrimenti : E ($a && $b: rende vero se $a e $b sono entrambe vere; altrimenti

falso).falso).

• ||||: O ($a || $b: rende vero se $a oppure $b è vera; altrimenti falso).: O ($a || $b: rende vero se $a oppure $b è vera; altrimenti falso).

• xorxor: O esclusivo ($a xor $b: rende vero se i valori di verità di $a e $b : O esclusivo ($a xor $b: rende vero se i valori di verità di $a e $b

sono diversi; altrimenti falso).sono diversi; altrimenti falso).

Operatore ternarioOperatore ternario

• condition ? “value if true” : “value if false”condition ? “value if true” : “value if false”

($grade > 50 ? “Passed” : “Failed”); ($grade > 50 ? “Passed” : “Failed”);

• L’espressione assumerà valore “Passed” o “Failed” a seconda del L’espressione assumerà valore “Passed” o “Failed” a seconda del

valore della variabile $grade.valore della variabile $grade.

Operatore di assegnazione: Operatore di assegnazione: ==

Page 24: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2424

Operatori (III)Operatori (III)

Operatori combinatiOperatori combinati

• +=+=: $a += 5: aggiungi 5 ad $a e assegna il risultato ad $a stessa.: $a += 5: aggiungi 5 ad $a e assegna il risultato ad $a stessa.

• -=-=: $a -= 5: togli 5 ad $a e assegna il risultato ad $a stessa.: $a -= 5: togli 5 ad $a e assegna il risultato ad $a stessa.

• /=/=:$a /= 5: dividi $a per 5 e assegna il risultato ad $a stessa.:$a /= 5: dividi $a per 5 e assegna il risultato ad $a stessa.

Operatore di incremento e decrementoOperatore di incremento e decremento

• ++$a++$a: aggiunge 1 alla variabile $a poi ne restituisce il valore.: aggiunge 1 alla variabile $a poi ne restituisce il valore.

• $a++$a++: restituisce il valore originario quindi vi aggiunge 1.: restituisce il valore originario quindi vi aggiunge 1.

• Analogamente per gli operatori Analogamente per gli operatori --$a--$a e e $a--$a--..

Questi operatori vengono spesso utilizzati per i contatori Questi operatori vengono spesso utilizzati per i contatori

all’interno di cicli ($contatore += 10, $contatore++).all’interno di cicli ($contatore += 10, $contatore++).

Page 25: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2525

EsempiEsempi <?php<?php

$costo_televisore=“500”;$costo_televisore=“500”;

$costo_televisore+=“15”;$costo_televisore+=“15”;

echo “Ehi! Grande occasione per le TV, costano solo $costo_televisore, spedizione echo “Ehi! Grande occasione per le TV, costano solo $costo_televisore, spedizione

inclusa! Ordina subito!”;inclusa! Ordina subito!”;

?>?>

Risultato nel browser: Ehi! Grande occasione per le TV, costano solo 515, spedizione Risultato nel browser: Ehi! Grande occasione per le TV, costano solo 515, spedizione

inclusa! Ordina subito!”inclusa! Ordina subito!”

$contatore=0;$contatore=0; $contatore=10$contatore=10

echo $contatore++;echo $contatore++; echo --$contatore;echo --$contatore;

echo “<br>”;echo “<br>”; echo “<br>”;echo “<br>”;

echo $contatore;echo $contatore; echo $contatoreecho $contatore

Risultato nel browser: 0Risultato nel browser: 0 Risultato nel browser: 9Risultato nel browser: 9

11 9 9

Page 26: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2626

Variabili e tipi di dato: variabili Variabili e tipi di dato: variabili predefinitepredefinite

Sono variabili il cui valore è preimpostato, che contengono solitamente Sono variabili il cui valore è preimpostato, che contengono solitamente

informazioni sull’ambiente di esecuzione dello script PHP.informazioni sull’ambiente di esecuzione dello script PHP.

$_SERVER[“PHP_SELF”]$_SERVER[“PHP_SELF”]: contiene il percorso dello script in esecuzione (ad : contiene il percorso dello script in esecuzione (ad

es., se lo script è raggiungibile dall’indirizzo http://localhost/index.php3, es., se lo script è raggiungibile dall’indirizzo http://localhost/index.php3,

$_SERVER[“PHP_SELF”] conterrà il valore /index.php3). $_SERVER[“PHP_SELF”] conterrà il valore /index.php3).

$_SERVER[“HTTP_HOST”]$_SERVER[“HTTP_HOST”]: contiene il nome del server su cui lo script viene : contiene il nome del server su cui lo script viene

eseguito (nel caso precedente, localhost).eseguito (nel caso precedente, localhost).

$_SERVER[“REMOTE_HOST”]$_SERVER[“REMOTE_HOST”]: fornisce il nome di dominio del visitatore.: fornisce il nome di dominio del visitatore.

$_SERVER[“REMOTE_ADDR”]$_SERVER[“REMOTE_ADDR”]: fornisce l’indirizzo IP del visitatore.: fornisce l’indirizzo IP del visitatore.

Usare la funzione phpinfo( ) per visualizzare l’elenco completo delle Usare la funzione phpinfo( ) per visualizzare l’elenco completo delle

variabili predefinite.variabili predefinite.

Page 27: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2727

Variabili e tipi di dato: tipi di datoVariabili e tipi di dato: tipi di dato

I tipi di dato in PHP si suddividono in I tipi di dato in PHP si suddividono in

tipi scalari e tipi compositi.tipi scalari e tipi compositi.

Tipi scalari: numeri (interi e in virgola Tipi scalari: numeri (interi e in virgola

mobile), stringhe, valori booleani.mobile), stringhe, valori booleani.

Tipi compositi: array, oggetti.Tipi compositi: array, oggetti.

Page 28: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2828

Variabili e tipi di dato: esempiVariabili e tipi di dato: esempi

// $b è una variabile di tipo booleano// $b è una variabile di tipo booleano

$b = TRUE;$b = TRUE;

// $num è una variabile di tipo intero// $num è una variabile di tipo intero

$num = 25;$num = 25;

// $pi_greco è un numero in virgola mobile// $pi_greco è un numero in virgola mobile

// si noti il punto (virgola decimale)// si noti il punto (virgola decimale)

$pi_greco = 3.14;$pi_greco = 3.14;

//$messaggio è una stringa//$messaggio è una stringa

$messaggio = “Ciao a tutti!”;$messaggio = “Ciao a tutti!”;

Page 29: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2929

Variabili e tipi di dato: arrayVariabili e tipi di dato: array

In PHP un array può essere tanto un vettore In PHP un array può essere tanto un vettore

(struttura dati in cui ogni elemento è individuato (struttura dati in cui ogni elemento è individuato

da un valore numerico) quanto una tabella di da un valore numerico) quanto una tabella di

hash (collezione di coppie nome/valore).hash (collezione di coppie nome/valore).

array( )array( ): per costruire esplicitamente un array.: per costruire esplicitamente un array.

È anche possibile costruire un array in modo È anche possibile costruire un array in modo

implicito.implicito.

Page 30: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3030

Variabili e tipi di dato: esempi di Variabili e tipi di dato: esempi di arrayarray

// array di numeri interi costruito esplicitamente utilizzando array()// array di numeri interi costruito esplicitamente utilizzando array()

$primi = array(2,3,5,7,11);$primi = array(2,3,5,7,11);

// array costruito implicitamente// array costruito implicitamente

$pari[0] = 2;$pari[0] = 2;

$pari[1] = 4;$pari[1] = 4;

$pari[2] = 6;$pari[2] = 6;

// tabella di hash// tabella di hash

$bookmark[“univ”] = “www.unifi.it”;$bookmark[“univ”] = “www.unifi.it”;

$bookmark[“dip”] = “www.dsi.unifi.it”;$bookmark[“dip”] = “www.dsi.unifi.it”;

Page 31: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3131

Variabili e tipi di dato: come Variabili e tipi di dato: come accedere agli elementi di un arrayaccedere agli elementi di un array

Utilizzare il corrispondente indice numerico, Utilizzare il corrispondente indice numerico,

oppure la chiave (se si tratta di una tabella di oppure la chiave (se si tratta di una tabella di

hash)hash)

echo $primi[3];echo $primi[3];

echo $bookmark[“dip”];echo $bookmark[“dip”];

In PHP un array può contenere anche elementi di In PHP un array può contenere anche elementi di

tipo diversotipo diverso

$mix = array(1,”ciao”,3.14,array(1,2,3));$mix = array(1,”ciao”,3.14,array(1,2,3));

Page 32: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3232

Manipolazione delle stringheManipolazione delle stringhe

In PHP esistono diverse funzioni predefinite per effettuare In PHP esistono diverse funzioni predefinite per effettuare

moltissime operazioni sulle stringhe di testo.moltissime operazioni sulle stringhe di testo.

substr: substr: consente di estrarre una sottostringa. La sintassi è:consente di estrarre una sottostringa. La sintassi è:

• substr(stringa,inizio,fine); substr(stringa,inizio,fine); ove ove stringa stringa indica la stringa di partenza, indica la stringa di partenza,

inizioinizio è il carattere di partenza per estrarre la sottostringa e è il carattere di partenza per estrarre la sottostringa e finefine quello quello

in cui termina la sottostringa. L’argomento in cui termina la sottostringa. L’argomento fine fine è opzionale: se non è opzionale: se non

indicato, il carattere finale della sottostringa sarà il carattere finale indicato, il carattere finale della sottostringa sarà il carattere finale

della stringa stessa.della stringa stessa.• <?php<?php

$protagonista=“Bruce Willis”;$protagonista=“Bruce Willis”;

$nome=substr($protagonista,0,5);$nome=substr($protagonista,0,5);

$cognome=substr($protagonista,6);$cognome=substr($protagonista,6);

echo “Il nome è: $nome, il cognome è: $cognome”;echo “Il nome è: $nome, il cognome è: $cognome”;

?>?>

Page 33: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3333

Manipolazione delle stringheManipolazione delle stringhe

strlen(stringa): strlen(stringa): restituisce la lunghezza della restituisce la lunghezza della

stringa stringa stringa stringa come numero intero.come numero intero.

trim(stringa): trim(stringa): elimina gli spazi dalla stringa elimina gli spazi dalla stringa

stringa.stringa.

ucfirst(stringa):ucfirst(stringa): rende maiuscola l’iniziale di rende maiuscola l’iniziale di

stringa.stringa.

ucwords(stringa): ucwords(stringa): rende maiuscole tutte le iniziali rende maiuscole tutte le iniziali

delle parole di delle parole di stringa.stringa.

Page 34: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3434

Manipolazione delle stringheManipolazione delle stringhe

strpos(stringa,pattern): strpos(stringa,pattern): cerca la prima occorrenza di cerca la prima occorrenza di pattern pattern inin stringa stringa e e

restituisce il carattere in cui compare.restituisce il carattere in cui compare.

strrpos(stringa,pattern): strrpos(stringa,pattern): cerca l’ultima occorrenza di cerca l’ultima occorrenza di pattern pattern inin stringa stringa e e

restituisce il carattere in cui comparerestituisce il carattere in cui compare..

str_replace(stringa da cercare,stringa da inserire,stringa):str_replace(stringa da cercare,stringa da inserire,stringa): cerca cerca stringa da stringa da

cercarecercare in in stringastringa e la sostituisce con e la sostituisce con stringa da inserire.stringa da inserire.

nl2br(stringa): nl2br(stringa): se se stringastringa è un generico testo, converte tutti gli a capo in è un generico testo, converte tutti gli a capo in

<BR> HTML<BR> HTML..

urlencode(stringa): urlencode(stringa): converte converte stringastringa in modo tale da poterla accodare a in modo tale da poterla accodare a

un’interrogazione in uno script.un’interrogazione in uno script.

urldecode(stringa): urldecode(stringa): decodifica completamente la stringa di interrogazine decodifica completamente la stringa di interrogazine

URL URL stringa.stringa.

Page 35: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3535

Manipolazione delle stringheManipolazione delle stringhe strrev(stringa): strrev(stringa): restituisce restituisce stringa stringa invertita.invertita.

str_word_count(stringa,modalità): str_word_count(stringa,modalità): effettua alcuni conteggi su effettua alcuni conteggi su stringa: stringa: se se

modalitàmodalità non è specificata, conta le parole di non è specificata, conta le parole di stringastringa; se ; se modalità=1, modalità=1,

restituisce un array contenente tutte le parole di restituisce un array contenente tutte le parole di stringa; stringa; se se modalità=2, modalità=2,

restituisce una tabella hash ove la chiave è la posizione numerica della restituisce una tabella hash ove la chiave è la posizione numerica della

parola in parola in stringastringa e il valore è la parola stessa. e il valore è la parola stessa.

explode(separatore,stringa): explode(separatore,stringa): crea un array di elementi partendo dalle parti crea un array di elementi partendo dalle parti

di di stringa stringa divise dal carattere divise dal carattere separatore.separatore.

implode(separatore,array): implode(separatore,array): crea una stringa partendo dagli elementi di crea una stringa partendo dagli elementi di

arrayarray divisi da divisi da separatore.separatore.

Esistono numerose altre funzioni per la manipolazione di stringhe, che Esistono numerose altre funzioni per la manipolazione di stringhe, che

possono essere trovate su ogni buon manuale.possono essere trovate su ogni buon manuale.

Page 36: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3636

Form HTML: sintassi dei formForm HTML: sintassi dei form

Un form HTML è una finestra contenente vari elementi di controllo che Un form HTML è una finestra contenente vari elementi di controllo che

consentono al visitatore di inserire informazioni.consentono al visitatore di inserire informazioni.

Una volta inseriti, i dati vengono inviati ad uno script che li elabora.Una volta inseriti, i dati vengono inviati ad uno script che li elabora.

Sintassi:Sintassi:

<form action=“<form action=“[URL dello script][URL dello script]” method” method=“[GET o POST]”=“[GET o POST]”>>

<input type=“<input type=“[elemento di controllo][elemento di controllo]” name” name=“[nome]=“[nome]” …>” …>

<input type=“<input type=“[elemento di controllo][elemento di controllo]” name” name=“[nome]=“[nome]” …>” …>

……

</form></form>

Page 37: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3737

Form HTML: sintassi dei formForm HTML: sintassi dei form

L’attributo L’attributo actionaction serve per specificare l’URL dello script. serve per specificare l’URL dello script.

L’attributo L’attributo methodmethod serve per specificare la modalità di invio delle serve per specificare la modalità di invio delle

informazioni. Può essere informazioni. Può essere GETGET o o POSTPOST. Con GET le informazioni vengono . Con GET le informazioni vengono

inserite nell’indirizzo URL, dunque sono visibili nella barra degli indirizzi del inserite nell’indirizzo URL, dunque sono visibili nella barra degli indirizzi del

browser, ma sono vincolate dalla lunghezza massima di un URL, che è di browser, ma sono vincolate dalla lunghezza massima di un URL, che è di

256 caratteri. Con POST i dati vengono scritti sullo “standard input” 256 caratteri. Con POST i dati vengono scritti sullo “standard input”

dell’applicazione destinataria, dunque non sono visibili ma soprattutto non dell’applicazione destinataria, dunque non sono visibili ma soprattutto non

ci sono limiti sulla quantità di dati inviata.ci sono limiti sulla quantità di dati inviata.

Si può accedere alle informazioni inviate anche utilizzando gli array Si può accedere alle informazioni inviate anche utilizzando gli array

superglobali superglobali $_GET$_GET e e $_POST$_POST (a seconda del metodo usato). (a seconda del metodo usato).

Page 38: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3838

Form HTML: elementi di controllo Form HTML: elementi di controllo (I)(I)

Pulsante d’invio: Pulsante d’invio: SUBMITSUBMIT. L’attributo ‘Value’ (opzionale) specifica il testo . L’attributo ‘Value’ (opzionale) specifica il testo

personalizzato da visualizzare all’interno del pulsante.personalizzato da visualizzare all’interno del pulsante.

Pulsante per la cancellazione delle informazioni inserite: Pulsante per la cancellazione delle informazioni inserite: RESETRESET. L’attributo . L’attributo

‘Value’ è come sopra.‘Value’ è come sopra.

Campi di testo per l’immissione di singole linee di testo all’interno di Campi di testo per l’immissione di singole linee di testo all’interno di

appositi riquadri: appositi riquadri: TEXTTEXT. L’attributo ‘Name’ serve per dare il nome al . L’attributo ‘Name’ serve per dare il nome al

controllo; ‘Size’ serve per determinare la dimensione del campo in caratteri controllo; ‘Size’ serve per determinare la dimensione del campo in caratteri

(es.: size=“30”). Altri controlli per l’immissione di testo sono (es.: size=“30”). Altri controlli per l’immissione di testo sono PASSWORDPASSWORD (i (i

caratteri sono rimpiazzati sullo schermo da asterischi) e caratteri sono rimpiazzati sullo schermo da asterischi) e HIDDENHIDDEN (per la (per la

creazione di un campo di testo nascosto, a volte utilizzato per passare creazione di un campo di testo nascosto, a volte utilizzato per passare

informazioni da un form a un altro).informazioni da un form a un altro).

Per l’immissione di testo su più righe, si può utilizzare Per l’immissione di testo su più righe, si può utilizzare TEXTAREATEXTAREA::

<TEXTAREA NAME=“miei commenti” ROWS=“10” COLS=“40”><TEXTAREA NAME=“miei commenti” ROWS=“10” COLS=“40”>

</TEXTAREA></TEXTAREA>

Page 39: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

3939

Form HTML: elementi di controllo Form HTML: elementi di controllo (II)(II)

Caselle di selezione che consentano all’utente selezioni multiple all’interno Caselle di selezione che consentano all’utente selezioni multiple all’interno

di un form: di un form: CHECKBOXCHECKBOX. L’attributo ‘Name’ serve per dare un nome al . L’attributo ‘Name’ serve per dare un nome al

singolo elemento di selezione all’interno del controllo, mentre l’attributo singolo elemento di selezione all’interno del controllo, mentre l’attributo

‘Value’ specifica il valore assunto dalla variabile relativa quando la casella ‘Value’ specifica il valore assunto dalla variabile relativa quando la casella

viene selezionata.viene selezionata.

Inserendo alla fine la parola Inserendo alla fine la parola CHECKEDCHECKED, il browser selezionerà inizialmente , il browser selezionerà inizialmente

la casella in modo automatico.la casella in modo automatico.

Esempio:Esempio:

<INPUT TYPE=“CHECKBOX” NAME=“arancia” VALUE=“Succo <INPUT TYPE=“CHECKBOX” NAME=“arancia” VALUE=“Succo

d’arancia”>d’arancia”>

<INPUT TYPE=“CHECKBOX” NAME=“cola” VALUE=“Coca-Cola”><INPUT TYPE=“CHECKBOX” NAME=“cola” VALUE=“Coca-Cola”>

<INPUT TYPE=“CHECKBOX” NAME=“pompelmo” VALUE=“Succo <INPUT TYPE=“CHECKBOX” NAME=“pompelmo” VALUE=“Succo

di pompelmo” CHECKED>.di pompelmo” CHECKED>.

Page 40: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4040

Form HTML: elementi di controllo Form HTML: elementi di controllo (III)(III)

Pulsanti radio per la selezione di un solo elemento all’interno di un gruppo: Pulsanti radio per la selezione di un solo elemento all’interno di un gruppo: RADIORADIO..

A differenza del controllo CHECKBOX, il nome di tutte le caselle di un controllo RADIO A differenza del controllo CHECKBOX, il nome di tutte le caselle di un controllo RADIO

deve essere sempre lo stesso.deve essere sempre lo stesso.

I menu di selezione permettono una o più selezioni a partire da un elenco: I menu di selezione permettono una o più selezioni a partire da un elenco: SELECTSELECT..

Esempio:Esempio:

<SELECT NAME=“giorno_settimana”><SELECT NAME=“giorno_settimana”>

<OPTION>Lunedì<OPTION>Lunedì

<OPTION>Martedì<OPTION>Martedì

<OPTION>Mercoledì<OPTION>Mercoledì

<OPTION>Giovedì<OPTION>Giovedì

<OPTION>Venerdì<OPTION>Venerdì

</SELECT></SELECT>

Per avere selezioni multiple all’interno di un menu di selezione, si usa la seguente Per avere selezioni multiple all’interno di un menu di selezione, si usa la seguente

sintassi:sintassi:

<SELECT NAME=“giorno_settimana<SELECT NAME=“giorno_settimana[][]” ” multiplemultiple>>

Page 41: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4141

Form HTML: esempioForm HTML: esempio

Semplice esempio di form HTML:Semplice esempio di form HTML:

<form action=“/scripts/elabora.php” method=“get”><form action=“/scripts/elabora.php” method=“get”>

<input type=“text” name=“campione”><input type=“text” name=“campione”>

<input type=“submit” name=“Invia” value=“Invia i <input type=“submit” name=“Invia” value=“Invia i

dati”>dati”>

</form></form>

Scrivendo “Schumacher” nella casella di testo e premendo il Scrivendo “Schumacher” nella casella di testo e premendo il

pulsante “Invia i dati”, nella barra degli indirizzi verrà visualizzato:pulsante “Invia i dati”, nella barra degli indirizzi verrà visualizzato:

http://....../scripts/elabora.php?campione=Schumacherhttp://....../scripts/elabora.php?campione=Schumacher

Nello script ‘elabora.php’ viene definita una variabile di nome Nello script ‘elabora.php’ viene definita una variabile di nome

$_GET[“campione”] il cui valore è la stringa “Schumacher”.$_GET[“campione”] il cui valore è la stringa “Schumacher”.

Page 42: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4242

Form HTML: trasmissione dei dati Form HTML: trasmissione dei dati col metodo GETcol metodo GET

Indirizzo URL dello script a cui si vogliono inviare i dati seguito da un punto Indirizzo URL dello script a cui si vogliono inviare i dati seguito da un punto

interrogativo interrogativo ?? seguito dalla ‘ seguito dalla ‘query stringquery string’’

La struttura della query string consiste di coppie nome/valore separate da La struttura della query string consiste di coppie nome/valore separate da

&; i caratteri non ammissibili in un indirizzo URL vengono sostituiti da % &; i caratteri non ammissibili in un indirizzo URL vengono sostituiti da %

seguito dal corrispondente codice ASCII (in formato esadecimale; ad es., ‘ì’ seguito dal corrispondente codice ASCII (in formato esadecimale; ad es., ‘ì’

diventa ‘%EC’). Gli spazi vengono sostituiti da +.diventa ‘%EC’). Gli spazi vengono sostituiti da +.

Il metodo GET si può sfruttare per passare parametri ad uno script PHP. Il metodo GET si può sfruttare per passare parametri ad uno script PHP.

Supponiamo di avere uno script news.php che estrae informazioni da un Supponiamo di avere uno script news.php che estrae informazioni da un

database; possiamo creare una variabile, da chiamare, ad esempio, database; possiamo creare una variabile, da chiamare, ad esempio,

$argomento, tramite la quale estrarre il tipo di notizie che più ci $argomento, tramite la quale estrarre il tipo di notizie che più ci

interessano:interessano:

http://....../news.php?argomento=Sporthttp://....../news.php?argomento=Sport

Se l’argomento che ci interessa ha un nome che non sappiamo accodare Se l’argomento che ci interessa ha un nome che non sappiamo accodare

ad un URL, possiamo usare la funzione ad un URL, possiamo usare la funzione urlencode( )urlencode( )..

Page 43: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4343

Un esempioUn esempio

Creiamo un form contenente un campo di testo, una textarea e due Creiamo un form contenente un campo di testo, una textarea e due

pulsanti, un pulsante di invio e un pulsante di reset. Supponiamo pulsanti, un pulsante di invio e un pulsante di reset. Supponiamo

inoltre che lo script di destinazione si chiami ‘decode.php’.inoltre che lo script di destinazione si chiami ‘decode.php’.

Page 44: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4444

Un altro esempioUn altro esempio

Creiamo un altro form, contenente un campo di testo, un menu di Creiamo un altro form, contenente un campo di testo, un menu di

selezione, tre pulsanti radio e i soliti due pulsanti, di invio e di reset. selezione, tre pulsanti radio e i soliti due pulsanti, di invio e di reset.

Supponiamo inoltre che, anche in questo caso, lo script di Supponiamo inoltre che, anche in questo caso, lo script di

destinazione si chiami ‘decode.php’.destinazione si chiami ‘decode.php’.

Page 45: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4545

Un altro esempioUn altro esempio

Ora costruiamo lo script ‘decode.php’ che elabora il precedente Ora costruiamo lo script ‘decode.php’ che elabora il precedente

form, dando come risultato per l’utente la seguente pagina form, dando come risultato per l’utente la seguente pagina

web: web:

Page 46: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4646

Dichiarazione di funzioni: sintassiDichiarazione di funzioni: sintassi Ogni programmatore può creare funzioni personali, che normalmente sono di due Ogni programmatore può creare funzioni personali, che normalmente sono di due

tipi: funzioni in senso “matematico” o funzioni come mezzo per aggiungere nuovi tipi: funzioni in senso “matematico” o funzioni come mezzo per aggiungere nuovi

comandi al linguaggio.comandi al linguaggio.

Nella prima accezione, una funzione rappresenta una relazione tra un input e un Nella prima accezione, una funzione rappresenta una relazione tra un input e un

output. Nella seconda accezione, una funzione rappresenta un modo per raggruppare output. Nella seconda accezione, una funzione rappresenta un modo per raggruppare

un blocco di istruzioni PHP affinché possano essere richiamate ed eseguite come se un blocco di istruzioni PHP affinché possano essere richiamate ed eseguite come se

fossero un’unica istruzione.fossero un’unica istruzione.

Sintassi per la dichiarazione di una funzione:Sintassi per la dichiarazione di una funzione:

function function [nome_funzione][nome_funzione](([argomenti][argomenti]){){

[corpo-della-funzione][corpo-della-funzione]

}}

[nome_funzione]: [nome_funzione]: nome della funzione;nome della funzione;

[argomenti]: [argomenti]: elenco, eventualmente vuoto, di parametri da fornire alla funzione elenco, eventualmente vuoto, di parametri da fornire alla funzione

separati da virgole;separati da virgole;

[corpo-della-funzione]: [corpo-della-funzione]: blocco di istruzioni PHP che implementano la funzione stessa.blocco di istruzioni PHP che implementano la funzione stessa.

Page 47: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4747

Dichiarazione di funzioni: esempioDichiarazione di funzioni: esempio Dichiarazione di una funzione che somma due numeri:Dichiarazione di una funzione che somma due numeri:

function somma($a,$b){function somma($a,$b){

return $a+$b;return $a+$b;

}}

Il costrutto ‘Il costrutto ‘returnreturn’ viene utilizzato quando una funzione ’ viene utilizzato quando una funzione

deve restituire un valore.deve restituire un valore.

Richiamo della funzione ‘somma’:Richiamo della funzione ‘somma’:

$risultato=somma(1,1);$risultato=somma(1,1);

Il risultato della funzione somma calcolata sugli argomenti Il risultato della funzione somma calcolata sugli argomenti

(1,1) viene assegnato alla variabile $risultato.(1,1) viene assegnato alla variabile $risultato.

Page 48: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4848

Dichiarazione di funzioni: variabili Dichiarazione di funzioni: variabili locali e variabili globalilocali e variabili globali

All’interno di una funzione, come si è visto, si possono All’interno di una funzione, come si è visto, si possono

naturalmente utilizzare delle variabili.naturalmente utilizzare delle variabili.

In questo caso, tuttavia, occorre prestare attenzione alla In questo caso, tuttavia, occorre prestare attenzione alla

distinzione tra variabili locali e variabili globali.distinzione tra variabili locali e variabili globali.

Le Le variabili localivariabili locali sono definite all’interno della funzione, e sono definite all’interno della funzione, e

non sono accessibili al di fuori di essa. Le non sono accessibili al di fuori di essa. Le variabili globalivariabili globali

sono invece definite al suo esterno (nella parte principale sono invece definite al suo esterno (nella parte principale

dello script), e si possono utilizzare all’interno di una dello script), e si possono utilizzare all’interno di una

funzione premettendo la parola-chiave funzione premettendo la parola-chiave globalglobal..

Page 49: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

4949

Dichiarazione di funzioni: esempiDichiarazione di funzioni: esempi

Esempio 1:Esempio 1:

<?<?

function prova() {function prova() {

$numero =3;$numero =3;

…………

}}

// Qui $numero non è definita!// Qui $numero non è definita!

?>?>

Esempio 2:Esempio 2:

<?<?

// $numero è una variabile globale// $numero è una variabile globale

$numero=3;$numero=3;

function prova() {function prova() {

// Quando dico $numero intendo la variabile globale// Quando dico $numero intendo la variabile globale

global $numero;global $numero;

echo $numero;echo $numero;

}}

?>?>

Page 50: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5050

Dichiarazione di funzioni: il Dichiarazione di funzioni: il costrutto ‘global’costrutto ‘global’

Se ci si dimentica di usare il costrutto ‘global’, Se ci si dimentica di usare il costrutto ‘global’,

l’interprete PHP avrebbe considerato $numero l’interprete PHP avrebbe considerato $numero

una variabile locale, e l’avrebbe trovata non una variabile locale, e l’avrebbe trovata non

definita.definita.

In alternativa a ‘global’ si può accedere a una In alternativa a ‘global’ si può accedere a una

variabile globale tramite l’array associativo variabile globale tramite l’array associativo

$GLOBALS$GLOBALS. La sintassi è la seguente:. La sintassi è la seguente:

$GLOBALS[“numero”]$GLOBALS[“numero”]

Page 51: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5151

Strutture di controlloStrutture di controllo

Come in ogni linguaggio di programmazione, le Come in ogni linguaggio di programmazione, le

strutture di controllo servono per controllare il strutture di controllo servono per controllare il

flusso di esecuzione del programma (o, nel nostro flusso di esecuzione del programma (o, nel nostro

caso, dello script).caso, dello script).

Si possono distinguere due tipologie di strutture Si possono distinguere due tipologie di strutture

di controllo: quelle di controllo: quelle condizionalicondizionali e quelle e quelle iterativeiterative..

Page 52: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5252

Strutture di controllo: strutture Strutture di controllo: strutture condizionalicondizionali

Costrutto Costrutto ifif: si utilizza quando si vuole che : si utilizza quando si vuole che

l’esecuzione di un certo blocco di istruzioni l’esecuzione di un certo blocco di istruzioni

avvenga o meno in funzione del valore di avvenga o meno in funzione del valore di

un’espressione (la condizione). un’espressione (la condizione).

Costrutto Costrutto switchswitch: si utilizza quando ci sono diversi : si utilizza quando ci sono diversi

blocchi di istruzioni e si vuole che, in base al blocchi di istruzioni e si vuole che, in base al

valore dell’espressione data, venga eseguito valore dell’espressione data, venga eseguito

soltanto uno di questi.soltanto uno di questi.

Page 53: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5353

Strutture di controllo: costrutto ‘if’Strutture di controllo: costrutto ‘if’ Sintassi:Sintassi:

if if [condizione] [condizione] {{

[blocco istruzioni][blocco istruzioni]

}}

Esempio:Esempio:

if ($b != 0) {if ($b != 0) {

$c = $a / $b;$c = $a / $b;

}}

Se si vuole che un altro blocco di istruzioni venga eseguito nel caso in cui la condizione risulti falsa, Se si vuole che un altro blocco di istruzioni venga eseguito nel caso in cui la condizione risulti falsa,

si usa il costrutto si usa il costrutto elseelse. Sintassi:. Sintassi:

if if [condizione] [condizione] {{

[blocco istruzioni 1][blocco istruzioni 1]

}}

else {else {

[blocco istruzioni 2][blocco istruzioni 2]

}}

Esempio:Esempio:

if ($colore == “rosso”) {if ($colore == “rosso”) {

echo “Il colore è rosso”;echo “Il colore è rosso”;

}}

else{else{

echo “Il colore NON è rosso”;echo “Il colore NON è rosso”;

}}

Page 54: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5454

Strutture di controllo: costrutto Strutture di controllo: costrutto ‘switch’‘switch’

Sintassi:Sintassi:

switch switch [espressione] [espressione] {{

casecase [valore 1] [valore 1]::

[blocco istruzioni 1];[blocco istruzioni 1];

break;break;

casecase [valore 2] [valore 2]::

[blocco istruzioni 2];[blocco istruzioni 2];

break;break;

…………

}}

Esempio:Esempio:

switch($segno){switch($segno){

case 1:case 1:

echo “E’ uscito il segno 1!”;echo “E’ uscito il segno 1!”;

break;break;

case 2:case 2:

echo “E’ uscito il segno 2!”;echo “E’ uscito il segno 2!”;

break;break;

default:default:

echo “E’ uscito il segno X!”;echo “E’ uscito il segno X!”;

}}

Tramite la parola chiave Tramite la parola chiave default default si può prevedere un caso che deve essere eseguito se tutti i si può prevedere un caso che deve essere eseguito se tutti i

controlli precedenti hanno dato esito negativo.controlli precedenti hanno dato esito negativo.

Page 55: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5555

Strutture di controllo: strutture Strutture di controllo: strutture iterativeiterative

Costrutto Costrutto whilewhile: si utilizza quando si vuole ripetere l’esecuzione di : si utilizza quando si vuole ripetere l’esecuzione di

un blocco di istruzioni, e il numero di iterazioni dipende dal valore un blocco di istruzioni, e il numero di iterazioni dipende dal valore

di una condizione. Dunque ‘while’ è particolarmente utile quando di una condizione. Dunque ‘while’ è particolarmente utile quando

non si sa a priori quante iterazioni dovranno essere effettuate. non si sa a priori quante iterazioni dovranno essere effettuate.

Sintassi:Sintassi:while(while([condizione][condizione]))[blocco istruzioni][blocco istruzioni]

Esempio:Esempio:

$contatore=1;$contatore=1;

$max=10;$max=10;

while($contatore <= $max){while($contatore <= $max){

echo “Ho contato fino a $contatore <br>”;echo “Ho contato fino a $contatore <br>”;

$contatore++;$contatore++;

}}

Page 56: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5656

Strutture di controllo: strutture Strutture di controllo: strutture iterativeiterative

Costrutto Costrutto forfor: si utilizza quando si vuole ripetere l’esecuzione di un blocco : si utilizza quando si vuole ripetere l’esecuzione di un blocco

di istruzioni, e il numero di iterazioni è prefissato. di istruzioni, e il numero di iterazioni è prefissato.

Sintassi:Sintassi:for(for([espr1[espr1]; ]; [espr2][espr2]; ; [espr3][espr3]) {) {[blocco istruzioni][blocco istruzioni]}}

[espr1][espr1]: inizializzazione, espressione da valutare una sola volta;: inizializzazione, espressione da valutare una sola volta;

[espr2][espr2]: condizione da valutare;: condizione da valutare;

[espr3][espr3]: se espr2 è verificata, si esegue [blocco istruzioni] ed [espr3], per : se espr2 è verificata, si esegue [blocco istruzioni] ed [espr3], per

poi tornare alla valutazione di [espr2].poi tornare alla valutazione di [espr2].

Esempio:Esempio:

$max=10;$max=10;for ($contatore=1; $contatore<=$max; $contatore++) {for ($contatore=1; $contatore<=$max; $contatore++) {echo “Ho contato fino a $contatore <br>”;echo “Ho contato fino a $contatore <br>”;$contatore++;$contatore++;}}

Page 57: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5757

Un esempioUn esempio Riprendiamo l’esempio che abbiamo chiamato ‘form2’. Per prima cosa, facciamo Riprendiamo l’esempio che abbiamo chiamato ‘form2’. Per prima cosa, facciamo

una piccola modifica al form html, introducendo la possibilità di scegliere più una piccola modifica al form html, introducendo la possibilità di scegliere più

giorni della settimana per la consegna (e non uno soltanto). Inoltre chiameremo giorni della settimana per la consegna (e non uno soltanto). Inoltre chiameremo

‘collect_info.php’ lo script che elaborerà i dati inviati. Chiameremo il nuovo form ‘collect_info.php’ lo script che elaborerà i dati inviati. Chiameremo il nuovo form

‘form_menu.html’.‘form_menu.html’.

Page 58: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5858

Un esempioUn esempio Ora creiamo lo script ‘collect_info.php’ per elaborare i dati inviati col precedente form. Ora creiamo lo script ‘collect_info.php’ per elaborare i dati inviati col precedente form.

Vogliamo che tale script svolga i seguenti compiti:Vogliamo che tale script svolga i seguenti compiti:

• Se non è stato selezionato alcun giorno di consegna, l’array $_GET[“giorno_settimana”] sarà vuoto e Se non è stato selezionato alcun giorno di consegna, l’array $_GET[“giorno_settimana”] sarà vuoto e

il browser visualizzerà un messaggio di errore. A tale scopo, si può utilizzare la funzione il browser visualizzerà un messaggio di errore. A tale scopo, si può utilizzare la funzione isset()isset()..

• In caso contrario, il browser mostrerà un messaggio di conferma, come nella figura sottostante. Per In caso contrario, il browser mostrerà un messaggio di conferma, come nella figura sottostante. Per

estrarre tutti gli elementi dell’array $_GET[“giorno_settimana”], si userà il costrutto estrarre tutti gli elementi dell’array $_GET[“giorno_settimana”], si userà il costrutto foreachforeach..

Page 59: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

5959

Un esempioUn esempio

Funzione Funzione isset()isset(): controlla se una variabile è stata : controlla se una variabile è stata

definita (ma non se contiene qualche dato).definita (ma non se contiene qualche dato).

Costrutto Costrutto foreachforeach: foreach($array as $variabile): foreach($array as $variabile)

{…} prende ciascun elemento dell’array $array e {…} prende ciascun elemento dell’array $array e

lo inserisce nella variabile $variabile, mentre lo inserisce nella variabile $variabile, mentre

qualunque cosa nelle parentesi graffe è eseguita qualunque cosa nelle parentesi graffe è eseguita

sull’elemento $variabile.sull’elemento $variabile.

Page 60: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6060

Un esempioUn esempio Finora abbiamo sempre supposto che l’utente avrebbe inserito le Finora abbiamo sempre supposto che l’utente avrebbe inserito le

informazioni richieste negli appositi campi.informazioni richieste negli appositi campi.

Di fatto, spesso l’utente dimentica di inserire qualche dato.Di fatto, spesso l’utente dimentica di inserire qualche dato.

Creiamo allora uno script per la convalida del nostro form. Più Creiamo allora uno script per la convalida del nostro form. Più

specificamente, vogliamo progettare uno script che controlli che l’utente specificamente, vogliamo progettare uno script che controlli che l’utente

abbia inserito il proprio nome e abbia selezionato i giorni per la consegna. abbia inserito il proprio nome e abbia selezionato i giorni per la consegna.

Tale script verrà chiamato ‘check_form.php’: questo nome dovrà essere Tale script verrà chiamato ‘check_form.php’: questo nome dovrà essere

sostituito a ‘collect_info.php’ nel form ‘form_menu.html’.sostituito a ‘collect_info.php’ nel form ‘form_menu.html’.

Suggerimenti per lo script:Suggerimenti per lo script:

• Una stringa vuota si indica con Una stringa vuota si indica con “”“”..

• Utilizzare una variabile booleana $errore per gestire le situazioni di errore.Utilizzare una variabile booleana $errore per gestire le situazioni di errore.

• Utilizzare la funzione Utilizzare la funzione isset()isset(), che ha come unico argomento una variabile e , che ha come unico argomento una variabile e

controlla se tale variabile è stata definita.controlla se tale variabile è stata definita.

Page 61: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6161

Un esempioUn esempio

Questo è ciò che vogliamo ottenere se, ad esempio, l‘utente ha Questo è ciò che vogliamo ottenere se, ad esempio, l‘utente ha

regolarmente inserito il nome ma non ha selezionato alcun giorno regolarmente inserito il nome ma non ha selezionato alcun giorno

per la consegna.per la consegna.

Page 62: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6262

Inclusione di file esterniInclusione di file esterni

A volte c’è la necessità di includere (ed A volte c’è la necessità di includere (ed

eseguire) in uno script PHP dei file esterni, eseguire) in uno script PHP dei file esterni,

che possono essere tanto semplici che possono essere tanto semplici

frammenti di codice HTML quanto altri frammenti di codice HTML quanto altri

scripts PHP.scripts PHP.

I costrutti che si usano in questi casi sono I costrutti che si usano in questi casi sono

require require e e includeinclude..

Page 63: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6363

Inclusione di file esterni: costrutti Inclusione di file esterni: costrutti ‘require’ e ‘include’‘require’ e ‘include’

Per entrambi questi costrutti la sintassi è la seguente:Per entrambi questi costrutti la sintassi è la seguente:

require “require “[file][file]””

include “include “[file][file]””

Ad esempio, per inserire in un certo punto del proprio script un’altro script Ad esempio, per inserire in un certo punto del proprio script un’altro script

denominato ‘libreria.php3’, si scriverà require ”libreria.php3” oppure include denominato ‘libreria.php3’, si scriverà require ”libreria.php3” oppure include

“libreria.php3”.“libreria.php3”.

Si noti che la sintassi non prevede l’utilizzo di parentesi tonde (non sono funzioni di Si noti che la sintassi non prevede l’utilizzo di parentesi tonde (non sono funzioni di

PHP, ma più propriamente costrutti del linguaggio).PHP, ma più propriamente costrutti del linguaggio).

IMPORTANTE: IMPORTANTE: con ‘require’ e ‘include’, l’interprete PHP analizza il file incluso con ‘require’ e ‘include’, l’interprete PHP analizza il file incluso

ponendosi in modalità HTML. Pertanto, eventuali frammenti di codice PHP, per essere ponendosi in modalità HTML. Pertanto, eventuali frammenti di codice PHP, per essere

correttamente riconosciuti ed eseguiti, vanno specificati utilizzando le consuete correttamente riconosciuti ed eseguiti, vanno specificati utilizzando le consuete

marcature per l’inserimento del codice PHP. Una volta terminata l’analisi del file marcature per l’inserimento del codice PHP. Una volta terminata l’analisi del file

esterno, l’interprete torna regolarmente in modalità PHP.esterno, l’interprete torna regolarmente in modalità PHP.

Noi useremo i due costrutti ‘require’ e ‘include’ indifferentemente. Per conoscere le Noi useremo i due costrutti ‘require’ e ‘include’ indifferentemente. Per conoscere le

differenze sui due costrutti, si può consultare un buon manuale di PHP.differenze sui due costrutti, si può consultare un buon manuale di PHP.

Page 64: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6464

Inclusione di file esterni: esempioInclusione di file esterni: esempio

Supponiamo di voler realizzare un sito in cui in Supponiamo di voler realizzare un sito in cui in

tutte le pagine compare una barra di navigazione tutte le pagine compare una barra di navigazione

coi link alle varie sezioni del sito. È improbabile coi link alle varie sezioni del sito. È improbabile

pensare di inserire manualmente in ogni pagina pensare di inserire manualmente in ogni pagina

un appropriato frammento HTML, se non altro per un appropriato frammento HTML, se non altro per

evidenti problemi di manutenzione.evidenti problemi di manutenzione.

Usiamo allora PHP, procedendo come segue.Usiamo allora PHP, procedendo come segue.

Page 65: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6565

Inclusione di file esterni: esempioInclusione di file esterni: esempio

1.1. Isoliamo il frammento di HTML corrispondente alla barra Isoliamo il frammento di HTML corrispondente alla barra

di navigazione, e salviamolo in un file, denominato, ad di navigazione, e salviamolo in un file, denominato, ad

esempio, ‘intestazione.html’.esempio, ‘intestazione.html’.

<!-- file intestazione.html === INIZIO --><!-- file intestazione.html === INIZIO -->

<body color=“black” bgcolor=“white”><body color=“black” bgcolor=“white”>

<a href=“index.php3”>Home page</a><a href=“index.php3”>Home page</a>

<a href=“pagina2.php3”>Pagina 2</a><a href=“pagina2.php3”>Pagina 2</a>

<hr size=“1”><hr size=“1”>

<!-- file intestazione.html === FINE --><!-- file intestazione.html === FINE -->

Page 66: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6666

Inclusione di file esterni: esempioInclusione di file esterni: esempio

2.2. Realizziamo ora le varie pagine del sito. Una volta completata ciascuna pagina, includeremo il Realizziamo ora le varie pagine del sito. Una volta completata ciascuna pagina, includeremo il

file contenente la barra di navigazione.file contenente la barra di navigazione.

<!-- file index.php3 --><!-- file index.php3 -->

<html><html>

<head><head>

<title>Pagina che include un file esterno</title><title>Pagina che include un file esterno</title>

</head></head>

<? require “intestazione.html” ?><? require “intestazione.html” ?>

<h1>Pagina che include un file esterno</h1><h1>Pagina che include un file esterno</h1>

[…contenuto della pagina…][…contenuto della pagina…]

</body></body>

</html></html>

Si noti che nella pagina ‘index.php3’ è stato omesso il tag <body>, in quanto già presente nel Si noti che nella pagina ‘index.php3’ è stato omesso il tag <body>, in quanto già presente nel

file ‘intestazione.html’.file ‘intestazione.html’.

Page 67: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6767

Una barra di navigazione Una barra di navigazione “intelligente”“intelligente”

Riprendiamo il precedente esempio della barra di Riprendiamo il precedente esempio della barra di

navigazione per svilupparlo ulteriormente.navigazione per svilupparlo ulteriormente.

Ciò che vogliamo fare ora è costruire una barra di Ciò che vogliamo fare ora è costruire una barra di

navigazione in grado di evidenziare automaticamente la navigazione in grado di evidenziare automaticamente la

voce corrispondente alla pagina corrente.voce corrispondente alla pagina corrente.

Genereremo la nostra barra di navigazione utilizzando uno Genereremo la nostra barra di navigazione utilizzando uno

script apposito, denominato ‘barra.php’; tale script verrà script apposito, denominato ‘barra.php’; tale script verrà

richiamato in tutte le pagine in cui vorremo visualizzare la richiamato in tutte le pagine in cui vorremo visualizzare la

barra.barra.

Page 68: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6868

Una barra di navigazione Una barra di navigazione “intelligente”“intelligente”

Il primo passo consiste nel costruire una struttura dati Il primo passo consiste nel costruire una struttura dati

appropriata, nel nostro caso un array associativo, che chiameremo appropriata, nel nostro caso un array associativo, che chiameremo

$links, contenente come elementi i link che vogliamo inserire nella $links, contenente come elementi i link che vogliamo inserire nella

barra di navigazione. Più specificamente, $links sarà una tabella barra di navigazione. Più specificamente, $links sarà una tabella

hash, in cui la chiave di un elemento sarà l’indirizzo della pagina hash, in cui la chiave di un elemento sarà l’indirizzo della pagina

web corrispondente, e il valore una sua breve descrizione.web corrispondente, e il valore una sua breve descrizione.

$links = array( “index.php” => “Home page”,$links = array( “index.php” => “Home page”,

““pagina2.php” => “Pagina 2”,pagina2.php” => “Pagina 2”,

““pagina3.php” => “Pagina 3”pagina3.php” => “Pagina 3”

););

Page 69: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

6969

Una barra di navigazione Una barra di navigazione “intelligente”“intelligente”

Per far sì che venga evidenziata la voce corrispondente alla Per far sì che venga evidenziata la voce corrispondente alla

pagina corrente, ci sono sostanzialmente due modi: pagina corrente, ci sono sostanzialmente due modi:

stabilire di volta in volta quale voce evidenziare, oppure stabilire di volta in volta quale voce evidenziare, oppure

fare in modo che ciò avvenga in modo automatico. fare in modo che ciò avvenga in modo automatico.

Quest’ultimo approccio sarà quello che useremo noi.Quest’ultimo approccio sarà quello che useremo noi.

Confronteremo il nome del file della pagina corrente con Confronteremo il nome del file della pagina corrente con

quelli contenuti in $links. Per fare ciò, useremo la variabile quelli contenuti in $links. Per fare ciò, useremo la variabile

$_SERVER[“PHP_SELF”], che contiene il percorso dello script $_SERVER[“PHP_SELF”], che contiene il percorso dello script

PHP corrente. Poiché a noi interessa solo il nome del file e PHP corrente. Poiché a noi interessa solo il nome del file e

non l’intero percorso, utilizziamo la funzione non l’intero percorso, utilizziamo la funzione basename()basename()

per estrarlo.per estrarlo.

Page 70: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7070

Una barra di navigazione Una barra di navigazione “intelligente”“intelligente”

Qui sotto viene specificato il codice PHP per visualizzare una tale barra di Qui sotto viene specificato il codice PHP per visualizzare una tale barra di

navigazione; come si vede, racchiuderemo ogni link della barra di navigazione tra navigazione; come si vede, racchiuderemo ogni link della barra di navigazione tra

parentesi quadre, ad eccezione di quello della pagina corrente, visualizzato in parentesi quadre, ad eccezione di quello della pagina corrente, visualizzato in

grassetto e senza collegamento ipertestuale.grassetto e senza collegamento ipertestuale.

<?php<?php

// Nome del file dello script corrente// Nome del file dello script corrente

$pagina_corrente = basename($_SERVER[“PHP_SELF”]);$pagina_corrente = basename($_SERVER[“PHP_SELF”]);

// Riga orizzontale prima dei links// Riga orizzontale prima dei links

echo “<hr>\n”;echo “<hr>\n”;

// Iniziamo a scorrere l’array// Iniziamo a scorrere l’array

foreach ($links as $url=>$desc) {foreach ($links as $url=>$desc) {

if ($url == $pagina_corrente) {if ($url == $pagina_corrente) {

echo “<b>$desc</b>”;echo “<b>$desc</b>”;

} else {} else {

echo “[<a href=\”$url\”>$desc</a>]”;echo “[<a href=\”$url\”>$desc</a>]”;

}}

}}

// Riga orizzontale dopo i links// Riga orizzontale dopo i links

echo “<hr>\n”;echo “<hr>\n”;

?>?>

Page 71: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7171

Una barra di navigazione Una barra di navigazione “intelligente”“intelligente”

Ora vediamo come inserire la nostra barra di navigazione nelle pagine del sito.Ora vediamo come inserire la nostra barra di navigazione nelle pagine del sito.

<!-- file index.php --><!-- file index.php -->

<html><html>

<head><head>

<title>Barra di navigazione intelligente</title><title>Barra di navigazione intelligente</title>

</head></head>

<body><body>

<? require “barra.php3” ?><? require “barra.php3” ?>

<h1>Barra di navigazione intelligente</h1><h1>Barra di navigazione intelligente</h1>

<h2>Prima pagina</h2><h2>Prima pagina</h2>

<p>Questa è la home page; in alto dovrebbe essere visibile la barra di <p>Questa è la home page; in alto dovrebbe essere visibile la barra di

navigazione…navigazione…

</body></body>

</html></html>

Page 72: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7272

I cookiesI cookies

I I cookiescookies sono un meccanismo tramite il quale delle sono un meccanismo tramite il quale delle

applicazioni lato server possono memorizzare e recuperare applicazioni lato server possono memorizzare e recuperare

informazioni sul client.informazioni sul client.

In tal modo, ad ogni visitatore viene associato uno ‘stato’.In tal modo, ad ogni visitatore viene associato uno ‘stato’.

In PHP, tutte le operazioni di scrittura, modifica o In PHP, tutte le operazioni di scrittura, modifica o

cancellazione relative ai cookies sono gestite dalla funzione cancellazione relative ai cookies sono gestite dalla funzione

setcookie()setcookie()..

La funzione setcookie() va necessariamente invocata prima La funzione setcookie() va necessariamente invocata prima

di inviare alcunché al browser, in quanto i cookies vengono di inviare alcunché al browser, in quanto i cookies vengono

trasmessi sotto forma di headers HTTP. trasmessi sotto forma di headers HTTP.

Page 73: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7373

I cookies: sintassiI cookies: sintassi La funzione setcookie() ha due argomenti principali, entrambi obbligatori: il La funzione setcookie() ha due argomenti principali, entrambi obbligatori: il

nome da assegnare al cookie e il suo valore.nome da assegnare al cookie e il suo valore.

Es.: per memorizzare nel browser di un utente un cookie di nome Es.: per memorizzare nel browser di un utente un cookie di nome

$nomeutente e avente come contenuto la stringa “miosito”, l’istruzione da $nomeutente e avente come contenuto la stringa “miosito”, l’istruzione da

utilizzare sarebbe:utilizzare sarebbe:

setcookie(“nomeutente” , “miosito”);setcookie(“nomeutente” , “miosito”);

Ci sono poi altri argomenti opzionali per setcookie(), quali la scadenza del Ci sono poi altri argomenti opzionali per setcookie(), quali la scadenza del

cookie, il percorso e altri ancora.cookie, il percorso e altri ancora.

Per modificare un cookie occorre richiamare la funzione setcookie() e Per modificare un cookie occorre richiamare la funzione setcookie() e

modificarne il valore. Per cancellare un cookie si può assegnare ad esso un modificarne il valore. Per cancellare un cookie si può assegnare ad esso un

valore nullo oppure impostarne la scadenza ad una data passata.valore nullo oppure impostarne la scadenza ad una data passata.

I cookies e il loro contenuto sono disponibili nell’array superglobale I cookies e il loro contenuto sono disponibili nell’array superglobale

$_COOKIE.$_COOKIE.

Page 74: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7474

I cookies: esempioI cookies: esempio

Realizziamo una pagina PHP che ci dice la data e l’ora dell’ultimo Realizziamo una pagina PHP che ci dice la data e l’ora dell’ultimo

accesso del visitatore corrente al nostro sito.accesso del visitatore corrente al nostro sito.

Per fare ciò, definiamo un cookie, denominato “ultimavisita”.Per fare ciò, definiamo un cookie, denominato “ultimavisita”.

In generale, se vogliamo che rimanga memoria delle informazioni In generale, se vogliamo che rimanga memoria delle informazioni

contenute nel cookie, dobbiamo impostare una scadenza al cookie contenute nel cookie, dobbiamo impostare una scadenza al cookie

stesso. Nel nostro caso, non impostando alcuna scadenza, il stesso. Nel nostro caso, non impostando alcuna scadenza, il

cookie scompare alla chiusura del browser.cookie scompare alla chiusura del browser.

Al nostro cookie “ultimavisita” assegneremo il valore ottenuto Al nostro cookie “ultimavisita” assegneremo il valore ottenuto

invocando la funzione invocando la funzione time()time(), che consiste nel numero di secondi , che consiste nel numero di secondi

trascorsi dalla cosiddetta ‘Unix epoch’ (che è il 1 gennaio 1970).trascorsi dalla cosiddetta ‘Unix epoch’ (che è il 1 gennaio 1970).

Page 75: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7575

I cookies: esempioI cookies: esempio<?php<?php

// saluto predefinito// saluto predefinito

$saluto = “Benvenuto”;$saluto = “Benvenuto”;

//innanzitutto vediamo se esiste il cookie//innanzitutto vediamo se esiste il cookie

if (isset($_COOKIE[“ultimavisita”])) {if (isset($_COOKIE[“ultimavisita”])) {

$saluto = “Bentornato!”;$saluto = “Bentornato!”;

}}

setcookie(“ultimavisita”, time());setcookie(“ultimavisita”, time());

?>?>

<html><html>

<head><head>

<title><? echo $saluto ?></title><title><? echo $saluto ?></title>

</head></head>

<body><body>

<h1><? echo $saluto ?></h1><h1><? echo $saluto ?></h1>

<?php<?php

if (isset($_COOKIE[“ultimavisita”])) {if (isset($_COOKIE[“ultimavisita”])) {

echo “L’ultima volta sei stato qui il “ . date(“d/m/Y”);echo “L’ultima volta sei stato qui il “ . date(“d/m/Y”);

echo “alle ore ” . date(“H:i:s”, $_COOKIE[“ultimavisita”]);echo “alle ore ” . date(“H:i:s”, $_COOKIE[“ultimavisita”]);

//link per cancellare il cookie//link per cancellare il cookie

echo “<p><a href=\”cancella.php\”>Cancella il cookie</a>”;echo “<p><a href=\”cancella.php\”>Cancella il cookie</a>”;

} else {} else {

echo “Non sei mai stato qui prima?”;echo “Non sei mai stato qui prima?”;

}}

?>?>

</body></body>

</html> </html>

Page 76: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7676

Le date in PHPLe date in PHP In PHP le date si rappresentano sotto forma di In PHP le date si rappresentano sotto forma di timestamptimestamp, vale a dire numeri interi , vale a dire numeri interi

corrispondenti al numero di secondi trascorsi dalla ‘Unix epoch’. Es.: le ore 0:00:00 corrispondenti al numero di secondi trascorsi dalla ‘Unix epoch’. Es.: le ore 0:00:00

del 1 gennaio 2001 corrispondono al timestamp 978303600.del 1 gennaio 2001 corrispondono al timestamp 978303600.

Per passare dalla data al timestamp corrispondente si usa la funzione Per passare dalla data al timestamp corrispondente si usa la funzione mktime()mktime(). I . I

parametri vanno passati in quest’ordine: ore minuti secondi mese giorno anno. Es.: parametri vanno passati in quest’ordine: ore minuti secondi mese giorno anno. Es.:

per determinare e visualizzare il precedente timestamp l’istruzione è:per determinare e visualizzare il precedente timestamp l’istruzione è:

echo mktime(0,0,0,1,1,2001);echo mktime(0,0,0,1,1,2001);

Per passare dal timestamp alla data corrispondente si usa la funzione Per passare dal timestamp alla data corrispondente si usa la funzione date()date(). Essa . Essa

prevede due argomenti: il primo, obbligatorio, è una stringa che determina come prevede due argomenti: il primo, obbligatorio, è una stringa che determina come

formattare la data; il secondo, opzionale, è il timestamp da formattare. Se manca il formattare la data; il secondo, opzionale, è il timestamp da formattare. Se manca il

secondo argomento, date() considererà automaticamente il timestamp corrente.secondo argomento, date() considererà automaticamente il timestamp corrente.

Alcuni esempi di stringhe per i formati di data:Alcuni esempi di stringhe per i formati di data:

• Formato gg/mm/aaaa: date(“d/m/Y”);Formato gg/mm/aaaa: date(“d/m/Y”);

• Come sopra, ma senza zero davanti a giorni e mesi di una sola cifra: date(“j/n/Y”);Come sopra, ma senza zero davanti a giorni e mesi di una sola cifra: date(“j/n/Y”);

• Se vogliamo visualizzare i giorni trascorsi dall’inizio dell’anno: echo date(“z”);Se vogliamo visualizzare i giorni trascorsi dall’inizio dell’anno: echo date(“z”);

Page 77: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7777

Le date in PHP: funzione Le date in PHP: funzione checkdate()checkdate()

Se vogliamo validare una data (cioè controllare che quella data Se vogliamo validare una data (cioè controllare che quella data

effettivamente esista) possiamo usare la funzione effettivamente esista) possiamo usare la funzione checkdate()checkdate()..

Esempio:Esempio:

//verifichiamo la data 31 aprile 2001//verifichiamo la data 31 aprile 2001

$giorno=31;$giorno=31;

$mese=4;$mese=4;

$anno=2001;$anno=2001;

echo “La data $giorno/$mese/$anno”;echo “La data $giorno/$mese/$anno”;

if (checkdate($mese,$giorno,$anno)) {if (checkdate($mese,$giorno,$anno)) {

echo “è corretta.”;echo “è corretta.”;

} else {} else {

echo “non è valida!”;echo “non è valida!”;

}}

Page 78: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7878

Le date in PHP: ancora sui Le date in PHP: ancora sui timestamptimestamp

A volte è utile conoscere il timestamp relativo a certe date, ad esempio per poter A volte è utile conoscere il timestamp relativo a certe date, ad esempio per poter

confrontare due date o effettuare calcoli aritmetici coinvolgenti due o più date. I due confrontare due date o effettuare calcoli aritmetici coinvolgenti due o più date. I due

esempi seguenti dovrebbero rendere più chiara la precedente affermazione.esempi seguenti dovrebbero rendere più chiara la precedente affermazione.

Esempio 1:Esempio 1:

//confronto fra due date//confronto fra due date$data1=mktime(0,0,0,1,1,2001);$data1=mktime(0,0,0,1,1,2001);$data2=mktime(0,0,0,7,29,2001);$data2=mktime(0,0,0,7,29,2001);echo “La prima data è”;echo “La prima data è”;if ($data1 < $data2) {if ($data1 < $data2) {echo “precedente”;echo “precedente”;} else {} else {echo “successiva”;echo “successiva”;}}echo “alla seconda”;echo “alla seconda”;

Esempio 2:Esempio 2:

//numero di giorni tra due date arbitrarie//numero di giorni tra due date arbitrarie$data1=mktime(0,0,0,1,1,2001);$data1=mktime(0,0,0,1,1,2001);$data2=mktime(0,0,0,7,29,2001);$data2=mktime(0,0,0,7,29,2001);echo “Tra le due date ci sono”;echo “Tra le due date ci sono”;echo ($data2 - $data1)/60*60*24;echo ($data2 - $data1)/60*60*24;echo “giorni”;echo “giorni”;

Page 79: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

7979

Un esempioUn esempio In questo esempio vogliamo creare un cookie che saluti un visitatore In questo esempio vogliamo creare un cookie che saluti un visitatore

frequente di una pagina web. Tipicamente, il contenuto di tale cookie sarà frequente di una pagina web. Tipicamente, il contenuto di tale cookie sarà

un saluto personalizzato relativo all’utente connesso.un saluto personalizzato relativo all’utente connesso.

Il primo passo consisterà nella creazione della pagina principale, Il primo passo consisterà nella creazione della pagina principale,

denominata ‘main_page.php’, in cui viene mostrato il contenuto del cookie denominata ‘main_page.php’, in cui viene mostrato il contenuto del cookie

se questo già esiste (insieme alla possibilità di cambiare il contenuto), se questo già esiste (insieme alla possibilità di cambiare il contenuto),

altrimenti viene proposto un link per la sua creazione (e dunque per la altrimenti viene proposto un link per la sua creazione (e dunque per la

personalizzazione della pagina).personalizzazione della pagina).

Il secondo passo consisterà invece nella creazione dello script Il secondo passo consisterà invece nella creazione dello script

‘add_user.php’, tramite il quale l’utente può effettivamente inserire i propri ‘add_user.php’, tramite il quale l’utente può effettivamente inserire i propri

dati per personalizzare la pagina.dati per personalizzare la pagina.

Il terzo e ultimo passo consisterà infine nella scrittura dello script Il terzo e ultimo passo consisterà infine nella scrittura dello script

‘set_cookie.php’, tramite il quale i dati inseriti dall’utente verranno gestiti.‘set_cookie.php’, tramite il quale i dati inseriti dall’utente verranno gestiti.

Page 80: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8080

Un esempioUn esempio

Risultato di ‘main_page.php’.Risultato di ‘main_page.php’.

Page 81: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8181

Un esempioUn esempio

Risultato di ‘add_user.php’.Risultato di ‘add_user.php’.

Page 82: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8282

Un esempioUn esempio

Risultato di ‘set_cookie.php’.Risultato di ‘set_cookie.php’.

Page 83: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8383

PHP e MySQL: cos’è MySQLPHP e MySQL: cos’è MySQL

MySQL è un Data Base Management System, cioè un MySQL è un Data Base Management System, cioè un

software per la gestione di basi di dati. Si tratta di un software per la gestione di basi di dati. Si tratta di un

sistema molto diffuso e utilizzato, viste le ottime prestazioni sistema molto diffuso e utilizzato, viste le ottime prestazioni

e nonostante non possieda molte caratteristiche avanzate.e nonostante non possieda molte caratteristiche avanzate.

Noi cercheremo di imparare come si fa, a partire da uno Noi cercheremo di imparare come si fa, a partire da uno

script PHP, a collegarsi a un server MySQL e quindi ad script PHP, a collegarsi a un server MySQL e quindi ad

eseguire operazioni sui database usando il linguaggio SQL.eseguire operazioni sui database usando il linguaggio SQL.

Non impareremo in questo corso a usare MySQL, anche Non impareremo in questo corso a usare MySQL, anche

perché dovrebbe essere già noto… Dunque si assumerà perché dovrebbe essere già noto… Dunque si assumerà

una conoscenza di base di MySQL, nonché che il una conoscenza di base di MySQL, nonché che il

programma sia correttamente installato.programma sia correttamente installato.

Page 84: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8484

PHP e MySQL: accesso a un PHP e MySQL: accesso a un database MySQLdatabase MySQL

L’accesso a un database MySQL avviene tramite autenticazione.L’accesso a un database MySQL avviene tramite autenticazione.

Ciò che serve sono le informazioni seguenti:Ciò che serve sono le informazioni seguenti:

• nome dell’host su cui è in esecuzione MySQL;nome dell’host su cui è in esecuzione MySQL;

• nome del nostro database;nome del nostro database;

• nostro nome utente;nostro nome utente;

• password relativa, fornita dall’amministratore di sistema.password relativa, fornita dall’amministratore di sistema.

Tali parametri possono essere salvati in apposite variabili. Tali parametri possono essere salvati in apposite variabili.

Esempio:Esempio:

• $dbhost=“localhost”;$dbhost=“localhost”;

• $dbname=“dbprova”;$dbname=“dbprova”;

• $dbuser=“luca”;$dbuser=“luca”;

• $dbpass=“secret”;$dbpass=“secret”;

Page 85: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8585

PHP e MySQL: funzione PHP e MySQL: funzione mysql_connect()mysql_connect()

Per instaurare la connessione col server MySQL si usa la funzione Per instaurare la connessione col server MySQL si usa la funzione

mysql_connect()mysql_connect(). I parametri necessari a tale funzione sono, . I parametri necessari a tale funzione sono,

nell’ordine, nome dell’host, nome utente e password.nell’ordine, nome dell’host, nome utente e password.

Esempio:Esempio:

$conn=mysql_connect($dbhost,$dbuser,$dbpass)$conn=mysql_connect($dbhost,$dbuser,$dbpass)

or die(“Impossibile collegarsi al server MySQL.”);or die(“Impossibile collegarsi al server MySQL.”);

La funzione mysql_connect() restituisce un valore, memorizzato La funzione mysql_connect() restituisce un valore, memorizzato

nella variabile $conn, che serve da identificativo della connessione nella variabile $conn, che serve da identificativo della connessione

stabilita. Se la connessione non è possibile, la funzione restituisce stabilita. Se la connessione non è possibile, la funzione restituisce

un valore nullo e viene visualizzato un messaggio di errore che un valore nullo e viene visualizzato un messaggio di errore che

comunica all’utente l’impossibilità della connessione.comunica all’utente l’impossibilità della connessione.

Page 86: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8686

PHP e MySQL: funzione PHP e MySQL: funzione mysql_select_db()mysql_select_db()

Successivamente occorre scegliere il database con cui lavorare; Successivamente occorre scegliere il database con cui lavorare;

ciò si può fare con la funzione ciò si può fare con la funzione mysql_select_db()mysql_select_db(). A tale funzione . A tale funzione

va fornito obbligatoriamente il nome del database, e va fornito obbligatoriamente il nome del database, e

opzionalmente l’identificativo della connessione (nel senso che, se opzionalmente l’identificativo della connessione (nel senso che, se

tale identificativo non viene indicato, viene utilizzata di default tale identificativo non viene indicato, viene utilizzata di default

l’ultima connessione aperta). l’ultima connessione aperta).

Esempio:Esempio:

mysql_select_db($dbname,$conn)mysql_select_db($dbname,$conn)

or die(“Impossibile selezionare il database $dbname.”);or die(“Impossibile selezionare il database $dbname.”);

Come prima, se la funzione restituisce un valore nullo, viene Come prima, se la funzione restituisce un valore nullo, viene

visualizzato un messaggio di errore per l’utente.visualizzato un messaggio di errore per l’utente.

Page 87: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8787

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Ora è il momento di capire come funziona l’interazione con Ora è il momento di capire come funziona l’interazione con

MySQL. Siccome tale interazione avviene tramite il MySQL. Siccome tale interazione avviene tramite il

linguaggio SQL, ripassiamo alcuni dei comandi di tale linguaggio SQL, ripassiamo alcuni dei comandi di tale

linguaggio.linguaggio.

Naturalmente, questo non è un corso di MySQL, dunque Naturalmente, questo non è un corso di MySQL, dunque

l’unica cosa che faremo in questo ripasso sarà di rivedere l’unica cosa che faremo in questo ripasso sarà di rivedere

alcune delle cose già a voi note. In particolare, vedremo alcune delle cose già a voi note. In particolare, vedremo

unicamente come accedere e utilizzare MySQL su una unicamente come accedere e utilizzare MySQL su una

piattaforma Linux.piattaforma Linux.

Page 88: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8888

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Per accedere a MySQL da Linux è sufficiente digitare Per accedere a MySQL da Linux è sufficiente digitare

‘mysql’ nella riga di comando.‘mysql’ nella riga di comando.

Da questo momento, la riga di comando avrà l’aspetto Da questo momento, la riga di comando avrà l’aspetto

seguente:seguente:

mysql >mysql >

Eventualmente, si può accedere direttamente a un Eventualmente, si può accedere direttamente a un

database (se già ne abbiamo creato almeno uno) digitando database (se già ne abbiamo creato almeno uno) digitando

‘mysql nome_database’.‘mysql nome_database’.

Per uscire da MySQL, basta digitare ‘exit’.Per uscire da MySQL, basta digitare ‘exit’.

Page 89: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

8989

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Una volta entrati in MySQL, per creare un database si usa il Una volta entrati in MySQL, per creare un database si usa il

costrutto CREATE DATABASE. Esempio:costrutto CREATE DATABASE. Esempio:

msyql > CREATE DATABASE test_db;msyql > CREATE DATABASE test_db;

Per entrare in un database già creato, come appena visto, si può Per entrare in un database già creato, come appena visto, si può

agire direttamente dalla linea di comando al momento agire direttamente dalla linea di comando al momento

dell’accesso a MySQL.dell’accesso a MySQL.

O, invece, dopo l’accesso, si utilizza USE:O, invece, dopo l’accesso, si utilizza USE:

mysql > USE test_db;mysql > USE test_db;

Nota: in MySQL si possono usare indifferentemente maiuscole e Nota: in MySQL si possono usare indifferentemente maiuscole e

minuscole, ma è considerato buona norma usare le lettere minuscole, ma è considerato buona norma usare le lettere

maiuscole per i comandi di MySQL e quelle minuscole per i nomi maiuscole per i comandi di MySQL e quelle minuscole per i nomi

definiti dall’utente.definiti dall’utente.

Page 90: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9090

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Una volta entrati in un database, per creare una tabella si utilizza l’espressione Una volta entrati in un database, per creare una tabella si utilizza l’espressione

CREATE TABLE. Dopodichè, racchiusa tra parentesi tonde, si inserisce la struttura CREATE TABLE. Dopodichè, racchiusa tra parentesi tonde, si inserisce la struttura

della tabella che si intende definire, inserendo i nomi delle colonne e i tipi di dati da della tabella che si intende definire, inserendo i nomi delle colonne e i tipi di dati da

inserire in ciascuna colonna. Nell’esempio che segue è specificata l’esatta sintassi da inserire in ciascuna colonna. Nell’esempio che segue è specificata l’esatta sintassi da

usare:usare:

mysql > CREATE TABLE personale (mysql > CREATE TABLE personale (

-> nome VARCHAR(20),-> nome VARCHAR(20),

-> indirizzo VARCHAR(30),-> indirizzo VARCHAR(30),

-> città VARCHAR(20),-> città VARCHAR(20),

-> nazione VARCHAR(20),-> nazione VARCHAR(20),

-> ID INT NOT NULL AUTO_INCREMENT,-> ID INT NOT NULL AUTO_INCREMENT,

-> PRIMARY KEY (ID));-> PRIMARY KEY (ID));

Per visualizzare la struttura di una tabella già creata si usa DESCRIBE. Esempio:Per visualizzare la struttura di una tabella già creata si usa DESCRIBE. Esempio:

mysql > DESCRIBE personale;mysql > DESCRIBE personale;

Page 91: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9191

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Per inserire informazioni in una tabella ci sono due possibilità:Per inserire informazioni in una tabella ci sono due possibilità:

• Se si vogliono inserire parecchi dati in una volta sola, conviene scrivere i dati da Se si vogliono inserire parecchi dati in una volta sola, conviene scrivere i dati da

inserire in un file di testo, ad esempio nome_file.txt, separando i contenuti da inserire in un file di testo, ad esempio nome_file.txt, separando i contenuti da

immettere nei vari campi con dei caratteri di tabulazione; fatto questo, si immettere nei vari campi con dei caratteri di tabulazione; fatto questo, si

possono trasferire i contenuti del file nella tabella con l’espressione LOAD DATA possono trasferire i contenuti del file nella tabella con l’espressione LOAD DATA

nel modo seguente:nel modo seguente:

mysql > LOAD DATA INFILE nome_file.txt INTO TABLE nome_tabella;mysql > LOAD DATA INFILE nome_file.txt INTO TABLE nome_tabella;

• Se invece si intende inserire un singolo record, conviene usare l’espressione Se invece si intende inserire un singolo record, conviene usare l’espressione

INSERT. Ad esempio, nel caso della tabella ‘personale’ definita INSERT. Ad esempio, nel caso della tabella ‘personale’ definita

precedentemente, si potrebbe procedere come segue:precedentemente, si potrebbe procedere come segue:

mysql >INSERT INTO personale mysql >INSERT INTO personale [(nome,indirizzo, città, paese)][(nome,indirizzo, città, paese)]

-> VALUES (‘nome_1’,-> VALUES (‘nome_1’,

-> ‘indirizzo_1’,-> ‘indirizzo_1’,

-> ‘città_1’,-> ‘città_1’,

-> ‘nazione_1’, ‘ ’);-> ‘nazione_1’, ‘ ’);

Page 92: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9292

PHP e MySQL: comandi SQLPHP e MySQL: comandi SQL

Per cercare dati all’interno di una tabella, si usa l’espressione SELECT. Il Per cercare dati all’interno di una tabella, si usa l’espressione SELECT. Il

formato di base di tale espressione è il seguente:formato di base di tale espressione è il seguente:

SELECT colonna_1, colonna_2, …SELECT colonna_1, colonna_2, …

FROM nome_tabella;FROM nome_tabella;

Nella scelta delle colonne si può usare anche il carattere jolly *. Nella scelta delle colonne si può usare anche il carattere jolly *.

L’espressione ‘SELECT * FROM personale’ estrae tutte le colonne dalla L’espressione ‘SELECT * FROM personale’ estrae tutte le colonne dalla

tabella ‘personale’.tabella ‘personale’.

Per scegliere all’interno delle colonne che si desiderano investigare Per scegliere all’interno delle colonne che si desiderano investigare

soltanto alcuni record, si utilizza l’espressione WHERE, eventualmente in soltanto alcuni record, si utilizza l’espressione WHERE, eventualmente in

combinazione con gli operatori booleani, quali AND, OR. Esempio:combinazione con gli operatori booleani, quali AND, OR. Esempio:

mysql > SELECT nome, nazione FROM personalemysql > SELECT nome, nazione FROM personale

-> WHERE nome=“nome_scelto” AND nazione=“nazione_scelta”;-> WHERE nome=“nome_scelto” AND nazione=“nazione_scelta”;

Page 93: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9393

PHP e MySQL: funzione PHP e MySQL: funzione mysql_query()mysql_query()

Dopo questo breve ripasso possiamo tornare ad occuparci di PHP. Come già preannunciato, Dopo questo breve ripasso possiamo tornare ad occuparci di PHP. Come già preannunciato,

vogliamo vedere ora come funziona l’interazione fra PHP e MySQL.vogliamo vedere ora come funziona l’interazione fra PHP e MySQL.

Innanzitutto, vediamo come fare a creare una tabella di un database all’interno di uno script PHP. Innanzitutto, vediamo come fare a creare una tabella di un database all’interno di uno script PHP.

Più precisamente, nell’esempio che segue costruiremo una semplice rubrica telefonica.Più precisamente, nell’esempio che segue costruiremo una semplice rubrica telefonica.

La prima cosa da fare è definire una variabile contenente l’espressione scritta in sql per impostare La prima cosa da fare è definire una variabile contenente l’espressione scritta in sql per impostare

la nostra tabella:la nostra tabella:

$sql=“CREATE TABLE rubrica (”$sql=“CREATE TABLE rubrica (”

. “nome VARCHAR(40), cognome VARCHAR(40), telefono VARCHAR(20)”. “nome VARCHAR(40), cognome VARCHAR(40), telefono VARCHAR(20)”

. “ID INT NOT NULL AUTO_INCREMENT”. “ID INT NOT NULL AUTO_INCREMENT”

. “PRIMARY KEY (ID))”;. “PRIMARY KEY (ID))”;

Successivamente, per eseguire effettivamente il comando sql, occorre utilizzare la funzione Successivamente, per eseguire effettivamente il comando sql, occorre utilizzare la funzione

mysql_query()mysql_query()::

$res=mysql_query($sql,$conn)$res=mysql_query($sql,$conn)

or die(“Errore:” . mysql_error());or die(“Errore:” . mysql_error());

In caso di errori relativi alla query, viene restituito un messaggio di errore, nel quale la funzione In caso di errori relativi alla query, viene restituito un messaggio di errore, nel quale la funzione

mysql_error()mysql_error() inserisce anche una descrizione del tipo di errore che si è verificato. inserisce anche una descrizione del tipo di errore che si è verificato.

In maniera del tutto analoga si procede per inserire dati in una tabella. Per esercizio, provate ora a In maniera del tutto analoga si procede per inserire dati in una tabella. Per esercizio, provate ora a

scrivere il codice PHP per inserire i nominativi che preferite nella rubrica appena definita.scrivere il codice PHP per inserire i nominativi che preferite nella rubrica appena definita.

Page 94: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9494

PHP e MySQL: funzione PHP e MySQL: funzione mysql_fetch_row()mysql_fetch_row()

È invece lievemente diverso il caso di un’interrogazione del database. In È invece lievemente diverso il caso di un’interrogazione del database. In

questa situazione, infatti, c’è un risultato da prelevare e visualizzare. Una questa situazione, infatti, c’è un risultato da prelevare e visualizzare. Una

possibile funzione PHP da utilizzare a tale scopo è possibile funzione PHP da utilizzare a tale scopo è mysql_fetch_row()mysql_fetch_row()::

$sql=“SELECT telefono FROM rubrica”$sql=“SELECT telefono FROM rubrica”. “WHERE nome=‘Luca’ AND cognome=‘Ferrari’ ”;. “WHERE nome=‘Luca’ AND cognome=‘Ferrari’ ”;$res=mysql_query($sql,$conn)$res=mysql_query($sql,$conn)or die(“Errore:” . mysql_error());or die(“Errore:” . mysql_error());$info=mysql_fetch_row($res);$info=mysql_fetch_row($res);echo “Il mio numero di telefono è ” . $info[0];echo “Il mio numero di telefono è ” . $info[0];

Come si vede bene dall’esempio, la funzione mysql_fetch_row recupera i Come si vede bene dall’esempio, la funzione mysql_fetch_row recupera i

risultati dell’espressione sql in oggetto (nel nostro caso quella contenuta in risultati dell’espressione sql in oggetto (nel nostro caso quella contenuta in

$res) e li inserisce in un array.$res) e li inserisce in un array.

L’ultima riga di comando visualizza il numero di telefono dei record L’ultima riga di comando visualizza il numero di telefono dei record

recuperati, che è l’elemento di posto 0 (l’unico!) dell’array $info.recuperati, che è l’elemento di posto 0 (l’unico!) dell’array $info.

Page 95: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9595

PHP e MySQL: funzione PHP e MySQL: funzione mysql_close()mysql_close()

Per chiudere la connessione col server MySQL si Per chiudere la connessione col server MySQL si

può utilizzare la funzione può utilizzare la funzione mysql_close() mysql_close() con la con la

sintassi ‘mysql_close($conn)’. Non è comunque sintassi ‘mysql_close($conn)’. Non è comunque

un passo necessario, in quanto tutte le un passo necessario, in quanto tutte le

connessioni rimaste aperte al termine dello script connessioni rimaste aperte al termine dello script

vengono chiuse automaticamente.vengono chiuse automaticamente.

Page 96: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9696

Le sessioni: oltre i cookiesLe sessioni: oltre i cookies

Come abbiamo visto in precedenza, i cookies servono per Come abbiamo visto in precedenza, i cookies servono per

mantenere uno stato, memorizzando e recuperando informazioni mantenere uno stato, memorizzando e recuperando informazioni

sul client.sul client.

Tuttavia, il meccanismo dei cookies presenta diverse limitazioni Tuttavia, il meccanismo dei cookies presenta diverse limitazioni

intrinseche.intrinseche.

Ad esempio, il client ha la possibilità di disabilitare i cookies, Ad esempio, il client ha la possibilità di disabilitare i cookies,

mentre noi vorremmo poter mantenere uno stato anche in questo mentre noi vorremmo poter mantenere uno stato anche in questo

caso.caso.

Le sessioni servono anche a questo scopo. Le sessioni sono state Le sessioni servono anche a questo scopo. Le sessioni sono state

introdotte a partire dalla versione 4 di PHP. Se si utilizzano introdotte a partire dalla versione 4 di PHP. Se si utilizzano

versioni precedenti, è necessario ricorrere ad apposite librerie.versioni precedenti, è necessario ricorrere ad apposite librerie.

Page 97: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9797

Le sessioni: cos’è una sessioneLe sessioni: cos’è una sessione

Una sessione è molto simile a un cookie, con la differenza Una sessione è molto simile a un cookie, con la differenza

che nelle sessioni tutto il lavoro di gestione è svolto che nelle sessioni tutto il lavoro di gestione è svolto

internamente da PHP.internamente da PHP.

Quando un utente visita una pagina, gli viene Quando un utente visita una pagina, gli viene

automaticamente assegnato un identificatore univoco che automaticamente assegnato un identificatore univoco che

permette l’associazione fra client e relativa sessione.permette l’associazione fra client e relativa sessione.

Le sessioni sono comunque un sistema ancora abbastanza Le sessioni sono comunque un sistema ancora abbastanza

recente, e in effetti molte persone si affidano ancora al recente, e in effetti molte persone si affidano ancora al

metodo dei cookies per la memorizzazione degli stati.metodo dei cookies per la memorizzazione degli stati.

Page 98: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9898

Le sessioni: funzione session_start( Le sessioni: funzione session_start( ))

Per dare inizio ad una sessione in PHP si usa la funzione Per dare inizio ad una sessione in PHP si usa la funzione session_start( )session_start( ). La stessa . La stessa

funzione viene anche usata per ripristinare una sessione creata in precedenza.funzione viene anche usata per ripristinare una sessione creata in precedenza.

Come nel caso della funzione setcookie(), questa funzione va invocata all’inizio degli Come nel caso della funzione setcookie(), questa funzione va invocata all’inizio degli

script. Essa di fatto crea un cookie, sostituendo il lavoro del programmatore, e script. Essa di fatto crea un cookie, sostituendo il lavoro del programmatore, e

assegna un identificatore univoco al browser chiamante. Tale identificatore può assegna un identificatore univoco al browser chiamante. Tale identificatore può

essere reperito utilizzando la funzione essere reperito utilizzando la funzione session_id()session_id()..

Alla chiusura del browser la sessione scade.Alla chiusura del browser la sessione scade.

Esempio:Esempio:

<?php<?php

session_start();session_start();

echo “<html>”;echo “<html>”;

echo “<body>”;echo “<body>”;

echo “Ecco l’ID della tua sessione:”.session_id();echo “Ecco l’ID della tua sessione:”.session_id();

echo “</body>”;echo “</body>”;

echo “</html>”;echo “</html>”;

?>?>

Page 99: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

9999

Le sessioni: funzione Le sessioni: funzione session_register( )session_register( )

Per creare delle variabili all’interno di una sessione (Per creare delle variabili all’interno di una sessione (variabili di variabili di

sessionesessione) si utilizza la funzione) si utilizza la funzione session_register( ) session_register( )..

Se, ad esempio, dopo aver iniziato una sessione col comando Se, ad esempio, dopo aver iniziato una sessione col comando

session_start(), si inseriscono le righe ‘session_register(“nome”);’ session_start(), si inseriscono le righe ‘session_register(“nome”);’

e ‘session_register(“cognome”);’, vengono create le due variabili e ‘session_register(“cognome”);’, vengono create le due variabili

di sessione $nome e $cognome. Succesivamente si possono di sessione $nome e $cognome. Succesivamente si possono

assegnare dei valori a tali variabili, quali ad esempio assegnare dei valori a tali variabili, quali ad esempio

‘$nome=“Luca”;’ e ‘$cognome=“Ferrari”;’.‘$nome=“Luca”;’ e ‘$cognome=“Ferrari”;’.

Quando si esegue lo script, nella cartella dei file temporanei c’è il Quando si esegue lo script, nella cartella dei file temporanei c’è il

file creato dalla sessione, il quale contiene, fra le altre cose, le file creato dalla sessione, il quale contiene, fra le altre cose, le

informazioni ‘nome=“Luca”’ e ‘cognome=“Ferrari”’.informazioni ‘nome=“Luca”’ e ‘cognome=“Ferrari”’.

Page 100: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

100100

Le sessioni: l’array associativo Le sessioni: l’array associativo $_SESSION$_SESSION

Le variabili delle sessioni sono registrate con l’array associativoLe variabili delle sessioni sono registrate con l’array associativo

$_SESSION$_SESSION..

Se, ad esempio, dopo aver iniziato una sessione col comando Se, ad esempio, dopo aver iniziato una sessione col comando

session_start(), si inseriscono le righe session_start(), si inseriscono le righe

‘$_SESSION[“nome”]=“Luca”;’ e ‘$_SESSION[“nome”]=“Luca”;’ e

‘$_SESSION[“cognome”]=“Ferrari”;’, vengono create le due ‘$_SESSION[“cognome”]=“Ferrari”;’, vengono create le due

variabili di sessione ‘nome’ e ‘cognome’ e vengono loro assegnati variabili di sessione ‘nome’ e ‘cognome’ e vengono loro assegnati

i valori, rispettivamente, ‘Luca’ e ‘Ferrari’.i valori, rispettivamente, ‘Luca’ e ‘Ferrari’.

Quando si esegue lo script, nella cartella dei file temporanei c’è il Quando si esegue lo script, nella cartella dei file temporanei c’è il

file creato dalla sessione, il quale contiene, fra le altre cose, le file creato dalla sessione, il quale contiene, fra le altre cose, le

informazioni ‘nome=“Luca”’ e ‘cognome=“Ferrari”’.informazioni ‘nome=“Luca”’ e ‘cognome=“Ferrari”’.

Page 101: 1 PHP PHP Hypertext Preprocessor Programmazione lato server

101101

Le sessioni: funzione Le sessioni: funzione session_destroy( )session_destroy( )

Se, al termine di uno script, si desidera distruggere tutti i Se, al termine di uno script, si desidera distruggere tutti i

dati relativi alla sessione impostata all’inizio, è sufficiente dati relativi alla sessione impostata all’inizio, è sufficiente

usare la funzioneusare la funzione session_destroy( ) session_destroy( ), che non necessita di , che non necessita di

alcun parametro.alcun parametro.

Se invece si vuole semplicemente eliminare una ben Se invece si vuole semplicemente eliminare una ben

precisa variabile di sessione, la funzione da utilizzare è precisa variabile di sessione, la funzione da utilizzare è

session_unregister( )session_unregister( ), con la sintassi , con la sintassi

‘session_unregister(nome_variabile)’‘session_unregister(nome_variabile)’