1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

75
1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications

Transcript of 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Page 1: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

1

Corso diIngegneria del Web

A A. 2014 2015

Domenico Rosaci

19 - Web Applications

Page 2: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Applicazioni Web

●Una applicazione web fornisce un servizio all’utente finale per mezzo dell’infrastruttura web.

●In una applicazione web l’utente interagisce con il sito

●Si parla anche di siti dinamici, dove le pagine non sono statiche ma costruite dinamicamente in base all’interazione con l’utente

Page 3: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.
Page 4: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.
Page 5: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.
Page 6: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Componenti delle applicazioni web

●L’infrastruttura web si basa sul protocollo HTTP.

● Ma questo non permette lo sviluppo di applicazioni complesse che coinvolgano una fase di elaborazione oltre che di passaggio di dati. Occorre costruire una architettura più complessa di quella client/server basato su HTTP.

Page 7: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Architettura Client-Server

Page 8: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Protocollo HTTP

Per sviluppare una applicazione web occorre aggiungere potere di calcolo e memorizzazione dati a questo modello

Page 9: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

I Livelli in un’applicazione web● Un’applicazione Web si sviluppa su tre livelli logici

– presentazione

– intermedio

– dati

● Non sempre i livelli logici di un’applicazione Web corrispondono a locazioni fisiche sulla rete

Page 10: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Livello Presentazione

● Il livello di presentazione costituisce l’interfaccia utente dell’applicazione Web e corrisponde al client.

● Esso è costituito da vari componenti combinati tra loro: browser, documenti HTML, applet Java, controlli ActiveX.

Page 11: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Livello intermedio

● Il livello intermedio di un’applicazione Web corrisponde alla componente elaborativa dell’applicazione:

● Le modalità di realizzazione del livello intermedio dipendono dalle caratteristiche e dalle tecnologie supportate dal server Web :può essere costituito da un insieme di script, componenti e programmi interagenti tra di loro e con il server Web.

● Alcune delle tecnologie più comuni:

● Common Gateway Interface (CGI), Internet Server Application Interface (ISAPI), Active Server Pages (ASP) , PHP, Java Servlet, ….

Page 12: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Livello Dati

Il livello dati fornisce servizi non direttamente disponibili tramite il Server Web; questi servizi sono generalmente forniti da applicazioni indipendenti dall’ambiente Web.

Tipici esempi di applicazioni presenti a questo livello sono:

• Server dati (DBMS).

• Server di mail (POP, SMTP).

• Server di documentazione elettronica.

Page 13: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

I livelli di una applicazione web

dati

Livello dati

Livello intermedio

Livello presentazione

Page 14: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologie web

● Sia i livelli presentazione che intermedio possono avere una componente elaborativa.

● La tecnologia utilizzata ha caratteristiche profondamente diverse a seconda che il livello interessato sia presentazione o intermedio.

● Le tecnologie web impiegate in un’applicazione web si chiamano lato server (server-side) e lato client (client side)

Page 15: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologie client-side e server-side

tecnologia server side: il peso della computazione risiede tutta sul server

tecnologia client-side: la computazione avviene principalmente sul browser.

Generalmente le applicazioni web complesse usano strategie ibride

Page 16: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Client Side

●E' la parte di programmazione che coinvolge il browser web ed è quindi dipendente dal tipo (e versione) del browser usato. Alcuni linguaggi client-side non sono supportati da alcuni browser – ad es. VBscript è supportato solo da IExplorer. Uno standard è Javascript - ECMA e ISO.

●Uno script può comportarsi in modo diverso nei vari browser web.

●Tipicamente la operazioni effettuate client side sono di interazione stretta con l'utente – ad es. rollover sui tasti o il controllo di dati inseriti tramite FORM.

●Generalmente abbiniamo alla programmazione client side compiti semplici e di interazione immediata con l'utente.

Page 17: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Server Side

●La programmazione server side si presta a maggiori possibilità e a complessità di computazione maggiore, nonche’ all’immagazzinamento dei dati.

●L'interattività non è immediata in quanto è il server che esegue la parte di programma.

