La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

1 PHP PHP Hypertext Preprocessor Programmazione lato server.

Presentazioni simili


Presentazione sul tema: "1 PHP PHP Hypertext Preprocessor Programmazione lato server."— Transcript della presentazione:

1 1 PHP PHP Hypertext Preprocessor Programmazione lato server

2 2 Building applications … While many sites act as simple repositories, providing users with a collection of files they can retrieve and navigate through with hyperlinks, web sites are capable of much more sophisticated interactions. Sites can collect informations from users through forms, customize their appearance and their content to reflect the interests of particular users, or let the users interact with a variety of information sources…

3 3 Cosa vediamo…

4 4 web server Comunicazione HTTP Apache Logica applicativa PHP Data source MySQL

5 5 Cosa vediamo…

6 6 Architettura 3-tier (dal sito Microsoft)

7 7 Apache È un web server. È un web server. Parla e capisce il protocollo http.Parla e capisce il protocollo http. Primo web server, sviluppato da Tim Berners-Lee presso il CERN. Primo web server, sviluppato da Tim Berners-Lee presso il CERN. Predecessore di Apache: NCSA httpd server (1995). Predecessore di Apache: NCSA httpd server (1995).

8 8 PHP Open-source server-side scripting language sviluppato appositamente per il web. Open-source server-side scripting language sviluppato appositamente per il web. Il progetto inizia nel 1994 (Rasmus Lerdorf). Il progetto inizia nel 1994 (Rasmus Lerdorf). Inizialmente PHP = Personal Home Page, poi diventa PHP Hypertext Preprocessor. Inizialmente PHP = Personal Home Page, poi diventa PHP Hypertext Preprocessor. 1998: PHP : PHP 3. Versioni correnti: PHP e PHP Versioni correnti: PHP e PHP

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

10 10 Introduzione a PHP Linguaggio di scripting per realizzare pagine web dinamiche, il cui contenuto viene generato (dinamicamente) nel momento in cui queste vengono richieste al web server. Linguaggio di scripting per realizzare pagine web dinamiche, il cui contenuto viene generato (dinamicamente) nel momento in cui queste vengono richieste al web server. Script PHP: pagina HTML nella quale viene inserito il codice Script 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 venga inviata al browser, che vedrà solo il risultato finale. Il codice PHP viene eseguito sul server prima che la pagina venga inviata al browser, che vedrà solo il risultato finale.

11 11 Introduzione a PHP: esempio Ciao mondo! Script PHP: Esempio 1 Esempio 1 Pagina inviata al browser: Esempio 1 Esempio 1 Ciao mondo! Ciao mondo!

12 12 Introduzione a PHP: come si inserisce il codice? Stile abbreviato Stile abbreviato Stile classico Stile classico Stile Microsoft ASP Stile Microsoft ASP<% codice PHP qui %> Alternativa (utile con gli editor HTML visuali, come Front Page, che potrebbero non tollerare gli altri tipi di sintassi) Alternativa (utile con gli editor HTML visuali, come Front Page, che potrebbero non tollerare gli altri tipi di sintassi) codice PHP qui

13 13 Introduzione a PHP: come si inserisce il codice? Le istruzioni devono essere separate tra loro dal ; Le istruzioni devono essere separate tra loro dal ; Commenti Commenti // questo è un commento// questo è un commento /* questo è un commento *//* questo è un commento */ # questo è un commento# questo è un commento

14 14 Le funzioni fondamentali: sintassi per le funzioni La sintassi per richiamare una funzione è la seguente: La sintassi per richiamare una funzione è la seguente: nome_funzione(valore1, valore2,…); È possibile che alcune funzioni non necessitino di alcun parametro. In questo caso, vanno comunque indicate le parentesi tonde. È possibile che alcune funzioni non necessitino di alcun parametro. In questo caso, vanno comunque indicate le parentesi tonde.

15 15 Le funzioni fondamentali: phpinfo( ) phpinfo(): genera dinamicamente una pagina contenente informazioni sulla versione di PHP installata e altre cosette, quali i nomi delle variabili predefinite. phpinfo(): genera dinamicamente una pagina contenente informazioni sulla versione di PHP installata e altre cosette, quali i nomi delle variabili predefinite. phpinfo()

16 16 Le funzioni fondamentali: echo echo: serve per scrivere loutput che viene inviato al browser che accede allo script. echo: serve per scrivere loutput che viene inviato al browser che accede allo script. Non si tratta propriamente di una funzione, bensì di un costrutto del linguaggio; per questo non si usano le parentesi tonde.Non si tratta propriamente di una funzione, bensì di un costrutto del linguaggio; per questo non si usano le parentesi tonde. echo

17 17 Le funzioni fondamentali: echo Grazie a echo si può visualizzare il contenuto delle variabili. Grazie a echo si può visualizzare il contenuto delle variabili. echo $_SERVER[HTTP_HOST]: variabile contenente il nome di dominio del sito su cui lo script viene eseguito. $_SERVER[HTTP_HOST]: variabile contenente il nome di dominio del sito su cui lo script viene eseguito.

18 18 Le funzioni fondamentali: exit( ) e die( ) exit() e die(): arrestano lesecuzione dello script; die() consente anche di stampare un messaggio. Tali funzioni possono essere utilizzate per gestire eventuali situazioni di errore che non consentono la prosecuzione dello script. exit() e die(): arrestano lesecuzione dello script; die() consente anche di stampare un messaggio. Tali funzioni possono essere utilizzate per gestire eventuali situazioni di errore che non consentono la prosecuzione dello script. exit Questa frase non si vedrà Questa frase non si vedrà

19 19 Le funzioni fondamentali: esempi Nellesempio seguente controlliamo il valore della variabile $n e mostriamo un messaggio di errore, bloccando lesecuzione del programma, se tale variabile è maggiore di 1. Nellesempio seguente controlliamo il valore della variabile $n e mostriamo un messaggio di errore, bloccando lesecuzione del programma, se tale variabile è maggiore di 1. die1) die( $n è maggiore di uno!!! ); echo $n è minore o uguale a uno! ; ?> Vedere cosa succede sostituendo $n=5 con $n=1.

20 20 Variabili e tipi di dato: sintassi delle variabili I nomi delle variabili sono prefissati dal simbolo $ I nomi delle variabili sono prefissati dal simbolo $ Esempio: $a = $b + $c serve per assegnare alla variabile a la somma dei valori delle variabili b e c. Il simbolo = è loperatore di assegnazione.Esempio: $a = $b + $c serve per assegnare alla variabile a la somma dei valori delle variabili b e c. Il simbolo = è loperatore di assegnazione. In PHP, per creare una variabile, è sufficiente assegnarle un valore. Le variabili, cioè, non vanno dichiarate esplicitamente. In PHP, per creare una variabile, è sufficiente assegnarle un valore. Le variabili, cioè, non vanno dichiarate esplicitamente. Per visualizzare il valore di una variabile, come già visto, si usa echo. Per visualizzare il valore di una variabile, come già visto, si usa echo.

21 21 Variabili e tipi di dato: sintassi delle costanti 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); Esempio: Esempio: define(FILM,Codice donore); define(TIPOFILM, è un dramma nellambito della giustizia militare.); Per visualizzare una costante in uno script si usa echo e loperatore di concatenazione: Per visualizzare una costante in uno script si usa echo e loperatore di concatenazione: echo Il film.FILM.TIPOFILM; Loperatore. è loperatore di concatenazione. Loperatore. è loperatore di concatenazione.

22 22 Operatori (I) Operatori aritmetici Operatori aritmetici +: addizione ($a + $b).+: addizione ($a + $b). -: sottrazione ($a - $b).-: sottrazione ($a - $b). : moltiplicazione ($a $b).: moltiplicazione ($a $b). /: divisione ($a / $b)./: divisione ($a / $b). %: modulo ($a % $b).%: modulo ($a % $b). Operatori di confronto Operatori 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).

23 23 Operatori (II) Operatori logici Operatori 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 falso).&&: E ($a && $b: rende vero se $a e $b sono entrambe vere; altrimenti 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). xor: O esclusivo ($a xor $b: rende vero se i valori di verità di $a e $b sono diversi; altrimenti falso).xor: O esclusivo ($a xor $b: rende vero se i valori di verità di $a e $b sono diversi; altrimenti falso). Operatore ternario Operatore ternario condition ? value if true : value if falsecondition ? value if true : value if false ($grade > 50 ? Passed : Failed); Lespressione assumerà valore Passed o Failed a seconda del valore della variabile $grade.Lespressione assumerà valore Passed o Failed a seconda del valore della variabile $grade. Operatore di assegnazione: = Operatore di assegnazione: =

24 24 Operatori (III) Operatori combinati Operatori 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 decremento Operatore di incremento e decremento ++$a: aggiunge 1 alla variabile $a poi ne restituisce il valore.++$a: aggiunge 1 alla variabile $a poi ne restituisce il valore. $a++: restituisce il valore originario quindi vi aggiunge 1.$a++: restituisce il valore originario quindi vi aggiunge 1. Analogamente per gli operatori --$a e $a--.Analogamente per gli operatori --$a e $a--. Questi operatori vengono spesso utilizzati per i contatori allinterno di cicli ($contatore += 10, $contatore++). Questi operatori vengono spesso utilizzati per i contatori allinterno di cicli ($contatore += 10, $contatore++).

25 25 Esempi Risultato nel browser: Ehi! Grande occasione per le TV, costano solo 515, spedizione inclusa! Ordina subito! $contatore=0;$contatore=10 $contatore=0;$contatore=10 echo $contatore++;echo --$contatore; echo ;echo ; echo $contatore;echo $contatore Risultato nel browser: 0Risultato nel browser:

