esercitazione 8 basi di dati e web - dis.uniroma1.itsalza/bd/es-web-17-18.pdf · comandi sql...

26
Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 1 Esercitazione 8 Basi di dati e web Rev. 2

Upload: phamcong

Post on 28-Mar-2019

217 views

Category:

Documents


0 download

TRANSCRIPT

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 1

Esercitazione 8

Basi di dati e web

Rev. 2

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 2

Basi di dati e web

• Una modalità tipica di accesso alle basi di dati è tramite interfacce web

• Esiste una molteplicità di tipologie applicative, ad esempio:– Interfacce web per l’interrogazione e l’effettuazione di

transazioni su basi di dati– DBMS, o più in generale CMS (Content Management Systems)

per la gestione di contenuti in portali web• In tutte le tipologie applicative abbiamo architetture a tre livelli:

– Web server, con funzioni di front-end– Application server– Database server, con funzioni di back-end

• Il client è sempre un Internet browser

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 3

Pagine statiche e pagine dinamiche

• Il protocollo http prevede:– Una richiesta da parte del client (browser), consistente nella

specifica di un file, accompagnata da un eventuale passaggio di parametri, con modalità varie

– Una risposta da parte del web server (file html, immagine, ecc.)

• Il file restituito dal server può essere:– Una pagina statica: tipicamente un file html (di contenuto

prefissato) memorizzato nel server, in particolare quello specificato nella richiesta

– Una pagina dinamica : un file contenente codice html costruito run-time in base ai contenuti del file di richiesta, della base di dati, e in base al valore dei parametri

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 4

Scripting lato-server e lato-client

• Lo strato applicativo è costituito da codice eseguibile (script) e si sviluppa a due livelli

• Lato-server : – Esecuzione di uno script lanciato dal web server in base alla

richiesta del browser per costruire una pagina dinamica– Lo script può lanciare a sua volta l’esecuzione di altro codice

applicativo e coinvolgere livelli di back-end dell’architettura– Tipici linguaggi di scripting lato-server sono PHP, Perl, ASP

• Lato-client:– Esecuzione di uno script sul browser durante l’interpretazione

della pagina e sulla base dell’interazione dell’utente– Tipico linguaggio di scripting lato-client è Javascript

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 5

PHP (Hypertext Preprocessor)

• È un linguaggio di scripting lato-server specificamente progettato per la costruzione di pagine html dinamiche

• È un free software rilasciato sotto una particolare licenza• Il codice PHP è immerso (embedded) nel sorgente html ed

interpretato da un apposito modulo, che è parte del web server• Quando al web server viene richiesto un file .php, oppure incontra

codice PHP in un file html, esso ne demanda l’esecuzione ad un suo apposito modulo, il PHP runtime (interprete PHP)

• L’interprete PHP agisce come un filtro:– Accetta in ingresso testo e istruzioni PHP da un file– Produce in uscita un file, tipicamente un file html

• Nel costruire l’output, l’interprete PHP interagisce con altri moduli applicativi, tipicamente il DBMS

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 6

Esecuzione degli script PHP

Web browser

Web server

RDBMS

PHP

Script PHP Pagina dinamica

Comandi SQL Risultati (tabelle)

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 7

Architetture lato server

• Un’architettura lato server comprende:– Un sistema operativo– Un web server– Un modulo di interpretazione PHP (parte del web server)– Un DBMS

• A parte gli ambienti proprietari, le più diffuse piattaforme sono:– LAMP: Linux Apache MySQL PHP– WAMP: Windows Apache MySQL PHP

A parte Windows, la piattaforma WAMP è tutta open source

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 8

Form in pagine html

• Le form sono moduli di richiesta inserite in pagine html• Una form (letteralmente modulo) permette di raccogliere valori che

vengono poi passati come parametri in una richiesta http• Oltre a caselle per l’input di testo, una form può contenere anche

elementi speciali, denominati control, quali: menu, checkbox, pulsanti, ecc.

• Ci sono tre tipi di pulsanti:– Pulsanti di submit: provocano la trasmissione (submit) della

form ed il relativo passaggio dei parametri– Pulsanti di reset: provocano il ripristino dei valori iniziali – Pulsanti di push: usati per attivare il lancio di uno script lato-

client

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 9

Passaggio dei parametri e azione

• Il passaggio dei parametri, consiste nella trasmissione del formdata set, cioè dell’insieme dei valori associati ai vari control

• Quando una form viene trasmessa il passaggio dei parametri può avvenire in due diversi modi

• Metodo GET: quando la richiesta è inviata, il form data set è inserito come parte della URL

• Metodo POST: il form data set è inviato, in forma opportunamente codificata insieme alla richiesta, ma i parametri non sono visibili nella URL

• Inoltre nella form viene specificata una azione, ovvero il nome di un file (es. un file php che deve essere mandato in esecuzione sul server)

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 10

Interrogazione da web della base di dati (A)