●Avere la possibilità di programmare la parte server ci apre la possibilità per far fare al server qualcosa in più del semplice restituire pagine HTML che già risiedono sul disco.

●La maggior parte dei siti web che consultiamo ogni giorno sono di fatto applicazioni server-side con parte meno rilevante client-side: portali, commercio elettronico, blog….,

Page 18: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Server Side

●La tecnologia server-side permette di creare pagine dinamiche, ovvero pagine che non sono presenti effettivamente sul server al momento della richiesta da parte del browser, ma che vengono create e composte dinamicamente dal server web, eventualmente servendosi del livello dati, dietro richiesta esplicita da parte del browser.

●Chiaramente il server web deve essere dotato di tecnologia in grado di “costruire” su richiesta le pagine, assemblando insieme i dati e spedirle al browser.

Page 19: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Architettura Server-Side

Eventuali parametri

Elaborazione SELECT...

Parte statica

Parte dinamica

Page 20: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologie client/server side

Tecnologie web

Computazione Server Side

Computazione Client Side

Programmi Compilati

Script Server Side

Programmi Compilati su client

Script Client Side

Tecnologie ibride

CGI

Java Servlets

ASP.NET

PHP

ASP

Cold Fusion

Java Server Pages

ASP.NET

Java AppletsJavascript

VBScript

Page 21: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologie Server side

●L'utente può interagire con il server ad esempio sottomettendo dati che il server elabora per restituire poi una risposta sotto forma di pagina HTML.

●Un tipico caso e' l'accesso da parte dell'utente ad un database che risiede sul server. In questo caso la pagina web funziona come una interfaccia per accedere ai dati che risiedono sul server.

●Ci sono varie tecnologie server side utilizzate tra cui Common

Gateway Interface (CGI), PHP, ASP.NET, Servlet, JSP.  

Page 22: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Server Side

•La computazione avviene lato server e può avvenire tramite programmi compilati o script interpretati 

•Nel caso di programmi compilati il web server si limita ad invocare, su rischiesta del client, un eseguibile. L’eseguibile può essere scritto in un qualsiasi linguaggio che supporti l’interazione con il web server – tipicamente Java, Visual Basic, C++.

•Storicamente il primo approccio è stato il Common Gateway Interface (CGI)

Page 23: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Server Side – programmi compilati

●La computazione server side con programmi compilati ha il vantaggio di un tempo di esecuzione molto veloce rispetto agli script, ma lo svantaggio di mandare in esecuzione una istanza del processo per ogni chiamata e quindi caricare molto il server in caso di molti accessi simultanei.

●Alcuni approcci tentano di rimediare a questo svantaggio – Servlet e ASP.NET – mandando un esecuzione una sola istanza di processo che gestisce chiamate multiple

Page 24: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologia Server Side - script

●Nel caso di esecuzione di script, il web server ha al suo interno un motore in grado di interpretare il linguaggio di script usato.

●Si perde in velocità di esecuzione, ma si guadagna in facilità d’uso

●In alcuni approcci rimane il problema dell’esecuzione simultanea di più processi (Perl), in altri viene eseguito un solo processo che gestisce tutte le chiamate (Cold Fusion, ASP)

●E’ possibile gestire più tecnologie serverside da uno stesso server web

Page 25: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Common Gateway Interface

I programmi CGI sono scritti in un linguaggio di programmazione e generalmente compilati in codice eseguibile sulla piattaforma del server (o interpretati da un interprete che risiede sul server)

Il programma CGI genera come output una pagina HTML (dinamica)

CGI

Page 26: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio CGI (Perl)

#!usr/local/bin/perl 

    local(%in) ;  local($name, $value) ;

    # Resolve and unencode name/value pairs into %in     foreach (split('&', $ENV{'QUERY_STRING'})) {         s/\+/ /g ;         ($name, $value)= split('=', $_, 2) ;         $name=~ s/%(..)/chr(hex($1))/ge ;         $value=~ s/%(..)/chr(hex($1))/ge ;

        $in{$name}.= "\0" if defined($in{$name}) ;      # concatenate multiple vars         $in{$name}.= $value ;     }     print "Content-type: text/html\n\n";      print $in{$name} ;     print ", questa e' la tua pagina di Hello World";