26 26 Variabili e tipi di dato: variabili predefinite Sono variabili il cui valore è preimpostato, che contengono solitamente informazioni sullambiente di esecuzione dello script PHP. Sono variabili il cui valore è preimpostato, che contengono solitamente informazioni sullambiente di esecuzione dello script PHP. $_SERVER[PHP_SELF]: contiene il percorso dello script in esecuzione (ad es., se lo script è raggiungibile dallindirizzo $_SERVER[PHP_SELF] conterrà il valore /index.php3). $_SERVER[PHP_SELF]: contiene il percorso dello script in esecuzione (ad es., se lo script è raggiungibile dallindirizzo $_SERVER[PHP_SELF] conterrà il valore /index.php3). $_SERVER[HTTP_HOST]: contiene il nome del server su cui lo script viene eseguito (nel caso precedente, localhost). $_SERVER[HTTP_HOST]: contiene il nome del server su cui lo script viene eseguito (nel caso precedente, localhost). $_SERVER[REMOTE_PORT]: fornisce la porta utilizzata sul computer dellutente per comunicare con il server web. $_SERVER[REMOTE_PORT]: fornisce la porta utilizzata sul computer dellutente per comunicare con il server web. $_SERVER[REMOTE_ADDR]: fornisce lindirizzo IP del visitatore. $_SERVER[REMOTE_ADDR]: fornisce lindirizzo IP del visitatore. Usare la funzione phpinfo( ) per visualizzare lelenco completo delle variabili predefinite. Usare la funzione phpinfo( ) per visualizzare lelenco completo delle variabili predefinite.

27 27 Variabili e tipi di dato: tipi di dato I tipi di dato in PHP si suddividono in tipi scalari e tipi compositi. I tipi di dato in PHP si suddividono in tipi scalari e tipi compositi. Tipi scalari: numeri (interi e in virgola mobile), stringhe, valori booleani. Tipi scalari: numeri (interi e in virgola mobile), stringhe, valori booleani. Tipi compositi: array, oggetti. Tipi compositi: array, oggetti.

28 28 Variabili e tipi di dato: esempi // $b è una variabile di tipo booleano $b = TRUE; // $num è una variabile di tipo intero $num = 25; // $pi_greco è un numero in virgola mobile // si noti il punto (virgola decimale) $pi_greco = 3.14; //$messaggio è una stringa $messaggio = Ciao a tutti!;

29 29 Variabili e tipi di dato: array In PHP un array può essere tanto un vettore (struttura dati in cui ogni elemento è individuato da un valore numerico) quanto un array associativo (collezione di coppie nome/valore). In PHP un array può essere tanto un vettore (struttura dati in cui ogni elemento è individuato da un valore numerico) quanto un array associativo (collezione di coppie nome/valore). array( ): per costruire esplicitamente un array. array( ): per costruire esplicitamente un array. È anche possibile costruire un array in modo implicito. È anche possibile costruire un array in modo implicito.

30 30 Variabili e tipi di dato: esempi di array // array di numeri interi costruito esplicitamente utilizzando array() $primi = array(2,3,5,7,11); // array costruito implicitamente $pari[0] = 2; $pari[1] = 4; $pari[2] = 6; // array associativo $bookmark[univ] = $bookmark[dip] =

31 31 Variabili e tipi di dato: come accedere agli elementi di un array Utilizzare il corrispondente indice numerico, oppure il nome della componente (se si tratta di un array associativo) Utilizzare il corrispondente indice numerico, oppure il nome della componente (se si tratta di un array associativo) echo $primi[3]; echo $bookmark[dip]; In PHP un array può contenere anche elementi di tipo diverso In PHP un array può contenere anche elementi di tipo diverso $mix = array(1,ciao,3.14,array(1,2,3));

32 32 Manipolazione delle stringhe In PHP esistono diverse funzioni predefinite per effettuare moltissime operazioni sulle stringhe di testo. In PHP esistono diverse funzioni predefinite per effettuare moltissime operazioni sulle stringhe di testo. substr: consente di estrarre una sottostringa. La sintassi è: substr: consente di estrarre una sottostringa. La sintassi è: substr(stringa,inizio,fine); ove stringa indica la stringa di partenza, inizio è il carattere di partenza per estrarre la sottostringa e fine quello in cui termina la sottostringa. Largomento fine è opzionale: se non indicato, il carattere finale della sottostringa sarà il carattere finale della stringa stessa.substr(stringa,inizio,fine); ove stringa indica la stringa di partenza, inizio è il carattere di partenza per estrarre la sottostringa e fine quello in cui termina la sottostringa. Largomento fine è opzionale: se non indicato, il carattere finale della sottostringa sarà il carattere finale della stringa stessa.

33 33 Manipolazione delle stringhe strlen(stringa): restituisce la lunghezza della stringa stringa come numero intero. strlen(stringa): restituisce la lunghezza della stringa stringa come numero intero. trim(stringa): elimina gli spazi dalla stringa stringa. trim(stringa): elimina gli spazi dalla stringa stringa. ucfirst(stringa): rende maiuscola liniziale di stringa. ucfirst(stringa): rende maiuscola liniziale di stringa. ucwords(stringa): rende maiuscole tutte le iniziali delle parole di stringa. ucwords(stringa): rende maiuscole tutte le iniziali delle parole di stringa.

34 34 Manipolazione delle stringhe strpos(stringa,pattern): cerca la prima occorrenza di pattern in stringa e restituisce il carattere in cui compare. strpos(stringa,pattern): cerca la prima occorrenza di pattern in stringa e restituisce il carattere in cui compare. strrpos(stringa,pattern): cerca lultima occorrenza di pattern in stringa e restituisce il carattere in cui compare. strrpos(stringa,pattern): cerca lultima occorrenza di pattern in stringa e restituisce il carattere in cui compare. str_replace(stringa da cercare,stringa da inserire,stringa): cerca stringa da cercare in stringa e la sostituisce con stringa da inserire. str_replace(stringa da cercare,stringa da inserire,stringa): cerca stringa da cercare in stringa e la sostituisce con stringa da inserire. nl2br(stringa): se stringa è un generico testo, converte tutti gli a capo in HTML. nl2br(stringa): se stringa è un generico testo, converte tutti gli a capo in HTML. urlencode(stringa): converte stringa in modo tale da poterla accodare a uninterrogazione in uno script. urlencode(stringa): converte stringa in modo tale da poterla accodare a uninterrogazione in uno script. urldecode(stringa): decodifica completamente la stringa di interrogazione URL stringa. urldecode(stringa): decodifica completamente la stringa di interrogazione URL stringa.

35 35 Manipolazione delle stringhe strrev(stringa): restituisce stringa invertita. strrev(stringa): restituisce stringa invertita. str_word_count(stringa,modalità): effettua alcuni conteggi (e non solo) su stringa: se modalità non è specificata, conta le parole di stringa; se modalità=1, restituisce un array contenente tutte le parole di stringa; se modalità=2, restituisce un array associativo ove il nome della componente è la posizione numerica della parola in stringa e il valore è la parola stessa. str_word_count(stringa,modalità): effettua alcuni conteggi (e non solo) su stringa: se modalità non è specificata, conta le parole di stringa; se modalità=1, restituisce un array contenente tutte le parole di stringa; se modalità=2, restituisce un array associativo ove il nome della componente è la posizione numerica della parola in stringa e il valore è la parola stessa. explode(separatore,stringa): crea un array di elementi partendo dalle parti di stringa divise dal carattere separatore. explode(separatore,stringa): crea un array di elementi partendo dalle parti di stringa divise dal carattere separatore. implode(separatore,array): crea una stringa partendo dagli elementi di array divisi da separatore. implode(separatore,array): crea una stringa partendo dagli elementi di array divisi da separatore. Esistono numerose altre funzioni per la manipolazione di stringhe, che possono essere trovate su ogni buon manuale. Esistono numerose altre funzioni per la manipolazione di stringhe, che possono essere trovate su ogni buon manuale.

36 36 Form HTML: sintassi dei form Un form HTML è una finestra contenente vari elementi di controllo che consentono al visitatore di inserire informazioni. Un form HTML è una finestra contenente vari elementi di controllo che 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: …

37 37 Form HTML: sintassi dei form Lattributo action serve per specificare lURL dello script. Lattributo action serve per specificare lURL dello script. Lattributo method serve per specificare la modalità di invio delle informazioni. Può essere GET o POST. Con GET le informazioni vengono inserite nellindirizzo URL, dunque sono visibili nella barra degli indirizzi del browser, ma sono vincolate dalla lunghezza massima di un URL, che è di 256 caratteri. Con POST i dati vengono scritti sullo standard input dellapplicazione destinataria, dunque non sono visibili ma soprattutto non ci sono limiti sulla quantità di dati inviata. Lattributo method serve per specificare la modalità di invio delle informazioni. Può essere GET o POST. Con GET le informazioni vengono inserite nellindirizzo URL, dunque sono visibili nella barra degli indirizzi del browser, ma sono vincolate dalla lunghezza massima di un URL, che è di 256 caratteri. Con POST i dati vengono scritti sullo standard input dellapplicazione destinataria, dunque non sono visibili ma soprattutto non ci sono limiti sulla quantità di dati inviata. Si può accedere alle informazioni inviate anche utilizzando gli array superglobali $_GET e $_POST (a seconda del metodo usato). Si può accedere alle informazioni inviate anche utilizzando gli array superglobali $_GET e $_POST (a seconda del metodo usato).

38 38 Form HTML: elementi di controllo (I) Pulsante dinvio: SUBMIT. Lattributo Value (opzionale) specifica il testo personalizzato da visualizzare allinterno del pulsante. Pulsante dinvio: SUBMIT. Lattributo Value (opzionale) specifica il testo personalizzato da visualizzare allinterno del pulsante. Pulsante per la cancellazione delle informazioni inserite: RESET. Lattributo Value è come sopra. Pulsante per la cancellazione delle informazioni inserite: RESET. Lattributo Value è come sopra. Campi di testo per limmissione di singole linee di testo allinterno di appositi riquadri: TEXT. Lattributo Name serve per dare il nome al controllo; Size serve per determinare la dimensione del campo in caratteri (es.: size=30). Altri controlli per limmissione di testo sono PASSWORD (i caratteri sono rimpiazzati sullo schermo da asterischi) e HIDDEN (per la creazione di un campo di testo nascosto, a volte utilizzato per passare informazioni da un form a un altro). Campi di testo per limmissione di singole linee di testo allinterno di appositi riquadri: TEXT. Lattributo Name serve per dare il nome al controllo; Size serve per determinare la dimensione del campo in caratteri (es.: size=30). Altri controlli per limmissione di testo sono PASSWORD (i caratteri sono rimpiazzati sullo schermo da asterischi) e HIDDEN (per la creazione di un campo di testo nascosto, a volte utilizzato per passare informazioni da un form a un altro). Per limmissione di testo su più righe, si può utilizzare TEXTAREA: Per limmissione di testo su più righe, si può utilizzare TEXTAREA:

