Data Base e Web • Applicazioni WEB e creazione pagine dinamiche – Architettura CGI – Architettura Java servlet – Pagine dinamiche con PHP • Progettazione applicazioni Web • Il materiale è ripreso da [2] Albano, Ghelli, Orsini “Basi di dati relazionali e a oggetti”, Zanichelli, 1997 [4] Atzeni, Ceri, Fraternali, Paraboschi, Torlone “Basi di dati – architetture e linee di evoluzione”, McGraw-Hill, 2003 F.Cesarini - Basi Dati Distribuite Data Base e Web 1 Internet • • • • • Federazione di reti che comunicano attraverso l’insieme di protocolli TCP/IP (Transmission Control Protocol / Internet Protocol) Reti locali collegate ad altre reti tramite router Ogni calcolatore ha un indirizzo IP (a cui è in genere associato un indirizzo simbolico) La struttura dell’indirizzo e la presenza dei router rendono la topologia della rete trasparente all’utente Rete che utilizza TCP/IP – Paradigma client/server – Il client gestisce l’interazione con l’utente – Il server appare come un modulo software che offre un insieme di funzionalità predefinite (servizi collegati al WEB) fruibili mediante il protocollo HTTP (che si appoggia su TCP/IP) F.Cesarini - Basi Dati Distribuite Data Base e Web 2 1 World Wide Web • • • • • • • • WWW: applicazione, fruibile su Internet, per lo scambio di ipertesti multimediali Lo scambio avviene secondo il protocollo HTTP (HyperText Transfer Protocol) Un ipertesto è un documento che ha una struttura non sequenziale Un ipertesto è costituito da parti collegate fra loro (consultazione = navigazione) Ipertesto multimediale (documento composto da testi, immagini, filmati, …) Un ipertesto multimediale può essere distribuito su più nodi collegati da Internet WWW: ipertesto multimediale distribuito formato da componenti autonome I documenti multimediali possono essere statici o prodotti in modo dinamico F.Cesarini - Basi Dati Distribuite Data Base e Web 3 Protocollo HTTP HyperText Transfer Protocol • • • HTTP è un protocollo client-server che utilizza TCP/IP come protocollo di comunicazione di rete Browser: programma client che invia richieste di risorse al Web server e visualizza quanto da esso inviato HTTP versione 1.0 – Richiesta di connessione da parte del browser (connessione TCP/IP) – Accettazione della connessione da parte del server – Il client invia un messaggio con l’indicazione della risorsa richiesta ed eventuali parametri – Il server comunica l’esito della richiesta e chiude la connessione • HTTP non ha memoria – Il server non mantiene informazioni sulle operazioni già effettuate F.Cesarini - Basiè Dati asimmetrico • HTTP Distribuite Data Base e Web 4 – L’iniziativa può essere presa solo dal client 2 Protocollo HTTP • • • Ogni risorsa è identificata da un URL (Uniform Resource Locator) http: // <host> [ : <porta> ] [ <path> [ ? <query> ]] Il path identifica la risorsa richiesta (file o programma eseguibile) nel file system del server Richiesta HTTP dal browser al server – Request line: URL della risorsa, metodo utilizzato per comunicare (GET, POST), versione del protocollo utilizzata – Header (opzionale) – Body (opzionale) • Risposta HTTP dal server al browser – Status line: versione del protocollo usata, codice con l’esito della richiesta, … – Header (opzionale) – Body: contiene la risorsa che viene restituita F.Cesarini - Basi Dati Distribuite Data Base e Web 5 HTML – HyperText Markup Language • • • • • • • HTML è un linguaggio per la scrittura di documenti ipermediali Vengono usati opportuni comandi (tag) per definire proprietà grafiche o strutturali del testo Proprietà strutturali: <HEAD>, <META>, <BODY>, … Proprietà grafiche: <CENTER>, … Un tag può avere attributi che ne precisano il significato Un documento HTML deve essere elaborato da un opportuno processore per essere visualizzato o stampato Tag <A>, ancora …<A href=“http:// then.dsi.unifi.it” > pagina dei corsi </A> • Tag <FORM> : maschera di immissione dati che il browser invia al server per essere elaborati dal programma specificato nell’attributo action F.Cesarini - Basi Dati Distribuite Data Base e Web 6 3 CGI – Common Gateway Interface • • Standard architetturale per creare pagine dinamicamente L’URL indica nel path il programma (script CGI) da eseguire ed eventuali parametri – Il server salva le variabili CGI e crea un processo dedicato all’esecuzione del programma – Il programma CGI legge le variabili, compie le sue elaborazioni e produce la pagina HTML da restituire al client, ad esempio interrogando il DBMS – Il server prende la pagina HTML e la inserisce nella risposta HTTP che invia al client • • Lo script CGI deve tener conto del metodo utilizzato dalla richiesta HTTP da parte del browser per inviare le informazioni HTTP prevede i metodi GET e POST che codificano le informazioni in modo diverso F.Cesarini - Basi Dati Distribuite Data Base e Web 7 Architettura CGI invocazione richiesta client risposta Web Server risposta calcolata Programma CGI risultato query DBMS F.Cesarini - Basi Dati Distribuite Data Base e Web 8 4 Caratteristiche dell’architettura CGI • Con CGI si producono pagine dinamiche in modo indipendente dalla piattaforma • Per ogni richiesta CGI, il WEB server crea un nuovo processo che viene terminato quando la pagina dinamica è stata costruita • La terminazione del processo CGI non consente di mantenere in memoria strutture dati condivise, per esempio non si può mantenere attiva la connessione alla base di dati F.Cesarini - Basi Dati Distribuite Data Base e Web 9 Esempio1 script CGI – cfr. [4] AUTORE (Codice, Nome, Cognome) SCRIVE (Codice, ISBN) LIBRO (ISBN, Titolo, Editore, Prezzo) • L’obbiettivo è pubblicare una pagina Web con l’elenco di tutti gli autori, vogliamo anche che cliccando su un autore compaia un’altra pagina con tutti i suoi scritti • Lo script è in C e usa una libreria di accesso a Postgres – Viene creata una connessione col database – Viene chiamata una funzione per l’esecuzione di una query SQL e il risultato è memorizzato nella variabile result – Viene stampata la notifica al server che viene inviata una pagina HTML e la parte fissa della pagina HTML – Viene stampata la parte variabile: per ogni riga di result, il nome e cognome e un riferimento ipertestuale, quest’ultimo manda in esecuzione un altro script di nome mostraLibri passandogli il parametro codice F.Cesarini - Basi Dati Distribuite Data Base e Web 10 5 Esempio1 script CGI – cfr. [4] #include <stdio.h> #include <pgsql/libpq-fe.h> /* libreria di accesso a Postgres */ int main { PGconn *conn = PQconnectdb (“ dbname=“ libri” ); /* crea connessione alla base di dati */ PGresult *result = PQexec (conn, “ select Codice,Nome,Cognome from Autore order by Cognome” ); printf (“ Content-type text/html\n\n” ); /* intestazione per il server: è una pag.HTML*/ printf (“ <HTML>\n<BODY>\n” ); /* stampa markup fisso */ printf (“ <H1>Elenco dei libri</H1>\n” ); /* stampa un titolo */ F.Cesarini - Basi Dati Distribuite Data Base e Web 11 Esempio1 script CGI – cfr. [4] int ntuples = PQntuples (result); /* stampa parte variabile */ for (int i = 0; i<ntuples; i++) { printf (“ <p><a href=\” mostralibri.exe?codice=%d\” >\n” , PQgetvalue (result, i, 0)); printf (“ Nome: %s\n Cognome: %s\n</a></p>\n” , PQgetvalue (result, i, 1), PQgetvalue (result, i,2)); } printf (“ </BODY>\n</HTML>\n” ); } F.Cesarini - Basi Dati Distribuite Data Base e Web 12 6 Esempio2 script CGI – cfr. [4] mostraLibri / SQL Embedded void main(){ char ISBN[20], Titolo[100], Editore[100]; float Prezzo; int Codice; char* QUERY_STRING; … /* leggi la variabile d’ambiente QUERY_STRING */ strcpy (QUERY_STRING, getenv (“QUERY_STRING”);); /* estrai il valore del codice */ Codice = … /* Stampa intestazione e markup fisso */ printf (“Content -type text/html\n\n”); printf (“<HTML> \n<BODY>\n”); F.Cesarini - Basi Dati Distribuite Data Base e Web 13 Esempio2 script CGI – cfr. [4] SQL Embedded exec sql declare Libri cursor for /* cursore sui libri */ select ISBN, Titolo, Editore from Scrive join Libro on Scrive.ISBN=Libro.ISBN where Scrive.Codice = :Codice; exec sql open Libri; /*apre il cursore ed esegue la query */ /* recupera la prima riga del risultato della select */ exec sql fetch Libri into :ISBN, :Titolo, :Editore, :Prezzo; F.Cesarini - Basi Dati Distribuite Data Base e Web 14 7 Esempio2 script CGI – cfr. [4] SQL Embedded printf (“<H1>Elenco dei libri dell’autore selezionato</H1> \n”); while (sqlca.sqlcode == 0) { printf (“ <P> ISBN: %s Titolo: %s Editore: %s Prezzo: %f</P>” , ISBN, Titolo, Editore, Prezzo); /* recupera la prossima riga del risultato della select */ exec sql fetch Libri into :ISBN, :Titolo, :Editore, :Prezzo;} exec sql close cursor Libri; printf (“ </HTML>\n</BODY>\n” ); return 0; } F.Cesarini - Basi Dati Distribuite Data Base e Web 15 Java Servlet • HTTP + CGI: – Viene lanciato un processo che costruisce una pagina dinamica • Estensione: – Un ambiente evoluto alle spalle del Web server – Un processo residente che costruisce pagine dinamiche e gestisce strutture condivise • Servlet Container – Eseguibile nell’ambiente JVM (Java Virtual Machine) – Funzionalità utilizzabili per la scrittura di programmi servlet per la costruzione di pagine dinamiche – I servlet sono scritti in Java ed eseguiti nell’ambiente servlet container – L’ambiente espone fra l’altro gli oggetti request e response – Questi oggetti incapsulano la richiesta e la risposta HTTP (non è necessario andare a reperire da programma le variabili CGI) – Può essere usata l’interfaccia JDBC (Java DataBase Connectivity) per accedere al database F.Cesarini - Basi Dati Distribuite Data Base e Web 16 8 Architettura Java Servlet Richiesta HTTP client Risposta HTTP parametri Servlet Container Web Server servlet Pagina calcolata query risultato DBMS F.Cesarini - Basi Dati Distribuite Data Base e Web 17 Esempio servlet [4] • Stampa una pagina HTML che specifica il browser dell’utente import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class StampaBrowser extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws (IOException, ServletException { response.setContentType(“ text/html” ); PrintWriter out = response.getWriter(); out.println (“ <HTML>” ); out.println (“ <HEAD>” ); out.println (“ <TITLE>Stampa del modello di browser usato</TITLE>” ); out.println (“ </HEAD>” ); out.println (“ <BODY>” ); out.println (“ Browser usato: “ +request.getHeader (“ User-agent” )); out.println (“ </BODY>” ); out.println (“ </HTML>” ); } F.Cesarini - Basi Dati Data Base e Web } Distribuite 18 9 Linguaggi di script incorporati in HTML browser server HTTP + motore di script server DBMS Il motore di script interpreta ed esegue gli script Funge da interfaccia tra motore HTTP e DBMS Esempi: PHP, ASP, JSP (vengono anche chiamati linguaggi lato server, il codice puramente HTML è invece interpretato dal browser) F.Cesarini - Basi Dati Distribuite Data Base e Web 19 Schema della comunicazione • • • • • Il browser invia al motore HTTP la richiesta di una pagina Se la pagina contiene uno script (cfr. tipo del file) il motore HTTP la invia al motore di script Il motore di script esegue lo script (se necessario comunica col DBMS) e invia il risultato al motore HTTP Il motore HTTP invia la pagina al browser Il browser visualizza la pagina F.Cesarini - Basi Dati Distribuite Data Base e Web 20 10 Linguaggio di scripting PHP • • PHP (Hypertext Preprocessor) è un linguaggio open source http://www.php.net browser server Web 2. Il server carica la pagina, vengono create diverse variabili d’ambiente Web. Qualunque codice PHP viene interpretato (eseguito) sul server tramite il motore PHP 1. Il client richiede una pagina HTTP 3. Il codice eseguito rimpiazza il codice sorgente originario nella pagina 5. Il browser interpreta la pagina HTML e mostra il documento F.Cesarini - Basi Dati Distribuite 4. Il server restituisce la pagina al client. La connessione viene chiusa Data Base e Web 21 Form e PHP • • Un form HTML permette agli utenti di inserire testo, selezionare da menu, opzioni … Successivamente l’utente invia il form ad uno script sul server perché venga elaborato browser server Web 1. L’utente inserisce le informazioni nel form e lo invia 2. Il server riceve il form. L’interprete del motore PHP decodifica i contenuti del form e genera delle variabili Web globali. Lo script PHP viene eseguito. 4. L’utente vede i risultati 3. I risultati vengono restituiti al browser. La connessione viene chiusa. F.Cesarini - Basi Dati Distribuite Data Base e Web 22 11 Alcune note su PHP • Uno script PHP è una pagina web contenuta in un file di tipo .php • Un codice PHP può essere inserito in un file HTML ed è racchiuso fra i tag <?php … ?> • Le variabili sono precedute da $, es. $var, $inf, … • PHP possiede i costrutti if, switch, while, for, … • Con opportune funzioni si può accedere ad un DBMS • Gli esempi che seguono fanno riferimento a Mysql F.Cesarini - Basi Dati Distribuite Data Base e Web 23 Esempio 1 <HTML> <BODY> <CENTER> <H1> UN BENVENUTO A TUTTI</H1> <HR> <?php # il codice PHP è inserito in un codice HTML, il file è di tipo .php # questo codice sia memorizzato sul server Web in script.php # per mandarlo in esecuzione dal browser, inserire # http://localhost/script.php $nome = “David “; $cognome = “Tansley”; $nome_completo = $nome.$cognome; $tel = “000-1234567”; echo “Ciao! Benvenuti sulla pagina di $nome”; echo “<BR>nel caso non lo sappiate, io sono $nome_completo”; echo “<BR><BR><HR>Il mio numero di telefono è $telefono<HR>”; ?> </CENTER> </BODY> </HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 24 12 Esempio 2 / form (1) <HTML> <! – - questo è il form form.html -- > <BODY> <CENTER> <B>Per favore scegli un giorno per la consegna e il tipo di pagamento</B></CENTER> <FORM METHOD=GET ACTION=“ decode.php”> Quale è il tuo nome? <INPUT TYPE=“TEXT” NAME=“ nome_completo”> <BR>Quale giorno desideri per la consegna? <SELECT NAME=“ giorno_settimana”> <OPTION>Lunedì <OPTION>Mercoledì <OPTION>Venerdì </SELECT> F.Cesarini - Basi Dati Distribuite Data Base e Web 25 Esempio 2 / form (2) <BR><BR>Come vuoi effettuare il pagamento?<BR> Assegno<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“Assegno”> Carta di credito<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“carta”> Contanti<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“contanti” CHECKED> <BR>< BR><BR> <INPUT TYPE=“SUBMIT” VALUE=“invia!”> <INPUT TYPE=“RESET” VALUE=“cancella!”> </FORM> </BODY> </HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 26 13 Esempio 2 / form (3) • • Nel tag FORM viene specificato che si usa il metodo GET per la comunicazione e che, una volta inviato, il form deve essere elaborato dallo script php di nome decode.php Il tag INPUT specifica che deve essere creata una struttura di tipo TYPE per permettere all’utente l’immissione di dati – TEXT specifica l’immissione di una stringa – SELECT … OPTION la scelta da menu – RADIO specifica il check della possibilità offerta (CHECKED è il check presentato per default) • Il valore immesso viene assegnato alla variabile di nome NAME – Lo stesso nome preceduto da $ deve essere usato nello script PHP per riferirsi a quella variabile • • Il tipo SUBMIT specifica che cliccando la stringa VALUE il form viene inviato Il tipo RESET specifica che cliccando la stringa VALUE i valori immessi vengono cancellati e si può fare una nuova immissione F.Cesarini - Basi Dati Distribuite Data Base e Web 27 Esempio 2 / form (4) <HTML><BODY> <?php # questo codice è nel file decode.php # la sua esecuzione è richiesta dall’esecuzione del form in form.html echo “Hai inserito le seguenti informazioni:<BR>”; echo “Il tuo nome è <B>$nome_completo</B><BR>”; echo “Vuoi che la consegna avvenga di <B>$giorno_settimana</B>”; echo “Il pagamento è con <B> $pagamento</B>”; ?> <BR> <A HREF=“ form.html”>Indietro</A> <! – non è stato necessario indicare tutto il path perché è nella stessa directory dello script php - > </BODY> </HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 28 14 Esempio 3 / form (1) <HTML> <BODY> <! questo è il form newform.html, accetta selezioni multiple per il giorno -- > <CENTER <B>Per favore scegli un giorno per la consegna e il tipo di pagamento</B></CENTER> <FORM METHOD=GET ACTION=“check_form.php”> Quale è il tuo nome? <INPUT TYPE=“TEXT” NAME=“nome_completo”> <BR>Quale giorno desideri per la consegna? <SELECT NAME=“ giorno_settimana[]” MULTIPLE> <OPTION>Lunedì <OPTION>Mercoledì <OPTION>Venerdì </SELECT> <BR><BR>Come vuoi effettuare il pagamento?<BR> Assegno<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“Assegno”> Carta di credito<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“carta”> Contanti<INPUT TYPE=“RADIO” NAME=“pagamento” VALUE=“contanti” CHECKED> <BR>< BR><BR> <INPUT TYPE=“SUBMIT” VALUE=“invia!”> <INPUT TYPE=“RESET” VALUE=“cancella!”> </FORM> F.Cesarini - Basi</HTML> Dati Data Base e Web </BODY> Distribuite 29 Esempio 3 / form (2) <HTML><BODY> <?php # questo codice è nel file check_form.php, richiamato dal form newform.html # viene controllato che siano stati immessi tutti i dati richiesti $errore = false; if ($nome_completo == “”) { $errore = true; echo “ <BR>Spiacente, devi inserire il tuo nome” ; } else { echo “ grazie $nome_completo <BR>” ;} if (sizeof($giorno_settimana)<“ 1” ) { $errore = true; echo “ Spiacente, devi selezionare almeno un giorno” ; } else {echo “ <BR>Confermiamo i giorni scelti:” ; for each ($giorno_settimana as $valore) { echo “ <BR><B>$valore</B>” ; } } F.Cesarini - Basi Dati Distribuite Data Base e Web 30 15 Esempio 3 / form (3) echo “<BR>Il tuo pagamento sarà tramite $pagamento”; if ($errore) { echo “ <BR>Non hai compilato tutti i campi, devi tornare al <A HREF =\“ newform.html\” >modulo</A>” ; # il carattere “ nel tag A è preceduto dal contrassegno \ # perché “ avrebbe un significato speciale in PHP } ?> </BODY> </HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 31 API per interagire con Mysql mysql_connect (“ nome_host”, “ nome_utente”, “password”) mysql_connect (“ nome_host”, “”, “”) connessione in modo anonimo mysql_pconnect (“nome_host”, “ nome_utente”, “password”) mysql_close (connessione) mysql_select_db(“ nome_db”, connessione) mysql_create_db (“nome”, connessione) mysql_drop_db (“nome”, connessione) mysql_list_dbs (connessione) mysql_list_tables (“ nome_db”, connessione) mysql_list_fields (“ nome_db”, “ nome_tabella”; connessione) mysql_query (query_SQL, connessione) select, insert, delete, update mysql_result (risultato) a seguito di mysql_query, mysql_list_db, mysql_list_tables mysql_fetch_array (query_SQL, connessione) generalmente a seguito di select mysql_num_rows (risultato) dopo una select mysql_insert_ID (connessione) ID del record inserito mysql_affected_rows () dopo insert, delete, update F.Cesarini - Basi Dati Distribuite Data Base e Web 32 16 Esempio 4 / Mysql (1) <HTML><BODY> <?php # codice nel file lista_persone.php $connessione = mysql_connect (“localhost”, “”, “”); if (!$connessione) { echo “ Impossibile collegarsi al server Mysql” ; exit; } $db = mysql_select_db (“ test_db” , $connessione); if (!$db) { echo “ Impossibile selezionare il database” ; exit } $sql = “ SELECT * FROM Persona” ; $ris_mysql = mysql_query ($sql, $connessione); $num_righe = mysql_num_rows ($ris_mysql); if ($num_righe == 0) { echo “ Mi dispiace, non ci sono informazioni” ;} else { F.Cesarini - Basi Dati Distribuite Data Base e Web 33 Esempio 4 / Mysql (2) # stampa il risultato della query select * from Persona # CREATE TABLE Persona (nome VARCHAR(20), # indirizzo VARCHAR(30), città VARCHAR(20), paese VARCHAR(20), # ID_p INT NOT NULL AUTO_INCREMENT, PRIMARY KEY (ID_p)) # while ($riga = mysql_fetch_array ($ris_mysql)) { $nome = $riga[“ nome” ]; $indirizzo = $riga[“ indirizzo” ]; $città = $riga[“ città” ]; $paese = $riga[“ paese” ]; $ID_p = $riga[“ ID_p” ]; echo “ $nome : $indirizzo $città $paese<BR>” ; } # fine while } # fine else mysql_close ($connessione); ?> </BODY></HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 34 17 Esempio 5 / file test_iniziale.php da includere con include(…) $connessione = mysql_connect (“ localhost”, “”, “”); if (!$connessione) { echo “ Impossibile collegarsi al server Mysql” ; exit; } $db = mysql_select_db (“ test_db” , $connessione); if (!$db) { echo “ Impossibile selezionare il database” ; exit } F.Cesarini - Basi Dati Distribuite Data Base e Web 35 Esempio 6 / (1) <HTML><BODY> <CENTER><B> Visualizza un record della tabella Persona </B></CENTER> <?php # questo codice è nel file per_selection.php # si occupa del riempimento iniziale del menu: estrae i nomi dal database #genera un form che presenta un menu che espone i valori di nome # e se viene scelto un nome, il valore immesso è in realtà lo ID_p corrispondente # lo ID_p viene assegnato alla variabile $ID_record include (“ test_iniziale.php” ); $sql = “ SELECT nome, ID_p FROM Persona” ; $ris_mysql = mysql_query ($sql, $connessione); $num_righe = mysql_num_rows ($ris_mysql); if ($num_righe == 0) { echo “ Mi dispiace, non ci sono informazioni” ;} else { F.Cesarini - Basi Dati Distribuite Data Base e Web 36 18 Esempio 6 / (2) # ci sono dei record echo “ <FORM METHOD=GET ACTION=\” see_rec.php\” >” ; echo “ Per favore seleziona una persona <BR>” ; echo <SELECT NAME=\” ID_record\” >” ; while ($riga = mysql_fetch_array($ris_mysql)) { $nome = $riga[“ nome” ]; $ID_p = $riga[“ ID_p” ]; # mostra il menu con i valori trovati echo “ <OPTION VALUE=\” $ID_p\” >$nome” ;} echo “ </SELECT>” ; } # fine else echo “ <BR><BR>” ; echo “ <INPUT TYPE=\” SUBMIT\” VALUE=\” Vedi le informazioni!\” >” ; echo “ <INPUT TYPE=\” RESET\” VALUE=\” Cancella!\” >” ; mysql_close ($connessione); ?> </FORM></BODY><HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 37 Esempio 6 / (3) <HTML> <BODY> <?php # codice nel file see_rec.php # è mandato in esecuzione dall’invio (SUBMIT) sul form generato da # per_selection.php # l’immissione dati su quel form si è conclusa con l’assegnazione a $ID_record include (“ test_iniziale.php” ); $sql = “ SELECT * FROM Persona WHERE ID_p=‘$ID_record’” ; $ris_mysql = mysql_query ($sql, $connessione); $num_righe = mysql_num_rows ($ris_mysql); if ($num_righe == 0) { echo “ Spiacente, non ci sono informazioni” ;} else { # i risultati vengono visualizzati all’interno di una tabella echo “ <TABLE ALIGN=\” CENTER\” BORDER=\” 3\” >” ; echo “ <TR><TH>nome</TH><TH>indirizzo</TH><TH>città</TH> <TH>paese</TH></TR>” ; while ($riga = mysql_fetch_array($ris_mysql)) { $nome = $riga[“ nome” ]; $indirizzo = $riga[“ indirizzo” ]; F.Cesarini - Basi Dati Distribuite Data Base e Web 38 19 Esempio 6 / (4) $città = $riga[“ città” ]; $paese = $riga[“ paese” ]; $ID_p = $riga[“ ID_p” ]; # mostra i risultati echo “ <TR><TD>$nome</TD><TD>$indirizzo</TD> <TD>$città</TD><TD>$paese</TD></TR>” ; } # fine while } # fine else mysql_close ($connessione); ?> </TABLE> <BR><A HREF=“ per_selection.php” >Indietro</A> </BODY> </HTML> F.Cesarini - Basi Dati Distribuite Data Base e Web 39 Progettazione Applicazioni Web ripreso interamente da [4] • • • Analisi dei requisiti Progettazione concettuale della base di dati Progettazione dell’ipertesto – Site view, aree, pagine – Unit, link • Realizzazione dell’applicazione • L’esempio fa riferimento alla pubblicazione su Web di un catalogo di prodotti Si suppone familiarità con le applicazione di gestione dati e si enfatizzano gli aspetti inerenti al Web • F.Cesarini - Basi Dati Distribuite Data Base e Web 40 20 Analisi dei requisiti (1) Individuazione dei gruppi di utenti – Ad ogni gruppo verrà associata una “versione” dell’applicazione • Utenti esterni – Utenti casuali – Utenti registrati: hanno accesso a una zona personalizzata del sito protetta da password • Utenti interni (personale dell’azienda) – Amministratori: hanno diritto di scrittura su tutti gli oggetti dell’applicazione – Marketing: diritto di scrittura solo sui dati dei prodotti Individuazione delle sotto-applicazioni (site view, viste di sito) – I contenuti della base di dati vengono presentati in modo diverso alle varie categorie di utenti – Una site view è un insieme omogeneo di pagine Web a cui si accede da una unica home page, eventualmente dopo un controllo di autorizzazione (es. gli utenti casuali possono non avere controlli) Glossario dei termini F.Cesarini - Basi Dati Distribuite Data Base e Web 41 Analisi dei requisiti (2) Descrizione della struttura di un site view Esempio: site view per utente esterno casuale Nome Vista: Accesso utente casuale Descrizione: Vista per l’accesso degli utenti casuali Gruppi: Utente Casuale AREA PRODOTTI Nome pagina: Categorie Descrizione: Mostra l’indice delle categorie Concetti usati: Categoria Nome pagina: Prodotti Descrizione: Mostra la lista dei prodotti di una categoria Concetti usati: Prodotto, Tipologia Nome pagina: Prodotto Descrizione: Mostra i dati salienti di uno specifico prodotto Concetti usati: Prodotto Nome pagina: Immagini Descrizione: Mostra varie immagini di un prodotto Concetti usati: Immagini, Visualizzazione F.Cesarini - Basi Dati Distribuite Data Base e Web 42 21 Analisi dei requisiti (3) AREA NOTIZIE Nome pagina: Notizie Descrizione: Mostra l’indice di tutte le notizie Oggetti acceduti: Notizia Nome pagina: Notizia Descrizione: Mostra il testo di una specifica notizia Oggetti acceduti: Notizia Nome pagina: Prodotto Descrizione: Mostra i dati del prodotto a cui si riferisce la notizia Oggetti acceduti: Notizia, Riferimento ALTRE PAGINE Nome pagina: Home page Descrizione: Mostra un breve sommario di alcuni prodotti e notizie rilevanti Oggetti acceduti: Prodotto, Notizia Nome pagina: Contatti Descrizione: Pubblica i dati di contatto dell’azienda e un form per l’invio di messaggi Oggetti acceduti: Nessuno F.Cesarini - Basi Dati Distribuite Data Base e Web 43 Progettazione concettuale della base di dati • • Progettazione ER Ruolo di entità e relazioni in una applicazione Web – Oggetti applicativi: entità e relazioni che descrivono i concetti fondamentali gestiti dall’applicazione – Oggetti d’accesso: entità e relazioni il cui scopo primario è facilitare l’accesso agli oggetti applicativi – Oggetti d’interconnessione: entità e relazioni che collegano oggetti applicativi e forniscono supporto alla navigazione da un oggetto applicativo ad un altro – Oggetti personalizzati: entità e relazioni che collegano oggetti applicativi ad utenti (o gruppi di utenti) per esprimere dati personali (offerte speciali per certi gruppi, carrello della spesa di un utente, …) • Identificare questi ruoli nell’applicazione vuol dire individuare opportuni sottoschemi dello schema ER F.Cesarini - Basi Dati Distribuite Data Base e Web 44 22 Esempio di schema scheletro (1) nazione categoria proviene tipo notizia rif gruppo appartiene offerta prodotto dettaglio visualizza scheda tecnica immagine F.Cesarini - Basi Dati Distribuite utente Data Base e Web 45 Esempio di schema scheletro (2) sottoschema applicativo nazione categoria proviene tipo notizia F.Cesarini - Basi Dati Distribuite rif gruppo appartiene offerta prodotto dettaglio visualizza scheda tecnica immagine Data Base e Web utente 46 23 Esempio di schema scheletro (3) sottoschema di connessione nazione categoria proviene tipo notizia rif gruppo appartiene offerta prodotto dettaglio visualizza scheda tecnica immagine F.Cesarini - Basi Dati Distribuite utente Data Base e Web 47 Esempio di schema scheletro (4) sottoschema d’accesso nazione categoria proviene tipo notizia F.Cesarini - Basi Dati Distribuite rif gruppo appartiene offerta prodotto dettaglio visualizza scheda tecnica immagine Data Base e Web utente 48 24 Esempio di schema scheletro (5) sottoschema per la personalizzazione nazione categoria proviene tipo rif notizia F.Cesarini - Basi Dati Distribuite gruppo appartiene offerta prodotto dettaglio visualizza scheda tecnica immagine utente Data Base e Web 49 Progettazione dell’ipertesto Descrizione di un site view in WebML (Web Modeling Language) • • • Suddivisione della vista di sito in una gerarchia di aree e pagine Il contenuto di una pagina è espresso come un insieme di content unit (unità di contenuto) La topologia dei collegamenti per la navigazione è espressa con un opportuno insieme di link che connettono unit e/o pagine F.Cesarini - Basi Dati Distribuite Data Base e Web 50 25 Schema di una site view: aree e pagine SITE VIEW UTENTE CASUALE AREA PRODOTTI L home page H L categorie D contatti prodotti AREA SUPPORTO L prodotto L immagini AREA NOTIZIE L L F.Cesarini - Basi Dati Distribuite Data Base e Web 51 Aree e Pagine • • • • • • Una site view può essere suddivisa in aree (ed eventualmente in sottoaree) Ogni area contiene una o più pagine La site view contiene anche pagine non raggruppate in aree (tipicamente la home page) H: home page, pagina mostrata per default all’utente quando accede alla site view D: una pagina può essere definita di default per l’area cui appartiene, viene mostrata per default quando l’utente accede al modulo che la contiene L: una pagina (o area) può essere definita come landmark per l’area, o site view, cui appartiene; è globalmente raggiungibile da tutte le altre pagine dell’area o site view che la contiene – es: home page, contatti, area prodotti, area supporto, area notizie sono raggiungibili da qualunque punto della site view; categorie è raggiungibile da qualunque pagina di area prodotti F.Cesarini - Basi Dati Distribuite Data Base e Web 52 26 Content Unit (unità di contenuto) • Una unit è – Una parte di pagina finalizzata alla pubblicazione di informazioni sugli oggetti dell’applicazione – Una maschera per l’inserimento dati da parte dell’utente • Entry unit – Maschera composta di vari campi per l’inserimento di dati • Data unit • Index unit – Mostra alcuni attributi di un oggetto – Pubblica un elenco di oggetti e può permettere all’utente di selezionarne uno – Di ogni oggetto mostra un descrittore estratto dalla base dati • Multidata unit – Pubblica un insieme di oggetti – Può permettere all’utente di operare contemporaneamente su tutto l’insieme F.Cesarini - Basi Dati Distribuite Data Base e Web 53 Content unit: rappresentazione grafica Data unit Entry unit Entità Index unit ---------------------------------------- (selettore) Multidata unit Entità (selettore) Entità (selettore) F.Cesarini - Basi Dati Distribuite Data Base e Web 54 27 Content unit • • • Le unità Data unit, Index unit e Multidata unit pubblicano informazioni provenienti dalla base di dati Queste unit devono indicare da quale entità della base di dati estraggono le informazioni Il selettore indica il predicato usato per estrarre dalla entità le istanze che contribuiscono al contenuto delle unit Notizie 2003 ---------------------------------------- notizia data>=1/1/03 F.Cesarini - Basi Dati Distribuite Data Base e Web 55 LINK • • Un link è una connessione orientata fra due pagine o due unità Un link può – Permettere la navigazione da un punto all’altro dell’ipertesto (cambiando la pagina visualizzata) – Consentire il passaggio di parametri dalla unità sorgente alla destinazione, influenzando il contenuto pubblicato dalla destinazione – Attivare una computazione • Esempio nella diapositiva successiva – Il link tra le pagine “categorie” e “prodotti” consente, se attivato, d i cambiare pagina visualizzata – Questo link è etichettato con la scelta dell’utente sulla index unit: se l’utente sceglie la categoria X, allora le informazioni visualizzate dalla data unit si riferiscono alla categoria con OID uguale a X – Il link interno alla pagina prodotti non fa cambiare pagina, è solo di trasporto parametri: la index unit presenta informazioni prese dall’entità prodotto, scegliendo quelle di prodotti associati alla categoria Y tramite la relazione Tipo F.Cesarini - Basi Dati Distribuite Data Base e Web 56 28 Esempio di link tra unità delle pagine Categorie e Prodotti Categorie Tutte le categorie ---------------------------------------- Prodotti X:Categoria Categoria F.Cesarini - Basi Dati Distribuite Categoria selezionata Y:Categoria Prodotti della categoria ---------------------------------------- Categoria Prodotto (OID = X) (tipo(Y)) Data Base e Web 57 Realizzazione: base di dati dello schema ER • • • • Lo schema ER deve essere trasformato in uno schema relazionale (o relazionale a oggetti, o a oggetti) Il database deve essere popolato Tre tipiche situazioni Database dedicato – La base di dati non esisteva prima dello sviluppo dell’applicazione – L’inserimento delle istanze avviene via Web • Database replicato – I dati esistono (almeno in parte) prima dello sviluppo dell’applicazione – L’applicazione utilizza i dati aziendali in sola lettura (es. sito di commercio elettronico che sfrutta le informazioni sui prodotti) – Allineamento periodico della replica con i dati aziendali • Accesso diretto ai dati aziendali – Realizzazione di programmi di interfaccia con i sistemi aziendali F.Cesarini - Basi Dati Distribuite Data Base e Web 58 29 Realizzazione: ipertesti • • Utilizzo di tecniche di programmazione Web Link fra due pagine – Tag <A HREF= “URL della pagina da visualizzare” – Query string con i parametri passati • Link tra due unit – Link di trasporto: viene eseguita la query parametrica associata alla unità destinazione usando il valore del parametro indicato F.Cesarini - Basi Dati Distribuite Data Base e Web 59 30