Page 27: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Linguaggi di Scripting

●Per superare i limiti dei CGI (inefficienza, complessità di programmazione) è nata la tecnologia dei linguaggi di scripting integrati con il server web.

●Tra questi approcci ricordiamo Active Server Pages (ASP), Java Server Pages (JSP), PHP, Cold Fusion

● Qui concentreremo su PHP. Da notare che i principi di funzionamento di PHP sono gli stessi che ritroviamo in altri linguaggi di scripting come ASP o JSP.

Page 28: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Linguaggi di scripting

Server web

Individua lo script

Analizza lo scriptParser

del lin guaggio

Genera la pagina HTML

Browser web

Browser web

Richiede uno script

Fornisce la pagina HTML

Page 29: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempi di approcci Server Side

●Tipico esempio di applicazione Web con interazione con l’utente sono le FORM HTML. Vediamo un esempio di form e come viene implementato usando varie tecnologie

●Si realizza una comunicazione tra la pagina contente la form e componente lato server che gestisce il contenuto della form spedito dall’utente. Questa componente e’ diversa a seconda della tecnologia usata

<FORM name=esempio action=“programma”

METHOD=GET|POST>

<INPUT type=text name=username>

<INPUT type=radio name=color value=“Rosso”> …..

<INPUT type=submit>

Page 30: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio FORM - Codice Perl

Use CGI;$q= new CGI;$Color = $q -> param(‘color’);$Username = $q-> param(‘username’);Print $1$q ->(header);‘<html><head><title>CGI</title></head>’,‘<body>’,‘Il nome è: ‘, $Username, ‘<br>’‘il radio button selezionato è: ‘, $color,

‘<br>,‘</body></html>’;

In questo caso il “programma” indicato dalla action è un programma perl (ed es. mioperl.pl)

Page 31: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio FORM – Cold Fusion

<HTML><HEAD><TITLE>Cold Fusion </TITLE></HEAD>

<BODY>

Il nome è: #form.username#

Il radio button selezionato è: #form.color#

</BODY></HTML>

In questo caso il “programma” indicato dalla action è una pagina Cold Fusion (ed es. miapagina.cfm)

Page 32: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio FORM - ASP

<HTML><HEAD><TITLE>ASP </TITLE></HEAD>

<BODY>

Il nome è: <% request.querystring(‘username’) %>

Il radio button selezionato è:<% request.querystring(‘color’) %>

</BODY></HTML>

In questo caso il “programma” indicato dalla action è una pagina ASP (ed es. miapagina.asp)

Page 33: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio FORM - PHP

<HTML><HEAD><TITLE>PHP</TITLE></HEAD>

<BODY>

Il nome è: <?php $username; ?>

Il radio button selezionato è:<?php $color; ?>

</BODY></HTML>

In questo caso il “programma” indicato dalla action è una pagina PHP (ed es. miapagina.php)

Page 34: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tecnologie Client Side

●La computazione lato client può avvenire con programmi scaricati sul browser (applet, plug-in) oppure tramite script (Javascript, VBscript)

●Gli Applet sono programmi scritti in Java che vengono scaricati dal server al browser ed eseguiti sulla macchina client. Hanno delle limitazioni di funzionamento dovute a problemi di sicurezza. E’ possibile comunque accedere a dati che risiedono sul server (database)

●Gli script lato client sono generalmente usati per validare dati di input dell’utente e sono supportati dal browser (Javascript/VBScript)

●Recentemente si sta diffondendo AJAX, un mix di tecnologie clientside per implementare una connessione asincrona tra client e server (google maps, gmail)

Page 35: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Application server

Web server Motore dinamico lato server

Componenti aggiuntive

Data base

PHPASPJSP...

Apache

IIS...

MySQL

Access

SQL Server

...

Ambiente per costruire applicazioni web

Page 36: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Application Server

AS commerciali (proprietari)AS commerciali (proprietari)