39 39 Form HTML: elementi di controllo (II) Caselle di selezione che consentano allutente selezioni multiple allinterno di un form: CHECKBOX. Lattributo Name serve per dare un nome al singolo elemento di selezione allinterno del controllo, mentre lattributo Value specifica il valore assunto dalla variabile relativa quando la casella viene selezionata. Caselle di selezione che consentano allutente selezioni multiple allinterno di un form: CHECKBOX. Lattributo Name serve per dare un nome al singolo elemento di selezione allinterno del controllo, mentre lattributo Value specifica il valore assunto dalla variabile relativa quando la casella viene selezionata. Inserendo alla fine la parola CHECKED, il browser selezionerà inizialmente la casella in modo automatico. Inserendo alla fine la parola CHECKED, il browser selezionerà inizialmente la casella in modo automatico. Esempio: Esempio: Succo darancia Succo darancia Coca-Cola Coca-Cola Succo di pomplemo Succo di pomplemo

40 40 Form HTML: elementi di controllo (III) Pulsanti radio per la selezione di un solo elemento allinterno di un gruppo: RADIO. Pulsanti radio per la selezione di un solo elemento allinterno di un gruppo: RADIO. A differenza del controllo CHECKBOX, il nome di tutte le caselle di un controllo RADIO deve essere sempre lo stesso. A differenza del controllo CHECKBOX, il nome di tutte le caselle di un controllo RADIO deve essere sempre lo stesso. I menu di selezione permettono una o più selezioni a partire da un elenco: SELECT. I menu di selezione permettono una o più selezioni a partire da un elenco: SELECT. Esempio: Esempio:

41 41 Form HTML: esempio Semplice esempio di form HTML: Semplice esempio di form HTML: Scrivendo Schumacher nella casella di testo e premendo il pulsante Invia i dati, nella barra degli indirizzi verrà visualizzato: Scrivendo Schumacher nella casella di testo e premendo il pulsante Invia i dati, nella barra degli indirizzi verrà visualizzato:http://....../scripts/elabora.php?campione=Schumacher Nello script elabora.php viene definita una variabile di nome $_GET[campione] il cui valore è la stringa Schumacher. Nello script elabora.php viene definita una variabile di nome $_GET[campione] il cui valore è la stringa Schumacher.

42 42 Form HTML: trasmissione dei dati col metodo GET Indirizzo URL dello script a cui si vogliono inviare i dati seguito da un punto interrogativo ? seguito dalla query string Indirizzo URL dello script a cui si vogliono inviare i dati seguito da un punto interrogativo ? seguito dalla query string La struttura della query string consiste di coppie nome/valore separate da &; i caratteri non ammissibili in un indirizzo URL vengono sostituiti da % seguito dal corrispondente codice ASCII (in formato esadecimale; ad es., ì diventa %EC). Gli spazi vengono sostituiti da +. La struttura della query string consiste di coppie nome/valore separate da &; i caratteri non ammissibili in un indirizzo URL vengono sostituiti da % seguito dal corrispondente codice ASCII (in formato esadecimale; ad es., ì diventa %EC). Gli spazi vengono sostituiti da +. 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 database; possiamo creare una variabile, da chiamare, ad esempio, $argomento, tramite la quale estrarre il tipo di notizie che più ci interessano: 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 database; possiamo creare una variabile, da chiamare, ad esempio, $argomento, tramite la quale estrarre il tipo di notizie che più ci interessano:http://....../news.php?argomento=Sport Se largomento che ci interessa ha un nome che non sappiamo accodare ad un URL, possiamo usare la funzione urlencode( ).

43 43 Un esempio Creiamo un form contenente un campo di testo, una textarea e due pulsanti, un pulsante di invio e un pulsante di reset. Supponiamo inoltre che lo script di destinazione si chiami decode.php. Creiamo un form contenente un campo di testo, una textarea e due pulsanti, un pulsante di invio e un pulsante di reset. Supponiamo inoltre che lo script di destinazione si chiami decode.php.

44 44 Un esempio Qual è il tuo nome? Qual è il tuo nome?

Commenti?


45 45 Un altro esempio 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. Supponiamo inoltre che, anche in questo caso, lo script di destinazione si chiami decode.php. 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. Supponiamo inoltre che, anche in questo caso, lo script di destinazione si chiami decode.php.

46 46 Un altro esempio Per favore, scegli un giorno per la consegna e il tipo di pagamento Per favore, scegli un giorno per la consegna e il tipo di pagamento Qual è il tuo nome? Qual è il tuo nome? Quale giorno desideri per la consegna? Quale giorno desideri per la consegna?

47 47 Un altro esempio Ora costruiamo lo script decode.php che elabora il precedente form, dando come risultato per lutente la seguente pagina web: Ora costruiamo lo script decode.php che elabora il precedente form, dando come risultato per lutente la seguente pagina web:

48 48 Un altro esempio
Torna al form Torna al form

49 49 Dichiarazione di funzioni: sintassi Ogni programmatore può creare funzioni personali, che normalmente sono di due tipi: funzioni in senso matematico o funzioni come mezzo per aggiungere nuovi comandi al linguaggio. Ogni programmatore può creare funzioni personali, che normalmente sono di due tipi: funzioni in senso matematico o funzioni come mezzo per aggiungere nuovi comandi al linguaggio. Nella prima accezione, una funzione rappresenta una relazione tra un input e un output. Nella seconda accezione, una funzione rappresenta un modo per raggruppare un blocco di istruzioni PHP affinché possano essere richiamate ed eseguite come se fossero ununica istruzione. Nella prima accezione, una funzione rappresenta una relazione tra un input e un output. Nella seconda accezione, una funzione rappresenta un modo per raggruppare un blocco di istruzioni PHP affinché possano essere richiamate ed eseguite come se fossero ununica istruzione. Sintassi per la dichiarazione di una funzione: Sintassi per la dichiarazione di una funzione: function [nome_funzione]([argomenti]){ [corpo-della-funzione]} [nome_funzione]: nome della funzione; [argomenti]: elenco, eventualmente vuoto, di parametri da fornire alla funzione separati da virgole; [corpo-della-funzione]: blocco di istruzioni PHP che implementano la funzione stessa.

50 50 Dichiarazione di funzioni: esempio Dichiarazione di una funzione che somma due numeri: Dichiarazione di una funzione che somma due numeri: function somma($a,$b){ return $a+$b; } Il costrutto return viene utilizzato quando una funzione deve restituire un valore. Richiamo della funzione somma: Richiamo della funzione somma:$risultato=somma(1,1); Il risultato della funzione somma calcolata sugli argomenti (1,1) viene assegnato alla variabile $risultato.

51 51 Dichiarazione di funzioni: variabili locali e variabili globali Allinterno di una funzione, come si è visto, si possono naturalmente utilizzare delle variabili. Allinterno di una funzione, come si è visto, si possono naturalmente utilizzare delle variabili. In questo caso, tuttavia, occorre prestare attenzione alla distinzione tra variabili locali e variabili globali. In questo caso, tuttavia, occorre prestare attenzione alla distinzione tra variabili locali e variabili globali. Le variabili locali sono definite allinterno della funzione, e non sono accessibili al di fuori di essa. Le variabili globali sono invece definite al suo esterno (nella parte principale dello script), e si possono utilizzare allinterno di una funzione premettendo la parola-chiave global. Le variabili locali sono definite allinterno della funzione, e non sono accessibili al di fuori di essa. Le variabili globali sono invece definite al suo esterno (nella parte principale dello script), e si possono utilizzare allinterno di una funzione premettendo la parola-chiave global.

52 52 Dichiarazione di funzioni: esempi Esempio 1: Esempio 1: Esempio 2: Esempio 2:

53 53 Dichiarazione di funzioni: il costrutto global Se ci si dimentica di usare il costrutto global, linterprete PHP avrebbe considerato $numero una variabile locale, e lavrebbe trovata non definita. Se ci si dimentica di usare il costrutto global, linterprete PHP avrebbe considerato $numero una variabile locale, e lavrebbe trovata non definita. In alternativa a global si può accedere a una variabile globale tramite larray associativo $GLOBALS. La sintassi è la seguente: In alternativa a global si può accedere a una variabile globale tramite larray associativo $GLOBALS. La sintassi è la seguente:$GLOBALS[numero]

54 54 Strutture di controllo Come in ogni linguaggio di programmazione, le strutture di controllo servono per controllare il flusso di esecuzione del programma (o, nel nostro caso, dello script). Come in ogni linguaggio di programmazione, le strutture di controllo servono per controllare il flusso di esecuzione del programma (o, nel nostro caso, dello script). Si possono distinguere due tipologie di strutture di controllo: quelle condizionali e quelle iterative. Si possono distinguere due tipologie di strutture di controllo: quelle condizionali e quelle iterative.

55 55 Strutture di controllo: strutture condizionali Costrutto if: si utilizza quando si vuole che lesecuzione di un certo blocco di istruzioni avvenga o meno in funzione del valore di unespressione (la condizione). Costrutto if: si utilizza quando si vuole che lesecuzione di un certo blocco di istruzioni avvenga o meno in funzione del valore di unespressione (la condizione). Costrutto switch: si utilizza quando ci sono diversi blocchi di istruzioni e si vuole che, in base al valore dellespressione data, venga eseguito soltanto uno di questi. Costrutto switch: si utilizza quando ci sono diversi blocchi di istruzioni e si vuole che, in base al valore dellespressione data, venga eseguito soltanto uno di questi.

56 56 Strutture di controllo: costrutto if Sintassi: Sintassi: if ([condizione]) { [blocco istruzioni] } Esempio: Esempio: if ($b != 0) { $c = $a / $b; } Se si vuole che un altro blocco di istruzioni venga eseguito nel caso in cui la condizione risulti falsa, si usa il costrutto else. Sintassi: Se si vuole che un altro blocco di istruzioni venga eseguito nel caso in cui la condizione risulti falsa, si usa il costrutto else. Sintassi: if ([condizione]) { [blocco istruzioni 1] } else { [blocco istruzioni 2] } Esempio: Esempio: if ($colore == rosso) { echo Il colore è rosso; }else{ echo Il colore NON è rosso; }