È possibile interrogare una base di dati tramite un web server tramite una sequenza di passi:A. Compilazione e trasmissione della form

1. L’utente tramite il browser richiede una URL cui corrisponde una pagina html contenete una form

2. La pagina è interpretata dal browser che sviluppa i vari controlli: menu, checkbox, pulsanti, ecc.

3. L’utente ‘compila la form’ specificando, direttamente o indirettamente il form data set cioè i parametri che specificano l’interrogazione

4. All’atto del submit viene inoltrata una richiesta al web server del file specificato nella action (ad es. un file .php), con associato il form data set

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 11

Interrogazione da web della base di dati (B)B. Esecuzione lato-server

5. Il web server riconosce il file .php e ne demanda l’interpretazione al modulo PHP

6. Il modulo PHP si connette al DBMS e gli passa una serie di comandi SQL (l’interrogazione)

7. Il DBMS valuta l’interrogazione e restituisce al modulo PHP il risultato (una tabella) tramite il meccanismo dei cursori

8. Il modulo PHP usa il risultato per costruire una pagina html con il risultato dell’interrogazione e la restituisce al web server

9. Il web server restituisce la pagina html al browser10. Il browser interpreta la pagina e visualizza il risultato

dell’interrogazione

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 12

Sviluppo dell’ambiente di esercitazione• Per preparare l’ambiente di esercitazione occorre installare:

– MySQL– Apache– Il modulo PHP (in realtà parte di Apache)

• Si assume che tutto ciò sia stato installato tramite la piattaforma di sviluppo web/database, XAMPP

• Dal pannello di controllo lanciare sia MySQL che Apache• Apache una volta partito si pone in ascolto sulla porta 80• Negli esempi che seguono si suppone che XAMP sia stato installato

nella directory C:\xampp• In questo caso Apache assume come sua directory di rootC:\xampp\htdocs

• Ricopiare in questa directory la cartella db scaricata dal sito

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 13

• Come esempi prepariamo una serie di form per l’interrogazione della base di dati La Famiglia

Persone (Nome, Sesso, Anno, Città)Discendenza (Genitore, Figlio)Stato (Città, Inizio, Fine, Stato)Matrimoni (Marito, Moglie, Anno)

• Le interrogazioni come struttura sono predefinite, ma possono essere parametriche, nel qual caso i parametri vengono raccolti tramite le form

Esempi

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 14

• Per editare i file PHP conviene, ma non è indispensabile, usare un editor guidato dalla sintassi

• Una scelta efficace e facile da installare è Notepad++ facilmente reperibile in rete

– Oltre che per il PHP funziona per molti altri tipi di file

– I colori e le altre caratteristiche sono personalizzabili

• Posizione del web server e dei contenuti

– Se il web server è nello stesso host del client, allora si trova all’indirizzo localhost

– A volte localhost potrebbe non funzionare: allora basta provare con 127.0.0.1

Sviluppo dell’ambiente di esercitazione (2)

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 15

Esempio 1

ES1. Nome di tutte le persone nella base di dati

• All’interrogazione corrisponde la query SQL:SELECT Nome FROM Persone

• Non ci sono parametri, pertanto non è necessario predisporre una form

• Basta predisporre sul server un file php in cui:– Viene effettuata la connessione al DBMS– Viene selezionato il DB Famiglia– Viene passata la query, che restituisce la tabella Persone– La tabella viene letta tupla per tupla e ‘stampata’, tramite il

comando echo, nella pagina html statica che viene generata

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 16

Esempio 1: il file pagina.php

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 17

Esempio 1: recupero delle tuple• L’idea è quella che dall’ambiente applicativo si vede un cursore, il

quale contiene inizialmente la prima tupla della tabella risultato• Successivamente ogni operazione di fetch sposta il cursore sulla

tupla successiva• Nella fattispecie:

– Il risultato della Select viene messo in $r– Il comando $d=mysql_fetch_array($r)mette in $d la

successiva tupla della tabella– Al termine della tabella $d vale falso– La tupla corrente ( $d ) viene usata per generare una riga

nella pagina html generata da PHP contenente il valore dell’attributo Nome

• Nel browser chiedere la pagina: http://localhost/db/pagina.php

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 18

Esempio 1: la costruzione della pagina

• L’interprete PHP genera una pagina html costituita da:– Le parti generate dall’esecuzione delle echo– Le stringhe generate da echo sono concatenate tramite

l’operatore .– La stringa <br /> è inserita nella pagina per essere

interpretata dal browser e provocare un ‘a capo’– Il carattere \n provoca un ‘a capo’ nella pagina html

• La pagina così generata è di fatto una pagina statica costruita dinamicamente

• La pagina è restituita dal modulo PHP al web server che la manda a sua volta come risposta al browser

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 19

Esempio 2ES2. Sesso, nome e anno di nascita di tutti membri della famiglia nati dopo un certo anno