●Cold Fusion di Adobe.

●ASP. NET di Microsoft.

AS open sourceAS open source

●PHP (P Hypertext Preprocessor), ideato da Rasmus Lerdorf.

●ZOPE (Z Object Publishing Environment), ideato da Jim Fulton.

●TOMCAT, è un servlet container per applicazioni JSP.

●(Esistono anche server J2EE proprietari come IBM WebSphere)

Page 37: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

PHP

PHP (acronimo ricorsivo per "PHP: Hypertext Preprocessor") è un linguaggio di scripting general-purpose Open Source molto utilizzato, specialmente indicato per lo sviluppo Web.

PHP nasce nel 1994 per opera di Rasmus Lerdorf che lo utilizzava nell’implementazione delle proprie pagine web. Nel 1995 esce la prima versione.

Nelle pagine PHP il codice PHP viene immerso nell’HTML. Il codice PHP è delimitato da speciali start e end tag che ne indicano l'inizio e la fine e che consentono di passare dal modo HTML al modo PHP.

PHP può essere usato su tutti i principali sistemi operativi, inclusi Linux, molte varianti di Unix (compresi HP-UX, Solaris e OpenBSD), Microsoft Windows, MacOS X ed è supportato dalla maggior parte dei web server esistenti, quindi anche da Apache e IIS.

Page 38: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Installazione

● PHP può essere utilizzato in tre ambiti differenti:

Server-side scripting: in questo caso si può adottare un modulo per l’estensione del web server (es. file .dll) oppure se non si dispone del modulo si può utilizzare PHP come motore CGI ( e quindi si deve disporre dell’eseguibile php.exe)

Command line scripting: si installa e utilizza l’interprete php.exe per l’eseguzione da linea di comando.

Applicazioni GUI. Consente di gestire finestre e oggetti grafici utilizzando l’estensione PHP-GTK che non è fornita con la distribuzione ufficiale di PHP.

Page 39: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Installazione di PHP per IIS

● Per installare un modulo ISAPI per IIS:

Nella console di configurazione di IIS, andare in 'Home Directory’.

Premere il pulsante ‘Configuration’.

Aggiungere una nuova voce alle Application Mapping.

Specificare il path del modulo ‘php4isapi.dll’.

Specificare l’estensione dei file da interpretare come .php.

Marcare la checkbox “Script engine” per informare che si tratta di un engine per script.

Fermare e riavviare IIS.

Page 40: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Installazione di PHP per IIS

La finestra di configurazione per le Applicazioni in IIS.

Page 41: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

File di configurazione

La configurazione di PHP è registrata nel file php.ini.

Il file php.ini contiene una lista di direttive.

Nel file php.ini la sintassi da seguire è questa:

– Righe bianche o che iniziano con ; sono ignorate.

– Gli header di sezione (es :[Foo]) sono ignorati.

– Le direttive vanno specificate nella forma: direttiva=valore. I nomi delle direttive sono case sensitive. Il valore può essere un numero, una stringa o una costante

– Le estensioni a PHP devono essere specificate prima del loro successivo uso nel file di configurazione.

Se usato come linguaggio di script il file php.ini viene letto prima di ogni esecuzione di PHP. Se invece PHP è utilizzato da un web server come interprete del codice delle pagine web, il file è letto solo una volta all’avvio del server.

Page 42: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Un esempio con PHP

● <html>● <head>● <title>Test PHP</title>● </head>● <body>● <?php echo "Hello World!"; ?>● </body>● </html>

Il file non necessita di essere eseguibile. Questi file hanno l’estensione .php.

Tutto ciò che fa è visualizzare ‘Hello World!’ usando la funzione echo di PHP inserita fra gli speciali tag <?php e ?>

All'interno di un file HTML si può entrare ed uscire dalla modalità PHP quante volte si desidera.

Page 43: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Uscire dalla modalità HTML

Esistono 4 set di tag che possono essere utilizzati per delimitare blocchi di codice PHP:

● 1. <?php echo("per inserire codice php si puo usare questo modo\n"); ?>