57 57 Strutture di controllo: costrutto switch Sintassi: Sintassi: switch ([espressione] ){ case [valore 1]: [blocco istruzioni 1]; break; case [valore 2]: [blocco istruzioni 2]; break;……} Esempio: Esempio:switch($segno){ case 1: echo E uscito il segno 1!; break; case 2: echo E uscito il segno 2!; break;default: echo E uscito il segno X!; } Tramite la parola chiave default si può prevedere un caso che deve essere eseguito se tutti i controlli precedenti hanno dato esito negativo. Tramite la parola chiave default si può prevedere un caso che deve essere eseguito se tutti i controlli precedenti hanno dato esito negativo.

58 58 Strutture di controllo: strutture iterative Costrutto while: si utilizza quando si vuole ripetere lesecuzione di un blocco di istruzioni, e il numero di iterazioni dipende dal valore di una condizione. Dunque while è particolarmente utile quando non si sa a priori quante iterazioni dovranno essere effettuate. Costrutto while: si utilizza quando si vuole ripetere lesecuzione di un blocco di istruzioni, e il numero di iterazioni dipende dal valore di una condizione. Dunque while è particolarmente utile quando non si sa a priori quante iterazioni dovranno essere effettuate. Sintassi: Sintassi: while([condizione]){ [blocco istruzioni] } Esempio: Esempio:$contatore=1;$max=10; while($contatore <= $max){ echo Ho contato fino a $contatore ; $contatore++;}

59 59 Strutture di controllo: strutture iterative Costrutto for: si utilizza in alternativa a while quando si vuole ripetere lesecuzione di un blocco di istruzioni. Costrutto for: si utilizza in alternativa a while quando si vuole ripetere lesecuzione di un blocco di istruzioni. Sintassi: Sintassi: for([espr1]; [espr2]; [espr3]) { [blocco istruzioni] } [espr1]: inizializzazione, espressione da valutare una sola volta; [espr2]: condizione da valutare; [espr3]: se espr2 è verificata, si esegue [blocco istruzioni] ed [espr3], per poi tornare alla valutazione di [espr2]. Esempio: Esempio:$max=10; for ($contatore=1; $contatore<=$max; $contatore++) { echo Ho contato fino a $contatore ; $contatore++;}

60 60 Un esempio Riprendiamo lesempio che abbiamo chiamato form2. Per prima cosa, facciamo una piccola modifica al form html, introducendo la possibilità di scegliere più 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 form_menu.html. Riprendiamo lesempio che abbiamo chiamato form2. Per prima cosa, facciamo una piccola modifica al form html, introducendo la possibilità di scegliere più 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 form_menu.html.

61 61 Un esempio Per favore, scegli un giorno per la consegna e il tipo di pagamento Per favore, scegli un giorno per la consegna e il tipo di pagamento Qual è il tuo nome? Qual è il tuo nome? Quale giorno desideri per la consegna? Quale giorno desideri per la consegna?

62 62 Un esempio Ora creiamo lo script collect_info.php per elaborare i dati inviati col precedente form. Vogliamo che tale script svolga i seguenti compiti: Ora creiamo lo script collect_info.php per elaborare i dati inviati col precedente form. Vogliamo che tale script svolga i seguenti compiti: Se non è stato selezionato alcun giorno di consegna, larray $_GET[giorno_settimana] sarà vuoto e il browser visualizzerà un messaggio di errore. A tale scopo, si può utilizzare la funzione isset().Se non è stato selezionato alcun giorno di consegna, larray $_GET[giorno_settimana] sarà vuoto e il browser visualizzerà un messaggio di errore. A tale scopo, si può utilizzare la funzione isset(). In caso contrario, il browser mostrerà un messaggio di conferma, come nella figura sottostante. Per estrarre tutti gli elementi dellarray $_GET[giorno_settimana], si userà il costrutto foreach.In caso contrario, il browser mostrerà un messaggio di conferma, come nella figura sottostante. Per estrarre tutti gli elementi dellarray $_GET[giorno_settimana], si userà il costrutto foreach.

63 63 Un esempio Funzione isset(): controlla se una variabile è stata definita (ma non se contiene qualche dato). Funzione isset(): controlla se una variabile è stata definita (ma non se contiene qualche dato). Costrutto foreach: foreach($array as $variabile){…} prende ciascun elemento dellarray $array e lo inserisce nella variabile $variabile, mentre qualunque cosa nelle parentesi graffe è eseguita sullelemento $variabile. Costrutto foreach: foreach($array as $variabile){…} prende ciascun elemento dellarray $array e lo inserisce nella variabile $variabile, mentre qualunque cosa nelle parentesi graffe è eseguita sullelemento $variabile.

64 64 Un esempio

65 65 Un esempio Finora abbiamo sempre supposto che lutente avrebbe inserito le informazioni richieste negli appositi campi. Finora abbiamo sempre supposto che lutente avrebbe inserito le informazioni richieste negli appositi campi. Di fatto, spesso lutente dimentica di inserire qualche dato. Di fatto, spesso lutente dimentica di inserire qualche dato. Creiamo allora uno script per la convalida del nostro form. Più specificamente, vogliamo progettare uno script che controlli che lutente abbia inserito il proprio nome e abbia selezionato i giorni per la consegna. Tale script verrà chiamato check_form.php: questo nome dovrà essere sostituito a collect_info.php nel form form_menu.html. Creiamo allora uno script per la convalida del nostro form. Più specificamente, vogliamo progettare uno script che controlli che lutente abbia inserito il proprio nome e abbia selezionato i giorni per la consegna. Tale script verrà chiamato check_form.php: questo nome dovrà essere 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 isset(), che ha come unico argomento una variabile e controlla se tale variabile è stata definita.Utilizzare la funzione isset(), che ha come unico argomento una variabile e controlla se tale variabile è stata definita.

66 66 Un esempio Questo è ciò che vogliamo ottenere se, ad esempio, lutente ha regolarmente inserito il nome ma non ha selezionato alcun giorno per la consegna. Questo è ciò che vogliamo ottenere se, ad esempio, lutente ha regolarmente inserito il nome ma non ha selezionato alcun giorno per la consegna.

67 67 Un esempio

68 68 Inclusione di file esterni A volte cè la necessità di includere (ed eseguire) in uno script PHP dei file esterni, che possono essere tanto semplici frammenti di codice HTML quanto altri scripts PHP. A volte cè la necessità di includere (ed eseguire) in uno script PHP dei file esterni, che possono essere tanto semplici frammenti di codice HTML quanto altri scripts PHP. I costrutti che si usano in questi casi sono require e include. I costrutti che si usano in questi casi sono require e include.

69 69 Inclusione di file esterni: costrutti require e include Per entrambi questi costrutti la sintassi è la seguente: Per entrambi questi costrutti la sintassi è la seguente: require [file] include [file] Ad esempio, per inserire in un certo punto del proprio script unaltro script denominato libreria.php, si scriverà require libreria.php oppure include libreria.php. Ad esempio, per inserire in un certo punto del proprio script unaltro script denominato libreria.php, si scriverà require libreria.php oppure include libreria.php. Si noti che la sintassi non prevede lutilizzo di parentesi tonde (non sono funzioni di PHP, ma più propriamente costrutti del linguaggio). Si noti che la sintassi non prevede lutilizzo di parentesi tonde (non sono funzioni di PHP, ma più propriamente costrutti del linguaggio). IMPORTANTE: con require e include, linterprete PHP analizza il file incluso ponendosi in modalità HTML. Pertanto, eventuali frammenti di codice PHP, per essere correttamente riconosciuti ed eseguiti, vanno specificati utilizzando le consuete marcature per linserimento del codice PHP. Una volta terminata lanalisi del file esterno, linterprete torna regolarmente in modalità PHP. IMPORTANTE: con require e include, linterprete PHP analizza il file incluso ponendosi in modalità HTML. Pertanto, eventuali frammenti di codice PHP, per essere correttamente riconosciuti ed eseguiti, vanno specificati utilizzando le consuete marcature per linserimento del codice PHP. Una volta terminata lanalisi del file esterno, linterprete torna regolarmente in modalità PHP. Noi useremo i due costrutti require e include indifferentemente. Per conoscere le differenze tra i due costrutti, si può consultare un buon manuale di PHP. Noi useremo i due costrutti require e include indifferentemente. Per conoscere le differenze tra i due costrutti, si può consultare un buon manuale di PHP.

70 70 Inclusione di file esterni: esempio Supponiamo di voler realizzare un sito in cui in tutte le pagine compare una barra di navigazione coi link alle varie sezioni del sito. È improbabile pensare di inserire manualmente in ogni pagina un appropriato frammento HTML, se non altro per evidenti problemi di manutenzione. Supponiamo di voler realizzare un sito in cui in tutte le pagine compare una barra di navigazione coi link alle varie sezioni del sito. È improbabile pensare di inserire manualmente in ogni pagina un appropriato frammento HTML, se non altro per evidenti problemi di manutenzione. Usiamo allora PHP, procedendo come segue. Usiamo allora PHP, procedendo come segue.

71 71 Inclusione di file esterni: esempio 1.Isoliamo il frammento di HTML corrispondente alla barra di navigazione, e salviamolo in un file, denominato, ad esempio, intestazione.html. Home page Home page Pagina 2 Pagina 2

72 72 Inclusione di file esterni: esempio 2.Realizziamo ora le varie pagine del sito. Una volta completata ciascuna pagina, includeremo il file contenente la barra di navigazione. Pagina che include un file esterno Pagina che include un file esterno Pagina che include un file esterno Pagina che include un file esterno […contenuto della pagina…] Si noti che nella pagina index.php è stato omesso il tag, in quanto già presente nel file intestazione.html.

73 73 Una barra di navigazione intelligente Riprendiamo il precedente esempio della barra di navigazione per svilupparlo ulteriormente. Riprendiamo il precedente esempio della barra di navigazione per svilupparlo ulteriormente. Ciò che vogliamo fare ora è costruire una barra di navigazione in grado di evidenziare automaticamente la voce corrispondente alla pagina corrente. Ciò che vogliamo fare ora è costruire una barra di navigazione in grado di evidenziare automaticamente la voce corrispondente alla pagina corrente. Genereremo la nostra barra di navigazione utilizzando uno script apposito, denominato barra.php; tale script verrà richiamato in tutte le pagine in cui vorremo visualizzare la barra. Genereremo la nostra barra di navigazione utilizzando uno script apposito, denominato barra.php; tale script verrà richiamato in tutte le pagine in cui vorremo visualizzare la barra.