• All’interrogazione corrisponde la query SQL:SELECT Nome, Sesso, Anno FROM Persone where Anno>inizio order by anno

• Occorre una form perché deve essere acquisito il parametro inizio• La form2.html prevede una casella per inserire l’anno• il comando input specifica:

– L’etichetta associata alla casella: Anno di inizio– La specifica del nome del parametro name="inizio" Tipo type="text" e dimensione size="20"

– Il valore iniziale value="" (stringa vuota)• Azione associata: action="pagina2.php" method="post"

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 20

Esempio 2: il file pagina2.php

• Quando la form form2.html viene restituita dal browser il web server manda in esecuzione la action pagina2.php

• Trattandosi di un file .php la sua interpretazione è demandata al modulo PHP:

– La parte di codice PHP è contornata da <?php e ?>– Il resto è codice html

• Dopo la connessione e selezione del DB viene inviata la query SQL• Nella query viene passato il parametro proveniente dalla form:

$_REQUEST[inizio]

• Il risultato restituito dal DBMS è messo in $res

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 21

Esempio 2: la costruzione della pagina

• L’interprete PHP genera una pagina html costituita da:– Le parti già in codice html in pagina2.php– Le parti generate dall’esecuzione delle echo– Le stringhe generate da echo sono concatenate tramite

l’operatore .– La stringa <br /> è inserita nella pagina per essere

interpretata dal browser e provocare un ‘a capo’– Il carattere \n provoca un ‘a capo’ nella pagina html

• La pagina così generata è di fatto una pagina statica costruita dinamicamente

• La pagina è restituita dal modulo PHP al web server che la manda a sua volta come risposta al browser

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 22

Esempio 2a (controllo lato client) • Nell’esempio 2 non c’è alcuna forma di controllo sui dati inseriti

nel campo ‘Anno di inizio’, né sul fatto che essi vengano inseriti• A questo esempio corrispondono la pagina form2a.html e la

pagina di risposta pagina2a.php• In form2a.html:

• viene inserito un controllo lato client tramite una funzione javascript;

• la definizione della funzione checkform()è nel header;• La funzione è richiamata in corrispondenza dell’evento di

submit della form: onSubmit="return checkform()"

• Solo se la funzione restituisce true la submit ha luogo• pagina2a.php è identica a pagina2.php salvo che

ritorna su form2a.html

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 23

Esempio 2b (controllo lato server) • A questo esempio corrispondono la pagina form2b.html e la

pagina di risposta pagina2b.php• form2b.html è identica a form2.html salvo che lancia pagina2b.php

• In pagina2b.php:• viene inserito un controllo lato server tramite un controllo PHP

sulla variabile $_REQUEST['inizio'];• se la variabile non è un numero si stampa un messaggio;• altrimenti viene eseguita la query con il parametro etc.if(!is_numeric($_REQUEST['inizio'])){

echo "Non è stato inserito un numero"; }else{ … query e costruzione pagina … }

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 24

Esempio 3

ES3. Sesso, nome, anno di nascita e città, di tutte le persone nate in un certo periodo in una certa città

• La novità in questo caso è nell’acquisizione parametro citta, che viene acquisito tramite una select, cioè un menu a tendina

• Inoltre si vuole che il menu a tendina, sia calcolato dinamicamente, in base alle città effettivamente presenti nel DB

• La richiesta iniziale sarà costituita dal file form3.php che genererà dinamicamente la form contenente il menu in questione

• I valori da includere nel menu sono calcolati con l’interrogazione:SELECT distinct Città FROM Persone

order by Città

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 25

Esempio 4: la form di richiesta

ES4. Inserimento di una nuova persona nella tabella Persone specificandone Nome, Città, Sesso e Anno di nascita

• I dati da inserire vengono acquisiti tramite la form form4.html• Nella form vengono eseguiti diversi controlli lato client tramite la

funzione checkform:1. Deve comunque essere inserito il Nome della persona2. Deve essere selezionato il Sesso dal menu a tendina3. Se Città non viene inserita si assume il valore NULL4. Se Anno non viene inserito si assume il valore NULL5. Se Anno viene inserito si accettano solo valori numerici6. Nei casi 3 e 4 si controlla che l’omissione sia intenzionale

Basi di dati - prof. Silvio Salza - a.a. 2017-2018 E8 - 26

Esempio 4: il file php• La action associata alla form è il file pagina4.php• Questo file costruisce la pagina dinamica che viene restituita, e che

riporta l’esito dell’operazione di inserimento1. Vengono finalizzati i valori di Anno e Città: messi a NULL se

viene passata una stringa vuota e messi gli apici a Città2. Viene preparata la stringa della query di inserimento3. Viene passata la query al DBMS4. Se non ci sono errori la funzione mysql_query restituisce true

e la cosa viene confermata nella pagina restituita5. Altrimenti, se l’errore è il 1062 si segnala la duplicazione della

chiave primaria6. Negli altri casi si restituisce codice e messaggio passati dal DBMS