Data Base e Web Internet - Dipartimento di Ingegneria dell

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