74 74 Una barra di navigazione intelligente Il primo passo consiste nel costruire una struttura dati appropriata, nel nostro caso un array associativo, che chiameremo $links, contenente come elementi i link che vogliamo inserire nella barra di navigazione. Più specificamente, nellarray associativo $links, la chiave di un elemento sarà lindirizzo della pagina web corrispondente, e il valore una sua breve descrizione. Il primo passo consiste nel costruire una struttura dati appropriata, nel nostro caso un array associativo, che chiameremo $links, contenente come elementi i link che vogliamo inserire nella barra di navigazione. Più specificamente, nellarray associativo $links, la chiave di un elemento sarà lindirizzo della pagina web corrispondente, e il valore una sua breve descrizione. $links = array( index.php => Home page, pagina2.php => Pagina 2, pagina3.php => Pagina 3 );

75 75 Una barra di navigazione intelligente Per far sì che venga evidenziata la voce corrispondente alla pagina corrente, ci sono sostanzialmente due modi: stabilire di volta in volta quale voce evidenziare, oppure fare in modo che ciò avvenga in modo automatico. Questultimo approccio sarà quello che useremo noi. Per far sì che venga evidenziata la voce corrispondente alla pagina corrente, ci sono sostanzialmente due modi: stabilire di volta in volta quale voce evidenziare, oppure fare in modo che ciò avvenga in modo automatico. Questultimo approccio sarà quello che useremo noi. Confronteremo il nome del file della pagina corrente con quelli contenuti in $links. Per fare ciò, useremo la variabile $_SERVER[PHP_SELF], che contiene il percorso dello script PHP corrente. Poiché a noi interessa solo il nome del file e non lintero percorso, utilizziamo la funzione basename() per estrarlo. Confronteremo il nome del file della pagina corrente con quelli contenuti in $links. Per fare ciò, useremo la variabile $_SERVER[PHP_SELF], che contiene il percorso dello script PHP corrente. Poiché a noi interessa solo il nome del file e non lintero percorso, utilizziamo la funzione basename() per estrarlo.

76 76 Una barra di navigazione intelligente 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 parentesi quadre, ad eccezione di quello della pagina corrente, visualizzato in grassetto e senza collegamento ipertestuale. 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 parentesi quadre, ad eccezione di quello della pagina corrente, visualizzato in grassetto e senza collegamento ipertestuale.$desc) { if ($url == $pagina_corrente) { echo $desc ; } else { echo [ $desc ]; }} // Riga orizzontale dopo i links echo \n; ?>

77 77 Una barra di navigazione 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. Barra di navigazione intelligente Barra di navigazione intelligente Barra di navigazione intelligente Barra di navigazione intelligente Prima pagina Prima pagina Questa è la home page; in alto dovrebbe essere visibile la barra di navigazione… Questa è la home page; in alto dovrebbe essere visibile la barra di navigazione…

78 78 I cookies I cookies sono un meccanismo tramite il quale delle applicazioni lato server possono memorizzare e recuperare informazioni sul client. I cookies sono un meccanismo tramite il quale delle applicazioni lato server possono memorizzare e recuperare 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 cancellazione relative ai cookies sono gestite dalla funzione setcookie(). In PHP, tutte le operazioni di scrittura, modifica o cancellazione relative ai cookies sono gestite dalla funzione setcookie(). La funzione setcookie() va necessariamente invocata prima di inviare alcunché al browser, in quanto i cookies vengono trasmessi sotto forma di headers HTTP. La funzione setcookie() va necessariamente invocata prima di inviare alcunché al browser, in quanto i cookies vengono trasmessi sotto forma di headers HTTP.

79 79 I cookies: sintassi La funzione setcookie() ha due argomenti principali, entrambi obbligatori: il nome da assegnare al cookie e il suo valore. La funzione setcookie() ha due argomenti principali, entrambi obbligatori: il nome da assegnare al cookie e il suo valore. Es.: per memorizzare nel browser di un utente un cookie di nome $nomeutente e avente come contenuto la stringa miosito, listruzione da utilizzare sarebbe: Es.: per memorizzare nel browser di un utente un cookie di nome $nomeutente e avente come contenuto la stringa miosito, listruzione da utilizzare sarebbe: setcookie(nomeutente, miosito); Ci sono poi altri argomenti opzionali per setcookie(), quali la scadenza del cookie, il percorso e altri ancora. Ci sono poi altri argomenti opzionali per setcookie(), quali la scadenza del cookie, il percorso e altri ancora. Per modificare un cookie occorre richiamare la funzione setcookie() e modificarne il valore. Per cancellare un cookie si può assegnare ad esso un valore nullo oppure impostarne la scadenza ad una data passata. Per modificare un cookie occorre richiamare la funzione setcookie() e modificarne il valore. Per cancellare un cookie si può assegnare ad esso un valore nullo oppure impostarne la scadenza ad una data passata. I cookies e il loro contenuto sono disponibili nellarray superglobale $_COOKIE. I cookies e il loro contenuto sono disponibili nellarray superglobale $_COOKIE.

80 80 I cookies: esempio Realizziamo una pagina PHP che ci dice la data e lora dellultimo accesso del visitatore corrente al nostro sito. Realizziamo una pagina PHP che ci dice la data e lora dellultimo 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 contenute nel cookie, dobbiamo impostare una scadenza al cookie stesso. Nel nostro caso, non impostando alcuna scadenza, il cookie scompare alla chiusura del browser. In generale, se vogliamo che rimanga memoria delle informazioni contenute nel cookie, dobbiamo impostare una scadenza al cookie stesso. Nel nostro caso, non impostando alcuna scadenza, il cookie scompare alla chiusura del browser. Al nostro cookie ultimavisita assegneremo il valore ottenuto invocando la funzione time(), che consiste nel numero di secondi trascorsi dalla cosiddetta Unix epoch (che è il 1 gennaio 1970). Al nostro cookie ultimavisita assegneremo il valore ottenuto invocando la funzione time(), che consiste nel numero di secondi trascorsi dalla cosiddetta Unix epoch (che è il 1 gennaio 1970).

81 81 I cookies: esempio

82 82 Le date in PHP In PHP le date si rappresentano sotto forma di timestamp, vale a dire numeri interi corrispondenti al numero di secondi trascorsi dalla Unix epoch. Es.: le ore 0:00:00 del 1 gennaio 2001 corrispondono al timestamp In PHP le date si rappresentano sotto forma di timestamp, vale a dire numeri interi corrispondenti al numero di secondi trascorsi dalla Unix epoch. Es.: le ore 0:00:00 del 1 gennaio 2001 corrispondono al timestamp Per passare dalla data al timestamp corrispondente si usa la funzione mktime(). I parametri vanno passati in questordine: ore minuti secondi mese giorno anno. Es.: per determinare e visualizzare il precedente timestamp listruzione è: Per passare dalla data al timestamp corrispondente si usa la funzione mktime(). I parametri vanno passati in questordine: ore minuti secondi mese giorno anno. Es.: per determinare e visualizzare il precedente timestamp listruzione è: echo mktime(0,0,0,1,1,2001); Per passare dal timestamp alla data corrispondente si usa la funzione date(). Essa prevede due argomenti: il primo, obbligatorio, è una stringa che determina come formattare la data; il secondo, opzionale, è il timestamp da formattare. Se manca il secondo argomento, date() considererà automaticamente il timestamp corrente. Per passare dal timestamp alla data corrispondente si usa la funzione date(). Essa prevede due argomenti: il primo, obbligatorio, è una stringa che determina come formattare la data; il secondo, opzionale, è il timestamp da formattare. Se manca il 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 dallinizio dellanno: echo date(z);se vogliamo visualizzare i giorni trascorsi dallinizio dellanno: echo date(z);

83 83 Le date in PHP: funzione checkdate() Se vogliamo validare una data (cioè controllare che quella data effettivamente esista) possiamo usare la funzione checkdate(). Se vogliamo validare una data (cioè controllare che quella data effettivamente esista) possiamo usare la funzione checkdate(). Esempio: Esempio: //verifichiamo la data 31 aprile 2001 $giorno=31;$mese=4;$anno=2001; echo La data $giorno/$mese/$anno; if (checkdate($mese,$giorno,$anno)) { echo è corretta.; } else { echo non è valida!; }

84 84 Le date in PHP: ancora sui timestamp 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 esempi seguenti dovrebbero rendere più chiara la precedente affermazione. 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 esempi seguenti dovrebbero rendere più chiara la precedente affermazione. Esempio 1: Esempio 1: //confronto fra due date $data1=mktime(0,0,0,1,1,2001);$data2=mktime(0,0,0,7,29,2001); echo La prima data è; if ($data1 < $data2) { echo precedente; } else { echo successiva; } echo alla seconda; Esempio 2: Esempio 2: //numero di giorni tra due date arbitrarie $data1=mktime(0,0,0,1,1,2001);$data2=mktime(0,0,0,7,29,2001); echo Tra le due date ci sono; echo ($data2 - $data1)/60*60*24; echo giorni;

85 85 Un esempio In questo esempio vogliamo creare un cookie che saluti un visitatore frequente di una pagina web. Tipicamente, il contenuto di tale cookie sarà un saluto personalizzato relativo allutente connesso. In questo esempio vogliamo creare un cookie che saluti un visitatore frequente di una pagina web. Tipicamente, il contenuto di tale cookie sarà un saluto personalizzato relativo allutente connesso. Il primo passo consisterà nella creazione della pagina principale, denominata main_page.php, in cui viene mostrato il contenuto del cookie se questo già esiste (insieme alla possibilità di cambiare il contenuto), altrimenti viene proposto un link per la sua creazione (e dunque per la personalizzazione della pagina). Il primo passo consisterà nella creazione della pagina principale, denominata main_page.php, in cui viene mostrato il contenuto del cookie se questo già esiste (insieme alla possibilità di cambiare il contenuto), altrimenti viene proposto un link per la sua creazione (e dunque per la personalizzazione della pagina). Il secondo passo consisterà invece nella creazione dello script add_user.php, tramite il quale lutente può effettivamente inserire i propri dati per personalizzare la pagina. Il secondo passo consisterà invece nella creazione dello script add_user.php, tramite il quale lutente può effettivamente inserire i propri dati per personalizzare la pagina. Il terzo e ultimo passo consisterà infine nella scrittura dello script set_cookie.php, tramite il quale i dati inseriti dallutente verranno gestiti. Il terzo e ultimo passo consisterà infine nella scrittura dello script set_cookie.php, tramite il quale i dati inseriti dallutente verranno gestiti.