● 2. <?= espressione ?>

● Questa è un'abbreviazione per "<? echo espressione ?>" .

● 3. <script language="php">

● echo ("altro modo per inserire codice php");

● </script>

● 4. Tag nello stile ASP:

● <%= $variable; %> Una abbreviazione per "<%echo .."%>

Soltanto due di questi (<?php. . .?> e <script language="php">. . .</script>) sono sempre disponibili. Gli altri possono essere attivati o disattivati tramite il file di configurazione php.ini.

Page 44: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Uscire dalla modalità HTML

● Il PHP permette l’uso delle strutture seguenti, dove l’output e condizionato dal valore di $expression:

● <?php● if ($expression) {● ?>● <strong>Questa è vera.</strong>● <?php● } else {● ?>● <strong>Questa è falsa.</strong>● <?php● }● ?>

Page 45: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Commenti

● Il PHP supporta i commenti dei linguaggi 'C', 'C++' e della shell Unix. Per esempio:

● <?php

● //Commento su una linea nella stile c++

● /* Commento su più linee

● ...ancora un'altra linea di commento */

● ?>

● Lo stile di commento su "una linea", attualmente commenta solo fino alla fine della linea o del blocco corrente di codice PHP. Questo significa che il codice HTML posizionato dopo // ?> sarà visualizzato

Page 46: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tipi in PHP

● PHP supporta 8 tipi primitivi. ● 4 tipi scalari :

boolean

integer

float

string

● 2 tipi composti: array

object

● 2 tipi speciali: resource

NULL

Page 47: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Tipi in PHP

Il tipo di una variabile di solito non viene impostato dal programmatore ma deciso a runtime da PHP in base al contesto nel quale la variabile è utilizzata.

Per controllare quale sia il tipo e i valori di una certa variabile si usa la funzione var_dump().

Se si vuole una rappresentazione in stringa human-readable del tipo si usa la funzione gettype(). Per farne delle verifiche si può utilizzate la funzione is_type().

Il PHP consente il type casting per modificare il tipo di una variabile.

Page 48: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio sull’uso delle variabili

● <?php● $foo = "0"; // $foo è stringa (ASCII 48)● $foo += 2; // $foo è un intero (2)● $foo = $foo + 1.3; // $foo è un float (3.3)● $foo = 5 + "10 mele"; // $foo = 15● echo $foo."\n"; // stampa 15

● //Es. sul casting● $foo = 10; // $foo è un intero● $bar = (boolean) $foo; // $bar è un boolean● echo $bar."\n"; // stampa 1● ?>

Page 49: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio di tipi di PHP

● <?php● $bool = TRUE; // boolean● $str = "foo"; // string● $int = 12; // integer

● echo gettype($bool); // stampa "boolean"● echo gettype($str); // stampa "string"

● // se è un intero , lo incrementa di 4● if (is_int($int)) {● $int += 4;● }

● // Se $bool è una string, lo stampa● // (in questo caso non viene stampato niente)● if (is_string($bool)) {● echo "String: $bool";● }● ?>

Page 50: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio var_dump()

● <?php $a = array (1, 2, array ("a", "b", "c"));

● var_dump ($a); ?>

● /* output:

● array(3) {

● [0]=> int(1)

● [1]=> int(2)

● [2]=> array(3) {

● [0]=> string(1) "a"

● [1]=> string(1) "b"

● [2]=> string(1) "c"

● }

● } */

Page 51: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Stringhe in PHP

Le stringhe in PHP non pongono limiti nella lunghezza. Si possono definire usando l’apice singolo. In questo caso la stringa non

è mai interpretata.● echo ’questa è una semplice stringa'; Si possono definire usando le doppie virgolette. In questo caso PHP

interpreta le variabili e i caratteri di escape contenuti nella stringa.● echo “stampo la variabile \$var: $var”; Si possono definire usando l’operatore <<<● Es:● $str = <<<EOD ● Esempio di stringa definita usando la sintassi

heredoc. ● EOD; ● Anche in questo caso la stringa è interpretata.

Page 52: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Stringhe in PHP