86 86 Un esempio Risultato di main_page.php. Risultato di main_page.php.

87 87 Un esempio Risultato di add_user.php. Risultato di add_user.php.

88 88 Un esempio Risultato di set_cookie.php. Risultato di set_cookie.php.

89 89 Un esempio: main_page.php La mia pagina La mia pagina La pagina web più bella La pagina web più bella

90 90 Un esempio: add_user.php La mia pagina La mia pagina
";}?> Inserisci il tuo nome o un messaggio per personalizzare la pagina principale di benvenuto Nome/Messaggio: Nome/Messaggio:


91 91 Un esempio: set_cookie.php

92 92 PHP e MySQL: cosè MySQL MySQL è un Data Base Management System, cioè un software per la gestione di basi di dati. Si tratta di un sistema molto diffuso e utilizzato, viste le ottime prestazioni e nonostante non possieda molte caratteristiche avanzate. MySQL è un Data Base Management System, cioè un software per la gestione di basi di dati. Si tratta di un sistema molto diffuso e utilizzato, viste le ottime prestazioni e nonostante non possieda molte caratteristiche avanzate. Noi cercheremo di imparare come si fa, a partire da uno script PHP, a collegarsi a un server MySQL e quindi ad eseguire operazioni sui database usando il linguaggio SQL. Noi cercheremo di imparare come si fa, a partire da uno script PHP, a collegarsi a un server MySQL e quindi ad eseguire operazioni sui database usando il linguaggio SQL. Non impareremo in questo corso a usare MySQL, anche perché dovrebbe essere già noto… Dunque si assumerà una conoscenza di base di MySQL, nonché che il programma sia correttamente installato. Non impareremo in questo corso a usare MySQL, anche perché dovrebbe essere già noto… Dunque si assumerà una conoscenza di base di MySQL, nonché che il programma sia correttamente installato.

93 93 PHP e MySQL: accesso a un database MySQL Laccesso a un database MySQL avviene tramite autenticazione. Laccesso a un database MySQL avviene tramite autenticazione. Ciò che serve sono le informazioni seguenti: Ciò che serve sono le informazioni seguenti: nome dellhost su cui è in esecuzione MySQL;nome dellhost su cui è in esecuzione MySQL; nome del nostro database;nome del nostro database; nostro nome utente;nostro nome utente; password relativa, fornita dallamministratore di sistema.password relativa, fornita dallamministratore di sistema. Tali parametri possono essere salvati in apposite variabili. Esempio: Tali parametri possono essere salvati in apposite variabili. Esempio: $dbhost=localhost;$dbhost=localhost; $dbname=dbprova;$dbname=dbprova; $dbuser=luca;$dbuser=luca; $dbpass=secret;$dbpass=secret;

94 94 PHP e MySQL: funzione mysql_connect() Per instaurare la connessione col server MySQL si usa la funzione mysql_connect(). I parametri necessari a tale funzione sono, nellordine, nome dellhost, nome utente e password. Per instaurare la connessione col server MySQL si usa la funzione mysql_connect(). I parametri necessari a tale funzione sono, nellordine, nome dellhost, nome utente e password. Esempio: Esempio:$conn=mysql_connect($dbhost,$dbuser,$dbpass) or die(Impossibile collegarsi al server MySQL.); La funzione mysql_connect() restituisce un valore, memorizzato nella variabile $conn, che serve da identificativo della connessione stabilita. Se la connessione non è possibile, la funzione restituisce un valore nullo e viene visualizzato un messaggio di errore che comunica allutente limpossibilità della connessione. La funzione mysql_connect() restituisce un valore, memorizzato nella variabile $conn, che serve da identificativo della connessione stabilita. Se la connessione non è possibile, la funzione restituisce un valore nullo e viene visualizzato un messaggio di errore che comunica allutente limpossibilità della connessione.

95 95 PHP e MySQL: funzione mysql_select_db() Successivamente occorre scegliere il database con cui lavorare; ciò si può fare con la funzione mysql_select_db(). A tale funzione va fornito obbligatoriamente il nome del database, e opzionalmente lidentificativo della connessione (nel senso che, se tale identificativo non viene indicato, viene utilizzata di default lultima connessione aperta). Successivamente occorre scegliere il database con cui lavorare; ciò si può fare con la funzione mysql_select_db(). A tale funzione va fornito obbligatoriamente il nome del database, e opzionalmente lidentificativo della connessione (nel senso che, se tale identificativo non viene indicato, viene utilizzata di default lultima connessione aperta). Esempio: Esempio:mysql_select_db($dbname,$conn) or die(Impossibile selezionare il database $dbname.); Come prima, se la funzione restituisce un valore nullo, viene visualizzato un messaggio di errore per lutente. Come prima, se la funzione restituisce un valore nullo, viene visualizzato un messaggio di errore per lutente.

96 96 PHP e MySQL: comandi SQL Ora è il momento di capire come funziona linterazione con MySQL. Siccome tale interazione avviene tramite il linguaggio SQL, ripassiamo alcuni dei comandi di tale linguaggio. Ora è il momento di capire come funziona linterazione con MySQL. Siccome tale interazione avviene tramite il linguaggio SQL, ripassiamo alcuni dei comandi di tale linguaggio. Naturalmente, questo non è un corso di MySQL, dunque lunica cosa che faremo in questo ripasso sarà di rivedere alcune delle cose già a voi note. In particolare, vedremo unicamente come accedere e utilizzare MySQL su una piattaforma Linux. Naturalmente, questo non è un corso di MySQL, dunque lunica cosa che faremo in questo ripasso sarà di rivedere alcune delle cose già a voi note. In particolare, vedremo unicamente come accedere e utilizzare MySQL su una piattaforma Linux.

97 97 PHP e MySQL: comandi SQL Per accedere a MySQL da Linux è sufficiente digitare mysql nella riga di comando. Per accedere a MySQL da Linux è sufficiente digitare mysql nella riga di comando. Da questo momento, la riga di comando avrà laspetto seguente: Da questo momento, la riga di comando avrà laspetto seguente: mysql > Eventualmente, si può accedere direttamente a un database (se già ne abbiamo creato almeno uno) digitando mysql nome_database. Eventualmente, si può accedere direttamente a un database (se già ne abbiamo creato almeno uno) digitando mysql nome_database. Per uscire da MySQL, basta digitare exit. Per uscire da MySQL, basta digitare exit.

98 98 PHP e MySQL: comandi SQL Una volta entrati in MySQL, per creare un database si usa il costrutto CREATE DATABASE. Esempio: Una volta entrati in MySQL, per creare un database si usa il costrutto CREATE DATABASE. Esempio: msyql > CREATE DATABASE test_db; Per entrare in un database già creato, come appena visto, si può agire direttamente dalla linea di comando al momento dellaccesso a MySQL. Per entrare in un database già creato, come appena visto, si può agire direttamente dalla linea di comando al momento dellaccesso a MySQL. O, invece, dopo laccesso, si utilizza USE: O, invece, dopo laccesso, si utilizza USE: mysql > USE test_db; Nota: in MySQL si possono usare indifferentemente maiuscole e minuscole, ma è considerato buona norma usare le lettere maiuscole per i comandi di MySQL e quelle minuscole per i nomi definiti dallutente. Nota: in MySQL si possono usare indifferentemente maiuscole e minuscole, ma è considerato buona norma usare le lettere maiuscole per i comandi di MySQL e quelle minuscole per i nomi definiti dallutente.

99 99 PHP e MySQL: comandi SQL Una volta entrati in un database, per creare una tabella si utilizza lespressione 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 inserire in ciascuna colonna. Nellesempio che segue è specificata lesatta sintassi da usare: Una volta entrati in un database, per creare una tabella si utilizza lespressione 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 inserire in ciascuna colonna. Nellesempio che segue è specificata lesatta sintassi da usare: mysql > CREATE TABLE personale ( -> nome VARCHAR(20), -> indirizzo VARCHAR(30), -> città VARCHAR(20), -> nazione VARCHAR(20), -> ID INT NOT NULL AUTO_INCREMENT, -> 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;

100 100 PHP 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 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 possono trasferire i contenuti del file nella tabella con lespressione LOAD DATA nel modo seguente: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 immettere nei vari campi con dei caratteri di tabulazione; fatto questo, si possono trasferire i contenuti del file nella tabella con lespressione LOAD DATA nel modo seguente: mysql > LOAD DATA INFILE nome_file.txt INTO TABLE nome_tabella; Se invece si intende inserire un singolo record, conviene usare lespressione INSERT. Ad esempio, nel caso della tabella personale definita precedentemente, si potrebbe procedere come segue:Se invece si intende inserire un singolo record, conviene usare lespressione INSERT. Ad esempio, nel caso della tabella personale definita precedentemente, si potrebbe procedere come segue: mysql >INSERT INTO personale [(nome,indirizzo, città, paese)] -> VALUES (nome_1, -> indirizzo_1, -> città_1, -> nazione_1, );

101 101 PHP e MySQL: comandi SQL Per cercare dati allinterno di una tabella, si usa lespressione SELECT. Il formato di base di tale espressione è il seguente: Per cercare dati allinterno di una tabella, si usa lespressione SELECT. Il formato di base di tale espressione è il seguente: SELECT colonna_1, colonna_2, … FROM nome_tabella; Nella scelta delle colonne si può usare anche il carattere jolly *. Lespressione SELECT * FROM personale estrae tutte le colonne dalla tabella personale. Nella scelta delle colonne si può usare anche il carattere jolly *. Lespressione SELECT * FROM personale estrae tutte le colonne dalla tabella personale. Per scegliere allinterno delle colonne che si desiderano investigare soltanto alcuni record, si utilizza lespressione WHERE, eventualmente in combinazione con gli operatori booleani, quali AND, OR. Esempio: Per scegliere allinterno delle colonne che si desiderano investigare soltanto alcuni record, si utilizza lespressione WHERE, eventualmente in combinazione con gli operatori booleani, quali AND, OR. Esempio: mysql > SELECT nome, nazione FROM personale -> WHERE nome=nome_scelto AND nazione=nazione_scelta;

102 102 PHP e MySQL: funzione mysql_query() Dopo questo breve ripasso possiamo tornare ad occuparci di PHP. Come già preannunciato, vogliamo vedere ora come funziona linterazione fra PHP e MySQL. Dopo questo breve ripasso possiamo tornare ad occuparci di PHP. Come già preannunciato, vogliamo vedere ora come funziona linterazione fra PHP e MySQL. Innanzitutto, vediamo come fare a creare una tabella di un database allinterno di uno script PHP. Più precisamente, nellesempio che segue costruiremo una semplice rubrica telefonica. Innanzitutto, vediamo come fare a creare una tabella di un database allinterno di uno script PHP. Più precisamente, nellesempio che segue costruiremo una semplice rubrica telefonica. La prima cosa da fare è definire una variabile contenente lespressione scritta in sql per impostare la nostra tabella: La prima cosa da fare è definire una variabile contenente lespressione scritta in sql per impostare la nostra tabella: $sql=CREATE TABLE rubrica (. nome VARCHAR(40), cognome VARCHAR(40), telefono VARCHAR(20),. ID INT NOT NULL AUTO_INCREMENT,. PRIMARY KEY (ID)); Successivamente, per eseguire effettivamente il comando sql, occorre utilizzare la funzione mysql_query(): Successivamente, per eseguire effettivamente il comando sql, occorre utilizzare la funzione mysql_query():$res=mysql_query($sql,$conn) or die(Errore:. mysql_error()); In caso di errori relativi alla query, viene restituito un messaggio di errore, nel quale la funzione mysql_error() inserisce anche una descrizione del tipo di errore che si è verificato. In caso di errori relativi alla query, viene restituito un messaggio di errore, nel quale la funzione mysql_error() 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 scrivere il codice PHP per inserire i nominativi che preferite nella rubrica appena definita. 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.

103 103 PHP e MySQL: funzione mysql_fetch_row() È invece lievemente diverso il caso di uninterrogazione del database. In questa situazione, infatti, cè un risultato da prelevare e visualizzare. Una possibile funzione PHP da utilizzare a tale scopo è mysql_fetch_row(): È invece lievemente diverso il caso di uninterrogazione del database. In questa situazione, infatti, cè un risultato da prelevare e visualizzare. Una possibile funzione PHP da utilizzare a tale scopo è mysql_fetch_row(): $sql=SELECT telefono FROM rubrica. WHERE nome=Luca AND cognome=Ferrari ; $res=mysql_query($sql,$conn) or die(Errore:. mysql_error()); $info=mysql_fetch_row($res); echo Il mio numero di telefono è. $info[0]; Come si vede bene dallesempio, la funzione mysql_fetch_row recupera i risultati dellespressione sql in oggetto (nel nostro caso quella contenuta in $res) e li inserisce in un array. Come si vede bene dallesempio, la funzione mysql_fetch_row recupera i risultati dellespressione sql in oggetto (nel nostro caso quella contenuta in $res) e li inserisce in un array. Lultima riga di comando visualizza il numero di telefono dei record recuperati, che è lelemento di posto 0 (lunico!) dellarray $info. Lultima riga di comando visualizza il numero di telefono dei record recuperati, che è lelemento di posto 0 (lunico!) dellarray $info.

104 104 PHP e MySQL: funzione mysql_close() Per chiudere la connessione col server MySQL si può utilizzare la funzione mysql_close() con la sintassi mysql_close($conn). Non è comunque un passo necessario, in quanto tutte le connessioni rimaste aperte al termine dello script vengono chiuse automaticamente. Per chiudere la connessione col server MySQL si può utilizzare la funzione mysql_close() con la sintassi mysql_close($conn). Non è comunque un passo necessario, in quanto tutte le connessioni rimaste aperte al termine dello script vengono chiuse automaticamente.

105 105 Le sessioni: oltre i cookies Come abbiamo visto in precedenza, i cookies servono per mantenere uno stato, memorizzando e recuperando informazioni sul client. Come abbiamo visto in precedenza, i cookies servono per mantenere uno stato, memorizzando e recuperando informazioni sul client. Tuttavia, il meccanismo dei cookies presenta diverse limitazioni intrinseche. Tuttavia, il meccanismo dei cookies presenta diverse limitazioni intrinseche. Ad esempio, il client ha la possibilità di disabilitare i cookies, mentre noi vorremmo poter mantenere uno stato anche in questo caso. Ad esempio, il client ha la possibilità di disabilitare i cookies, mentre noi vorremmo poter mantenere uno stato anche in questo caso. Le sessioni servono anche a questo scopo. Le sessioni sono state introdotte a partire dalla versione 4 di PHP. Se si utilizzano versioni precedenti, è necessario ricorrere ad apposite librerie. Le sessioni servono anche a questo scopo. Le sessioni sono state introdotte a partire dalla versione 4 di PHP. Se si utilizzano versioni precedenti, è necessario ricorrere ad apposite librerie.

106 106 Le sessioni: cosè una sessione Una sessione è molto simile a un cookie, con la differenza che nelle sessioni tutto il lavoro di gestione è svolto internamente da PHP. Una sessione è molto simile a un cookie, con la differenza che nelle sessioni tutto il lavoro di gestione è svolto internamente da PHP. Quando un utente visita una pagina, gli viene automaticamente assegnato un identificatore univoco che permette lassociazione fra client e relativa sessione. Quando un utente visita una pagina, gli viene automaticamente assegnato un identificatore univoco che permette lassociazione fra client e relativa sessione. Le sessioni sono comunque un sistema ancora abbastanza recente, e in effetti molte persone si affidano ancora al metodo dei cookies per la memorizzazione degli stati. Le sessioni sono comunque un sistema ancora abbastanza recente, e in effetti molte persone si affidano ancora al metodo dei cookies per la memorizzazione degli stati.

107 107 Le sessioni: funzione session_start( ) Per dare inizio ad una sessione in PHP si usa la funzione session_start( ). La stessa funzione viene anche usata per ripristinare una sessione creata in precedenza. Per dare inizio ad una sessione in PHP si usa la funzione session_start( ). La stessa funzione viene anche usata per ripristinare una sessione creata in precedenza. Come nel caso della funzione setcookie(), questa funzione va invocata allinizio degli script. Essa di fatto crea un cookie, sostituendo il lavoro del programmatore, e assegna un identificatore univoco al browser chiamante. Tale identificatore può essere reperito utilizzando la funzione session_id(). Come nel caso della funzione setcookie(), questa funzione va invocata allinizio degli script. Essa di fatto crea un cookie, sostituendo il lavoro del programmatore, e assegna un identificatore univoco al browser chiamante. Tale identificatore può essere reperito utilizzando la funzione session_id(). Alla chiusura del browser la sessione scade. Alla chiusura del browser la sessione scade. Esempio: Esempio:

108 108 Le sessioni: larray associativo $_SESSION Le variabili delle sessioni sono registrate con larray associativo $_SESSION. Le variabili delle sessioni sono registrate con larray associativo $_SESSION. Se, ad esempio, dopo aver iniziato una sessione col comando session_start(), si inseriscono le righe $_SESSION[nome]=Luca; e $_SESSION[cognome]=Ferrari;, vengono create le due variabili di sessione nome e cognome e vengono loro assegnati i valori, rispettivamente, Luca e Ferrari. Se, ad esempio, dopo aver iniziato una sessione col comando session_start(), si inseriscono le righe $_SESSION[nome]=Luca; e $_SESSION[cognome]=Ferrari;, vengono create le due variabili di sessione nome e cognome e vengono loro assegnati i valori, rispettivamente, Luca e Ferrari. Quando si esegue lo script, nella cartella dei file temporanei cè il file creato dalla sessione, il quale contiene, fra le altre cose, le informazioni nome=Luca e cognome=Ferrari. Quando si esegue lo script, nella cartella dei file temporanei cè il file creato dalla sessione, il quale contiene, fra le altre cose, le informazioni nome=Luca e cognome=Ferrari.

109 109 Le sessioni: funzione session_destroy( ) Se, al termine di uno script, si desidera distruggere tutti i dati relativi alla sessione impostata allinizio, è sufficiente usare la funzione session_destroy( ), che non necessita di alcun parametro. Se, al termine di uno script, si desidera distruggere tutti i dati relativi alla sessione impostata allinizio, è sufficiente usare la funzione session_destroy( ), che non necessita di alcun parametro. Se invece si vuole semplicemente eliminare una ben precisa variabile di sessione, la funzione da utilizzare è session_unregister( ), con la sintassi session_unregister(nome_variabile). Invece, con session_unset( ) potete eliminare tutte le variabili di sessione. Se invece si vuole semplicemente eliminare una ben precisa variabile di sessione, la funzione da utilizzare è session_unregister( ), con la sintassi session_unregister(nome_variabile). Invece, con session_unset( ) potete eliminare tutte le variabili di sessione.

110 110 Il carrello della spesa A conclusione di quanto fatto in questa parte del corso su PHP, cercheremo di progettare un applicazione del tipo Carrello della spesa, grazie alla quale potremo acquistare materiale on-line. Questo esempio è tratto dal libro di Tansley. A conclusione di quanto fatto in questa parte del corso su PHP, cercheremo di progettare un applicazione del tipo Carrello della spesa, grazie alla quale potremo acquistare materiale on-line. Questo esempio è tratto dal libro di Tansley. I requisiti dellapplicazione che vogliamo creare sono i seguenti: I requisiti dellapplicazione che vogliamo creare sono i seguenti: Possibilità di connessione tra utente (browser) e un database, allinterno del quale lutente può scegliere i prodotti che gli interessano;Possibilità di connessione tra utente (browser) e un database, allinterno del quale lutente può scegliere i prodotti che gli interessano; lutente deve poter selezionare i prodotti e successivamente poter decidere di acquistarli; devessere possibile anche tracciare quali prodotti sono stati inseriti nel carrello;lutente deve poter selezionare i prodotti e successivamente poter decidere di acquistarli; devessere possibile anche tracciare quali prodotti sono stati inseriti nel carrello; terminato lo shopping, lutente deve poter decidere alcuni aspetti quali il tipo di pagamento.terminato lo shopping, lutente deve poter decidere alcuni aspetti quali il tipo di pagamento.

111 111 Il carrello della spesa Idealmente, questultimo argomento dovrebbe avere il carattere dellesercitazione. Dunque, sarebbe bello che foste voi a scrivere tutti gli script che realizzano il carrello della spesa in base alle indicazioni che vi darò io. Idealmente, questultimo argomento dovrebbe avere il carattere dellesercitazione. Dunque, sarebbe bello che foste voi a scrivere tutti gli script che realizzano il carrello della spesa in base alle indicazioni che vi darò io. In effetti, tenteremo di fare proprio così! Nei prossimi lucidi cercherò di spiegarvi dettagliatamente come devessere fatta lapplicazione, quali sono gli script di cui cè bisogno e cosa deve fare ogni script. Vi mostrerò anche laspetto finale delle pagine web prodotte, e voi cercherete di progettare il carrello in modo che loutput sia esattamente così. In effetti, tenteremo di fare proprio così! Nei prossimi lucidi cercherò di spiegarvi dettagliatamente come devessere fatta lapplicazione, quali sono gli script di cui cè bisogno e cosa deve fare ogni script. Vi mostrerò anche laspetto finale delle pagine web prodotte, e voi cercherete di progettare il carrello in modo che loutput sia esattamente così. Questo verrà fatto in laboratorio: vi lascerò un po di tempo per ciascuno script, poi vi farò vedere una possibile soluzione. È chiaro che i vostri scripts potranno essere diversi da quelli che vi mostrerò io, e tuttavia funzionare ugualmente bene (anzi, forse meglio…!). Questo verrà fatto in laboratorio: vi lascerò un po di tempo per ciascuno script, poi vi farò vedere una possibile soluzione. È chiaro che i vostri scripts potranno essere diversi da quelli che vi mostrerò io, e tuttavia funzionare ugualmente bene (anzi, forse meglio…!).

112 112 Il carrello della spesa La prima cosa da fare è costruire una tabella (usando naturalmente MySQL) che contenga le informazioni sugli articoli ordinati. La prima cosa da fare è costruire una tabella (usando naturalmente MySQL) che contenga le informazioni sugli articoli ordinati. La tabella che creeremo conterrà le seguenti colonne: La tabella che creeremo conterrà le seguenti colonne: articolo: contiene larticolo inserito nel carrello;articolo: contiene larticolo inserito nel carrello; qta: contiene la quantità inserita nel carrello;qta: contiene la quantità inserita nel carrello; ID_ordine: contiene un ID dordine/transazione (chiamato $ID_trans) che identifica univocamente gli articoli ordinati da un singolo utente;ID_ordine: contiene un ID dordine/transazione (chiamato $ID_trans) che identifica univocamente gli articoli ordinati da un singolo utente; ID: ID auto-incrementante.ID: ID auto-incrementante. Il valore contenuto nella colonna ID_ordine viene ottenuto utilizzando un generatore casuale allinizio della sessione principale e viene assegnato alla variabile $ID_trans durante lintera sessione. A ogni registrazione di sessione questo valore sarà univoco: se un altro utente utilizza lapplicazione, possiederà un diverso ID di sessione, dunque $ID_trans conterrà un valore differente. Il valore contenuto nella colonna ID_ordine viene ottenuto utilizzando un generatore casuale allinizio della sessione principale e viene assegnato alla variabile $ID_trans durante lintera sessione. A ogni registrazione di sessione questo valore sarà univoco: se un altro utente utilizza lapplicazione, possiederà un diverso ID di sessione, dunque $ID_trans conterrà un valore differente.

113 113 Il carrello della spesa La tabella la creiamo assieme. Innanzitutto creiamo il database test_ordini: La tabella la creiamo assieme. Innanzitutto creiamo il database test_ordini: mysql> CREATE DATABASE ordini; Dopodichè selezioniamo il database appena creato: Dopodichè selezioniamo il database appena creato: mysql> USE ordini; Infine creiamo la tabella righe_ordini per memorizzare gli articoli ordinati dagli utenti: Infine creiamo la tabella righe_ordini per memorizzare gli articoli ordinati dagli utenti: mysql> CREATE TABLE righe_ordini ( articolo VARCHAR(100), qta SMALLINT, ID_ordine VARCHAR(10), ID INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID) )