Operatori di stringa:

– l’operatore ‘.’ Concatena due stringhe

– l’operatore ‘.=‘appende ad una variabile la stringa a destra dell’uguale.

– Il confronto tra stringhe si esegue utilizzando gli operatori ==, !=, <, >, <=, >=

Page 53: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Array in PHP

PHP fornisce array associativi per memorizzare coppie chiave-valore. Non ci sono differenze fra array con indici e array associativi: PHP fornisce un solo tipo di array.

Un array può essere creato usando il costrutto array:● $arr = array("foo" => "bar", 12 => true);● echo $arr["foo"]; // bar● echo $arr[12]; // 1 La chiave può essere sia un intero che una stringa. Un elemento di un array può essere di uno qualunque dei tipi PHP● $arr = array("somearray" => array(6 => 5, 13 => 9, "a"

=> 42)); ● echo $arr["somearray"][6]; // 5 ● echo $arr["somearray"][13]; // 9 ● echo $arr["somearray"]["a"]; // 42

Page 54: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Array in PHP

Se la chiave di un nuovo elemento è omessa, viene adottata come nuova chiave il massimo indice intero dell’array +1. Questo vale anche per gli indici negativi.

Se non esiste un indice intero, la nuova chiave avrà valore 0. Se viene specificata una chiave già esistente il vecchio valore sarà

sovrascritto. Non si possono usare array o oggetti come chiavi. Una volta creato l’array può essere modificato.

● $arr = array(5 => 1, 12 => 2); ● $arr[] = 56; // Come fare $arr[13] = 56; ● $arr["x"] = 42; // Aggiunge un nuovo elemento● unset($arr[5]); // Rimuove l’elemento dall’array● unset($arr); // Cancella tutti gli elementi

Page 55: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Strutture di controllo - 1

Costrutto if.. else● if ($a > $b) {● print "a è maggiore di b";● } else {● print "a NON è maggiore di b";● } elseif estende if aggiungendo la possibilità di eseguire un'altra istruzione nel

caso in cui l'espressione contenuta nel ramo if sia FALSE● if ($a > $b) {● print "a è maggiore di b";● } elseif ($a == $b) {● print "a è uguale a b";● } else {● print "a è minore di b";● }

Page 56: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Strutture di controllo - 2Costrutto while●$i = 1; ●while ($i <= 10) { ● print $i++; ●} Costrutto do..while●$i = 0;●do {● print $i;●} while ($i>0);Costrutto for●for ($i = 1; $i <= 10; $i++) { print $i; }

Page 57: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Strutture di controllo - 3

Costrutto for..each●$a = array (1, 2, 3, 17); ●foreach ($a as $v) { ● print "Valore corrente di \$a: $v.\n"; } Costrutto switch●switch ($i) { ● case 0: print "i è uguale a 0"; break; ● case 1: print "i è uguale a 1"; break; ● case 2: print "i è uguale a 2"; break; }break termina l'esecuzione di una struttura for, foreach, while, do..while

o switch. continue si utilizza per interrompere l'esecuzione del ciclo corrente e

continuare con l'esecuzione all'inizio del ciclo successivo

Page 58: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

include() e require()

include() e require() includono e valutano uno specifico file. include() e require() sono identiche in ogni senso eccetto per

come esse trattano gli errori:include() produce un warning mentre require() restituisce un Fatal Error.

Quando un file viene incluso, il codice che esso contiene eredita lo scope delle variabili della riga in cui si verifica l'inclusione.

require() e include() devono essere inclusi all'interno di blocchi di istruzioni se si trovano in un blocco condizionale.

È possibile eseguire un'istruzione return() in un file incluso per terminare l'esecuzione di quel file e restituirlo allo script che l'ha chiamato.

Page 59: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Funzioni in PHP

● Una funzione può essere definita usando la sintassi● function myfunc($arg_1, $arg_2, ..., $arg_n)● {● echo "Funzione di esempio.\n";● return $retval;● } PHP non supporta l'overloading di funzioni PHP 4 supporta un numero variabile di argomenti e gli argomenti di default PHP supporta il passaggio di argomenti per valore e per riferimento (di