114 114 Il carrello della spesa Linsieme degli script che costituiscono lapplicazione è elencato di seguito: Linsieme degli script che costituiscono lapplicazione è elencato di seguito: c_order.php: la schermata principale dalla quale lutente può aggiungere articoli al carrello;c_order.php: la schermata principale dalla quale lutente può aggiungere articoli al carrello; c_process.php: memorizza larticolo selezionato in MySQL;c_process.php: memorizza larticolo selezionato in MySQL; c_basket.php: mostra il contenuto corrente del carrello dellutente;c_basket.php: mostra il contenuto corrente del carrello dellutente; c_delete.php: elimina dal carrello lelemento selezionato;c_delete.php: elimina dal carrello lelemento selezionato; c_checkout.php: conferma il contenuto del carrello prima di inviare lordine;c_checkout.php: conferma il contenuto del carrello prima di inviare lordine; c_mailit.php: una volta confermato lordine, questo viene inviato tramite ;c_mailit.php: una volta confermato lordine, questo viene inviato tramite ; c_conn_inc.php: connessioni iniziali a MySQL.c_conn_inc.php: connessioni iniziali a MySQL.

115 115 Il carrello della spesa: c_conn_inc.php

116 116 Il carrello della spesa: c_order.php

117 117 Il carrello della spesa: c_order.php (continua…) Consegne Spa - Ordini cancelleria Consegne Spa - Ordini cancelleria Per favore, imposta il tuo ordine di cancelleria Per favore, imposta il tuo ordine di cancelleria Seleziona un tipo di penna Seleziona un tipo di penna Conf. 10 Penne Blu Conf. 10 Penne Blu Conf. 10 Penne Nere Conf. 10 Penne Nere Conf. 10 Penne Rosse Conf. 10 Penne Rosse Conf. 20 Penne Blu Conf. 20 Penne Blu Conf. 20 Penne Nere Conf. 20 Penne NereQuantità



118 118 Il carrello della spesa: c_order.php (continua…) Seleziona un tipo di blocco appunti Seleziona un tipo di blocco appunti Conf 10 Blocchi Appunti Reporter Conf 10 Blocchi Appunti Reporter Conf 10 Blocchi Appunti A4 Righe Conf 10 Blocchi Appunti A4 Righe Conf 20 Blocchi Appunti A4 Righe Conf 20 Blocchi Appunti A4 Righe Conf 10 Blocchi Appunti A4 Conf 10 Blocchi Appunti A4 Quantità Quantità



119 119 Il carrello della spesa: c_order.php (continua…) Seleziona un tipo di busta Seleziona un tipo di busta Conf. 20 Buste A2 Marroni Conf. 20 Buste A2 Marroni Conf. 10 Buste A4 Marroni Conf. 10 Buste A4 Marroni Conf. 10 Buste A4 Bianche Conf. 10 Buste A4 Bianche Conf. 10 Buste A4 Bianche Finestra Conf. 10 Buste A4 Bianche Finestra Quantità Quantità



120 120 Il carrello della spesa: c_process.php

121 121 Il carrello della spesa: c_process.php (continua…) echo " "; echo " Consegne Spa - Ordini cancelleria "; $sql="INSERT INTO righe_ordini (ID_ordine,articolo,qta) VALUES ('$_SESSION[ID_trans]','$_GET[articolo]','$_GET[qta]')"; if (!mysql_query($sql,$connessione)) { echo "Errore, impossibile aggiungere l'articolo... Controlla MySQL"; echo " Ritorna agli ordini cancelleria "; exit; } else { echo "Tabella aggiornata [".mysql_affected_rows()."] articolo/i aggiunto/i "; echo " Articoli inseriti nel carrello... "; echo "$_GET[articolo] in quantità $_GET[qta]"; echo " Ritorna agli ordini cancelleria "; echo " Controlla il tuo carrello della spesa "; # recupera il numero di articoli ordinati $sql="SELECT * FROM righe_ordini WHERE ID_ordine='$_SESSION[ID_trans]'"; echo " Numero totale di articoli nel carrello: $articoli_ordinati "; }mysql_close($connessione)?>

122 122 Il carrello della spesa: c_basket.php

123 123 Il carrello della spesa: c_basket.php (continua…) echo " "; echo " ID Ordine/Transazione Articolo Quantità ID "; while ($riga=mysql_fetch_array($risultati_mysql)) { # mostra i risultati $ID=$riga["ID"];$ID_trans=$riga["ID_ordine"];$articolo=$riga["articolo"];$qta=$riga["qta"]; echo " $ID_trans $articolo $qta $ID "; } } # fine dell'else ?> Ritorna alla pagina degli ordini Ritorna alla pagina degli ordini Fai clic su di un articolo per eliminarlo

124 124 Il carrello della spesa: c_delete.php

125 125 Il carrello della spesa: c_delete.php (continua…) $sql="DELETE FROM righe_ordini WHERE ID='$_GET[id_riga]'"; if (!mysql_query($sql,$connessione)) { echo "Errore, impossibile eliminare il record con ID $_GET[id_riga] "; echo "Ritorna alla pagina degli ordini "; exit; exit; } else { } else { # eliminazione OK, informa l'utente echo "Tabella aggiornata [".mysql_affected_rows()."] record eliminati "; echo "L'articolo è stato eliminato dal tuo carrello "; echo "L'articolo è stato eliminato dal tuo carrello "; echo "Ritorna al carrello "; } # query di eliminazione OK }mysql_close($connessione);?>

126 126 Il carrello della spesa: c_checkout.php

127 127 Il carrello della spesa: c_checkout.php (continua…) $sql="SELECT * FROM righe_ordini WHERE ID_ordine='$_SESSION[ID_trans]'"; if ( $num_righe == 0 ) { echo " Il carrello della spesa è vuoto al momento."; echo "Non hai inserito alcun articolo. Non puoi procedere con l'ordine!"; echo "Ritorna alla pagina degli ordini "; exit; } else { # abbiamo dei record echo " Ecco il tuo carrello della spesa.... "; echo " "; echo " Articolo Quantità "; while ($riga=mysql_fetch_array($risultati_mysql)) { # mostra i risultati $ID=$riga["ID"];$ID_trans=$riga["ID_ordine"];$articolo=$riga["articolo"];$qta=$riga["qta"]; echo " $articolo $qta "; } } # fine dell'else ?>

128 128 Il carrello della spesa: c_checkout.php (continua…)

129 129 Il carrello della spesa: c_mailit.php


Scaricare ppt "1 PHP PHP Hypertext Preprocessor Programmazione lato server."

Presentazioni simili


Annunci Google