default, gli argomenti della funzione sono passati per valore) Il passaggio per riferimento si ottiene anteponendo un ampersand (&) al

nome dell'argomento nella definizione della funzione I valori vengono restituiti usando l'istruzione opzionale return. Può essere restituito qualsiasi tipo, incluse liste ed oggetti.

Page 60: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Classi e oggetti

Le classi sono tipi del linguaggio. Una classe si definisce usando la seguente sintassi:● <?php● class Cart{● var $items; // Articoli nel carrello ● // lo uso come array associativo

● // Aggiunge $num articoli di $artnr nel carrello● function add_item ($artnr, $num)● {● $this->items[$artnr] += $num;● } ● }● ?>

Page 61: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Classi e oggetti

Per creare una variabile oggetto si usa l'operatore ‘new’. ● $cart = new Cart; Si può accedere ai metodi della classe usando l’operatore ‘->’● $cart->add_item(”Mele",10 );● Questa operazione aggiunge all’array associativo items la nuova coppia

(Mele,10). Per stampare i valori dell’array si può usare ancora l’operare ->● echo $cart->items["Mele"]; //stampa 10● si specifica un solo simbolo di $ per accedere alla variabili Per poter accedere all'interno della classe alle funzioni e alle variabili

interne della stessa classe si usa la pseudo-variabile ‘$this’

Page 62: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Classi e oggetti

E’ possibile generare classi per estensione di altre classi. Una classe estesa o derivata ha tutte le variabili e le funzioni della

classe di base più tutto ciò che viene aggiunto dall'estensione. Non è possibile che una sottoclasse ridefinisca variabili e funzioni di

una classe madre. L'eredità multipla non è supportata Le classi si estendono usando la parola chiave 'extends'.● class Named_Cart extends Cart{● var $owner;● function set_owner ($name)● {● $this->owner = $name;● }● }

Page 63: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Classi e oggetti

In PHP si possono definire i costruttori di classe che vengono invocati automaticamente quando viene istanziato un oggetto con l’operatore new.

● class Auto_Cart extends Cart { ● function Auto_Cart() { ● $this->add_item ("10", 1); ● } ● } L'operatore :: è usato per riferirsi alle funzioni di classi

senza istanziarle. Si possono usare funzioni della classe, ma non le variabili della classe.

Page 64: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Variabili speciali

● PHP definisce un certo numero di array associativi speciali disponibili all’interno degli script server-side tra le quali:

$_SERVER: contiene variabili impostate dal web server e relative all’ambiente di esecuzione dello script

$_GET: contiene variabili ricevute dallo script via HTTP GET

$_POST: contiene variabili ricevute dallo script via HTTP POST

$_ COOKIE: contiene variabili ricevute dallo script tramite l’invio di cookie

$_ENV: contiene variabili d’ambiente dello script.

$_SESSION: contiene variabili che sono correntemente registrate nella sessione di esecuzione dello script.

Page 65: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempi con le variabili speciali

● Vediamo come verificare che tipo di browser sta utilizzando la persona che visita le nostre pagine.

● Per fare questo si controlla la stringa dell'user agent che il browser invia come parte della richiesta HTTP. Quest'informazione viene registrata in una variabile.

La variabile alla quale ci riferiamo adesso è $_SERVER["HTTP_USER_AGENT"]

● <?php echo $_SERVER["HTTP_USER_AGENT"]; ?>

L'output (risultato) di questo script potrebbe essere: ● Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)

$_SERVER è soltanto un array che automaticamente viene reso disponibile da PHP.

Page 66: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Gestire le form

● Qualsiasi elemento inviato tramite una form è automaticamente disponibile negli script PHP.

● Es:

● <form action="action.php" method="POST">

● Il tuo Nome: <input type="text" name="name" value="" />

● La tua et&agrave;: <input type="text" name="age" value ="" />

● <input type="submit">

● </form>

● Quando l'utente riempie questa form e preme il pulsante submit, viene

richiamata la pagina action.php.

Page 67: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Gestire le form - 2

Nella pagina action.php lo script di gestione della form precedente potrebbe essere:

● Ciao <?php echo $_POST["name"]; ?>.

● La tua et&agrave; &egrave; di <?php echo $_POST["age"]; ?> anni.

Ecco un possibile output di questo script: ● Ciao Joe.

● La tua età è di 22 anni.

Le variabili $_POST["name"] e $_POST["age"] vengono impostate automaticamente dal PHP.

Se usassimo il metodo GET le informazioni ricavate dalla nostra form si troverebbero invece in $_GET.

Page 68: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Gestione delle sessioni

PHP consente nel mantenere certi dati attraverso accessi successivi con l’uso delle sessioni.

Il sistema di gestione delle sessioni supporta un numero di opzioni di configurazione che possono essere impostate nel file php.ini.

Al visitatore del sito web viene assegnato un id unico, il cosidetto id di sessione. Questo viene registrato in un cookie sul lato utente o è propagato tramite l'URL.Quando un visitatore accede al sito, PHP controllerà automaticamente (se session.auto_start è settato a 1 in php.ini) se uno specifico id di sessione sia stato inviato con la richiesta.

Le sessioni sono gestite un 2 modi

– Tramite session_register() che registra variabili nella sessione corrente.

– Con $_SESSION. Si può accedere alle variabili di sessione come a variabili normali in un array.

Page 69: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Gestione delle sessioni

Registrare una variabile con $_SESSION.

● //isset verifica se la variabile è definita

● if (!isset($_SESSION['count'])) {

● $_SESSION['count'] = 0; }

● else {

● $_SESSION['count']++;

● }

Resettare una variabile con $_SESSION.

● unset($_SESSION['count']);

Registrare una variabile con session_register().

● $nome = ”Mario";

● session_register(”nome");

Page 70: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Esempio

● Si vuole creare una pagina PHP che consenta a degli utenti di inserire il proprio nome da aggiungere ad una lista.

● Per fare questo si deve:

Predisporre un database per la registrazione dei dati ricevuti, quindi creare le tabelle con i campi necessari.

Creare una pagina HTML che consenta agli utenti di inserire i dati da registrare.

Creare la pagina php che ricevuti i dati via web, utilizza le funzioni di accesso al database per la registrazione dei dati.

Page 71: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Predisporre il database

Si crea il database ListaClienti con Access.

Si crea la tabella Utente con i campi Nome, Cognome e ID.

Si crea una sorgente dati ODBC per questo data base

Page 72: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

La pagina php - 1

● Sia l’invio che la registrazione dei dati vengono fatti nella stessa pagina

● <?php● $myconn=odbc_connect("ListaClienti","","");● $query = <<<EOD● insert into UTENTI (Nome,Cognome) values

('$_POST[Nome]','$_POST[Cognome]')● EOD;

● if($_POST["Nome"] <>""){● $res=odbc_exec($myconn, $query);● }● ?>● <HTML><HEAD></HEAD>● <BODY leftmargin="0" topmargin="0" marginwidth="0"

marginheight="0" >

Page 73: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

La pagina php - 2

● <FORM action=utenti.php method=POST>● <INPUT TYPE="text" name="Nome">● <INPUT TYPE="text" name="Cognome">● <INPUT TYPE="submit" name="Invio" value="Invia"><BR>● </FORM>● <p>Lista degli utenti:<p>● <?php ● $res=odbc_exec($myconn, "select * from UTENTI");● //odbc_result_all($res); //inserisce il risultato in

una //tabella html● $i=1;● while(odbc_fetch_row($res,$i)){● $nome = odbc_result($res, "Nome");● $cognome = odbc_result($res, "Cognome");● $i++;● echo $nome." - ".$cognome."<br>";● }?>● </BODY></HTML>

Page 74: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Il risultato

Page 75: 1 Corso di Ingegneria del Web A A. 2014 2015 Domenico Rosaci 19 - Web Applications.

Link Utili

http://www.php.net/

http://php.resourceindex.com/

http://www.hotscripts.com/PHP/

http://www.phpworld.com/