|
SOMMARIO
Lezione 1-
WEB SERVER e
ACTIVE SERVER PAGES
Lezione 2-
Prime Active
Service Pages :oggetto Response |
Panoramica
ambiente di programmazione:
cenni ASP
|
Lezione 3-
Prime Active
Service Pages :oggetto Request
Lezione 4-
Active Service Pages e Database:Tecnologia ADO
caricare i dati in tabella da un form Html
Lezione 5-
Active Service Pages e Database: lettura di una
tabella e visualizzazione dei dati in una pagina
Web.
Lezione 6-
Active Service Pages e Database: tecnologia
ADO.Leggere e visualizzare i dati filtrati e
calcolati di una tabella in una pagina Web. |
Area di progetto
simulazione
E-commerce |
Lezione
7-
Panoramica del caso "Agenzia Turistica", Struttura
del Database
Lezione
8- Active Service Pages e Database:Tecnologia ADO
caricare i dati in tabella da un form Html
Lezione 9-
Active Service Pages e Database: tecnologia ADO
leggere e visualizzare i dati di una tabella in una
pagiana Web
Lezione 10-
Active Service Pages e Database: tecnologia
ADO.Leggere e visualizzare i dati filtrati e
calcolati di una tabella in una pagina Web.
Lezione 11-
Utilizziamo il codice Visual Basic per effettuare
dei calcoli |
Area di progetto
simulazione
Agenzia Turistica |
AREA
PROGETTO "Simulazione e-commerce"
Lo scopo
di queste lezioni è quello di realizzare una simulazione di
e_commerce, prevedendo un menu per navigare all'interno
dell'applicazione, un form dove il gestore può caricare in
magazzino le quantità in entrata o in uscita per i 9 articoli
che sono messi in vetrina nell'ipotetico negozio online. Queste
le schermate :
index.htm caricamagazzino.htm
visualizzamag3.asp
ecommerceAsp2.asp
WEB SERVER
E ACTIVE SERVICE PAGES
Quando parliamo di navigazione internet e
programmazione Web, dobbiamo distinguere tra lato Client
(noi) e lato Server (Host). Quando dal
nostro PC digitiamo l'indirizzo del sito a cui siamo interessati,
come http://www.sito.htm, il
browser (internet Explorer ad esempio) invia la nostra richiesta al server WEB(il
software), che dopo averla
interpretata, individua sul computer Host,(server di rete),il file richiesto e lo
rinvia al browser dopo aver letto e interpretato il codice html
della pagina web.
Il
WEB SERVER è dunque un software che permette di gestire il server di
rete (HOST). Quest' ultimo è sostanzialmente un computer
avente grande capacità di memoria, che ospita le pagine web dei
siti, che dopo essere state interpretate dal web server
verranno visualizzate sul nostro Pc senza alcuna
modifica. Per questo motivo questo tipo di pagina web si dice
statica, quinidi realizzata secondo i canoni della
programmazione Client Side (lato client). Se però si
ha la necessità di accedere ad un database che risiede nel computer
Host (cioè che risiede nel web), si dovrà procedere con la
programmazione Lato Server, che genera pagine web di
tipo dinamico. Questo perchè accedere ad un data base,
non significa solo leggere il contenuto delle sue tabelle, ma
significa anche modificare tali contenuti sulla base delle azioni
dell'utente navigatore. Per far fronte a questo tipo di problematica
ci si riferisce alla tecnologia delle pagine ASP ( Active
Service Page): queste sono dei normali file di testo con
estensione .asp che vedono integrare il codice
HTML di una semplice pagina web a parti di codice eseguibile
dal lato server definito scripts. Questi scripts possono
essere di diversi linguaggi di programmazione, ma in particolare
vedremo come realizzare pagine Asp con vbscripts visto
che già abbiamo studiato Visual Basic.
Quando realizziamo
normali pagine web (.html), per testarle utilizziamo
Internet Explorer, quando invece lavoriamo con le Asp,
abbiamo necessità di un software in grado di interagire
con il server di rete (host), quindi di un software che
viene definito, come già detto, Web Server.
Il sistema operativo Windows Xp, ha un suo Web Server
che si chiama IIS (INTERNET
INFORMATION SERVICE) che normalmente non
è installato sui nostri Pc. E' necessario provvedere
alla sua installazione da: Pannello di controllo-
Installa Applicazioni - Componenti di Windows. Una
volta eseguita la procedura di installazione, verrà
creata automaticamente nella cartella programmi, la
cartella Inetpub contenente la cartella
wwwroot che conterrà le pagine asp da testare
in locale. Per verificare che il Web Server sia
installato e funzioni correttamente, basterà scrivere
nella barra dell'indirizzo:
http://www.localhost
oppure http://127.0.0.1
(Iindirizzo IP del server web locale)e verificare che
appaia la pagina di conferma di Windows Xp.
IN SINTESI...
|
WEB
SERVER: software per gestire il server
di rete
SERVER
DI RETE (HOST):grande computer che
ospita le pagine web
FTP
(File Transfer Protocol ): software per
inviare le pagine web all'host.
ASP (
Active Service Page): file di testo che
contengono codice Html e script in
linguaggio eseguibile dal server di rete
attraverso un web server, pagine web
dinamiche, che cambiano interagendo con
l'utente.
IIS (
Internet Information Service): Web
server di Windows Xp
SCRIPT: codice eseguibile lato server,
di diversi linguaggi, vbscripts(visual basic),Jscripts
(java).
INETPUB/WWWROOT: Cartelle generate
dall'installazione di IIS nella directory
radice (c:\) del nostro Pc per testare le
pagine Asp in locale |
|
LE
PRIME ACTIVE SERVICE PAGE: oggetto RESPONSE
Come accennato nella precedente
lezione, le pagine Asp che andremo a provare sono file di testo che
combinano il codice html a Vbscripts. Vediamo come. Come ben
sappiamo una pagina web in codice html, è costituita da testo
scritto tra MARCATORI <...> o TAG
(se hai bisogno di rivedere il corso di HTML eccoti il Link:
),il codice vbscripts invece deve essere sempre inserito tra i
simboli <%.......%>. Facciamo subito un
esempio :
Codice
ASP |
Risultato
(1.asp) |
<html>
<body>
<%
response.write ("LA
Mia prima ASP")
%>
</body>
</html> |
|
Come vedete nell'esempio i tag
html appaiono quasi inutili perchè non determinano nulla di
particolare per il risultato che apparirà nella nostra pagina web,
ma ad esempio possiamo andare a modificare questo primo codice
aggiungendo alcuni tag utili alla formattazione del testo e della
pagina. Ad esempio possiamo andare a indicare che il testo dovrà
apparire come titolo con il tag <h2> (ricordate? h1 h2 h3 rendono il
testo più o meno grande), definire il colore del testo con <font
color....> e dello sfondo della pagina con <body bgcolor...>.
Codice
ASP |
Risultato
(primaAsp.asp) |
<html>
<head>
<title>Nuova pagina 1</title>
</head>
<body bgcolor="#00FFFF">
<font color="#FF00FF"><h2>
<%
response.write("LA Mia prima pagina ASP")
%>
</h2></font>
</body>
</html> |
|
Asp è una
tecnologia basata su oggetti, come il linguaggio
Visual Basic, a questi oggetti si associano
Proprietà (caratteristiche dell'oggetto)
metodi (procedure e funzioni).La sintassi per
attivare un metodo e per utilizzare una
proprietà dell'oggetto è:
oggetto.metodo
oggetto.proprietà.
Cominciamo con
l'analizzare il codice vbscripts scritto negli
esempi qui sopra:
-
Come prima
istruzione si poteva inserire
<%@ language
= VBScripts %>
per indicare quale sia il linguaggio di
scripting
-
l'istruzione
response.write ("....")
invia al
browser, quindi fa apparire nella pagina web,
ciò che è indicato tra apici e parentesi
("....").
-
i tag html si
aprono e si chiudono secondo le regole di
indentazione che conoscete quindi l'ultimo ad
essere aperto sarà anche il primo ad essere
chiuso, mentre sarà aperto e chiuso lo script
con <%...%> indipendentemente dal codice html,
quindi tra i due simboli che delimitano lo
script non dovrete inserire mai codice html.
Quindi abbiamo
conosciuto l'oggetto
Response
e il
suo metodo
Write,
Continuiamo con
alcuni altri esempi prima di passare ad analizzare
scripts specifici per trattare i database.
Codice
ASP |
Risultato
(2.asp) |
<html>
<head>
<title>Nuova pagina 1</title>
</head>
<body bgcolor="#00FFFF">
<font color="#FF00FF"><h2>
<%
response.write("LA Mia prima pagina ASP")
%>
Oggi è
il <% =date()%>
</h2></font>
</body>
</html> |
|
In questo esempio
voglio farvi notare che il testo aggiunto, Oggi è il
...., è un primo esempio di pagina dinamica, perchè
lo stesso codice eseguito in giorni diversi
restituirà date diverse, precisamente la data
corrente. Questo è possibile grazie all'uso della
funzione VB =date(), lo stesso si può fare con
=time() per ottenere l'ora corrente o ancora
si può ottenere data e ora di sistema con =now() Altra cosa che
vorrei farvi notare è che nella pagina web risultato
di questo codice si può leggere testo inviato al
browser dallo script e testo che è invece
semplicemente inserito tra i tag html (Oggi è il).
IN SINTESI...
|
ASP:
tecnologia basata su oggetti,
proprietà e metodi.
<%....%>: simboli che racchiudono il
codice vbscripts
RESPONSE:
Oggetto Asp, che si utilizza per inviare
dati alla pagina web attraverso il suo
metodo write:
Response.write ("....")
=DATE(): funzione Vb che restituisce
la data corrente
=TIME():
funzione Vb che restituisce l'ora
corrente
=NOW():
funzione Vb che restituisce data e
ora di sistema |
|
LE
PRIME ACTIVE SERVICE PAGE: oggetto REQUEST
L'oggetto
Request
può essere
considerato come l'esatto contrario dell'oggetto
Response, infatti mentre quest'ultimo invia dati al
browser,
Request serve a
ricevere informazioni dal browser
(quindi
informazioni dal navigatore).
L'utilizzo di
entrambi questi oggetti con i relativi metodi, ci
permettono di interagire con gli utenti del nostro sito.
I metodi principali di Request sono:
Proviamo ora a capire il funzionamento della Collection
Form con un esempio di utilizzo di Request.Form:
In questo esempio vedremo come visualizzare in una
pagina Asp i dati inseriti dall'utente navigatore in un
Form html (tipico esempio di modulo di iscrizione).
cominciamo con il preparare la pagina Html.
Codice
HTML (modulo.htm) |
Risultato
(modulo.htm) |
<html>
<head>
<title>modulo</title>
</head>
<body>
<form
method="POST" action="RACCOLTA_FORM.asp">
NOME: <input type="text" name="NOME" >
COGNOME:<input type="text" name="COGNOME">
<input type="submit" value="INVIA" name="INVIA">
</form>
</body>
</html>
|
|
Come vedete
questo è il codice di una normale pagina Html (modulo.htm),
scritto in blocco note, si possono riconoscere tag
html che permettono di disegnare sulla pagina una
casella di testo
(<input type="text") e tag per
l'inserimento di un pulsante
(<input type="submit">
per entrambi si è fissata la proprietà name.
La riga che
vi ho evidenziato, definisce il form che verrà
trasmesso con il metodo POST, quindi in modo
"riservato", alla pagina RACCOLTA_FORM.asp quando il
navigatore
(action="nomefile.asp") cliccherà
sul pulsante con scritto INVIA
(proprietà value="invia").
con
Frontpage
per inserire le
caselle di testo e il pulsante, dal menu
Inserisci - Modulo - casella di testo/pulsante
Operando
con frontpage |
|
Dopo aver
inserito gli oggetti, ci clicchiamo con il
tasto DX attivando il menu di scelta rapida,
scegliamo Proprietà campo modulo
per definirne le proprietà come il nome
e il value. Per definire il metodo
action, scegliamo proprietà modulo
e indichiamo la pagina
RACCOLTA_FORM.asp.
Ovviamente come sempre frontpage sporca un
pò il codice originale, per questo a volte
conviene partire dal blocco note e poi
passare a frontpage per la formattazione
piuttosto che il contrario. |
Il
codice con frontpage |
<html>
<head>
<meta http-equiv="Content-Language" content="it">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<title>Nuova pagina 1</title>
</head>
<body>
<p> </p>
<form method="POST" action="--WEBBOT-SELF--"><!--webbot
bot="SaveResults" S-Label-Fields="TRUE"
U-File="RACCOLTA_FORM.asp" S-Format="HTML/BR"
-->
<p align="left">NOME: <input type="text"
name="NOME" size="20">
COGNOME: <input type="text" name="COGNOME"
size="20"></p>
<p align="left"><input type="submit" value="INVIA"
name="INVIA"></p>
</form>
</body>
</html>. |
Ora vediamo come
realizzare la pagina asp che dovrà raccogliere le
informazioni dal modulo Html, ovviamente qui vedete
il risultato che apparirà a video dopo che l'utente
avrà cliccato sul pulsante Invia (ricordate
la Action = "Raccolta_Form.asp")
Codice
ASP |
Risultato
(Raccolta_Form.asp) |
<html>
<head>
<title>visualizza i dati del form</title>
</head>
<body>
<% language=VBscript
nome= request.form("NOME")
cognome= request.form("COGNOME")
Response.write "Il tuo nome è: "& nome
%>
<br><br>-------<br><br>
<%
Response.write "Il tuo cognome è: "& cognome
%>
</body>
</html>
|
|
Nel codice Asp
qui sopra, ho evidenziato due righe di codice,
perché su queste vorrei soffermarmi un momento per
capire esattamente come funziona l'oggetto
REQUEST. Il
codice
nome=request.form("NOME"),
assegna ad
una variabile denominata nome ( non l'ho dichiarata
ma poteva essere dichiarata), il contenuto del text
box NOME del form. Il codice
Response.write "il tuo nome è: " & nome
manda a
video il contenuto della variabile nome concatenata
(&) alla stringa indicata dopo il metodo
Write. Come vedete ho omesso le parentesi
dopo il metodo Write, che possono essere omesse, e
vi sottolineo che i nomi di variabile non vanno mai
tra apici, come in tutti i linguaggi di
programmazione che già conoscete.
IN SINTESI...
|
<FORM
method="POST" action="pagina.asp">:
crea un modulo html, che sarà inviato in
modo riservato a pagina.asp.
INPUT TYPE="text": Tag Html per
inserire in un form Html un text box
INPUT TYPE="submit": Tag Html per
inserire in un form Html un pulsante
REQUEST:
Oggetto Asp che si utilizza per ricevere
dati dalla pagina web, dati che vengono
inseriti dall'utente navigatore in un
form html e recuperati con la collection
Form: Request.Form("nome
oggetto del form")
&:
operatore di concatenazione
stringhe. |
AREA
PROGETTO "Simulazione E-Commerce"
Cominciamo ad
operare nell'area progetto applicando quanto
esposto in questa lezione e creiamo la pagina
web caricamagazzino.htm che conterrà il modulo (Form),
per caricare la scheda di magazzino. Vi mostrerò
codici "puliti", cioè scremati da quanto
frontpage aggiunge automaticamente. quindi
provando questi codici vi appariranno solo i
contenuti essenziali, senza formattazione ne
immagini, che potremo poi aggiungere con poche
mosse direttamente da frontpage. Ho colorato il
codice delle pagine del progetto in viola perchè
possiate riconoscerlo facilmente.
Codice
HTML (caricamagazzino.htm) |
Risultato
(caricamagazzino.htm) |
<html>
<head>
<title>CARICA MAGAZZINO</title>
SCHEDA ARTICOLO
<FORM
ACTION="registraMagazzino.ASP" METHOD="POST">
ARTICOLO
<select
size="1" name="articolo">
<option>-
- -</option>
<option>berretto Nike</option>
<option>ciondolo cuore</option>
<option>cinta D&G</option>
<option>dondolo resina verde</option>
<option>orologio Hello Kitty</option>
<option>compressore 800W</option>
<option>trapano avvitatore</option>
<option>Pc Aspire One</option>
<option>Gazebo Toyota</option>
</select><br>
QUANTITA'<INPUT TYPE ="TEXT" NAME="QUANTITA"><br>
PREZZO <INPUT TYPE ="TEXT" NAME="PREZZO"><br>
CATEGORIA <INPUT NAME="CATEGORIA"><br>
<INPUT TYPE ="SUBMIT" VALUE="INVIA" NAME="B1"><BR>
<BR>
<INPUT TYPE="RESET" VALUE ="ANNULLA" NAME="B2"><BR>
<BR>
</FORM>
<a href="index.htm">HOME</a></font></b></p>
</BODY>
</HTML> |
|
La
casella di riepilogo |
Per
permettere all'utente di inserire
movimentazioni solo a riguardo degli
articoli disponibili, creiamo una casella di
riepilogo. Il tag Html per inserirla è: <select>
e <option>. All'interno del tag select,
definiamo gli attributi size 1 per rendere
visibile una sola voce a tendina chiusa, e
l'attributo name per definire il nome con
cui verrà richiamata nelle pagine. Con il
tag <option> è possibile definire le voci
dell'elenco.
Oltre il
pulsante INVIA (type ="submit") per inviare
i dati in un'altra pagina, ho previsto il
pulsante ANNULLA (type="reset"), che
automaticamente cancella quanto scritto nei
campi del modulo per resettare appunto il
form.
Notate il
tag <Form action> che invia i dati alla
pagina registraMagazzino.asp per caricare i
dati nella tabella del database. Vedremo
come realizzare questa pagina nella prossima
lezione. |
|
|
|
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
CARICARE DATI IN UNA TABELLA DA UN FORM HTML
Per utilizzare il Database nel Web, è necessario essere
collegati al Db stesso, per far ciò, si utilizzano gli
ADO (Activex Data Objects). Sostanzialmente, è come
quando volete parlare al telefono con una persona, la
prima cosa che dovete fare è comporre il numero della
persona quindi cercarlo in rubrica, e comporlo. La
stessa cosa si deve fare con i database, ossia se dovete
leggere o aggiornare dati su una tabella di un database,
dovrete dapprima connettervi ad esso creando una
connessione diretta (=comporre il numero). Al telefono,
dopo aver composto il numero, dovete restare in attesa
che vi rispondano, per cominciare a parlare. La stessa
cosa è con il database, dopo aver creato la connessione
al db, dovete aprire questa connessione per poter
comunicare con il db. Gli oggetti ADO, disponibili
per connettersi al Database, sono:
-
ADODB.Connection:
Per creare la
connessione e quindi identificare in modo univoco il
database, quindi se si vuole operare su più database
sarà necessario aprire tante connessioni quanti sono
i database.
-
ADODB.Recordset:
Per conservare
l'insieme delle righe della tabella a cui siamo
interessati.
AREA PROGETTO "Simulazione E-Commerce"
Cominciamo con l'aprire una connessione al data base
magazzino.mdb. Questo database sarà costituito da
una sola tabella Articoli, così definita:
1-
CONNESSIONE AL DATABASE |
Set cn=Server.CreateObject("ADODB.Connection")
cn.connectionstring = "DRIVER={Microsoft Access
Driver (*.mdb)};DBQ=" & Server.MapPath ("magazzino.mdb")
cn.Open
Con queste
istruzioni, creiamo una connessione ad un
database Access chiamandola CN:
SET
CN crea la connessione
nominandola CN,quindi
la sintassi è SET nome_connessione
CN.connectionstring = "DRIVER=..........SERVER.mapPath...."
specifica il tipo di database (access).
cn.open apre la connessione
quindi la sintassi è nome_connessione.open |
2- STRINGA
SQL PER CARICARE I DATI IN TABELLA |
sql="INSERT INTO articoli (articolo,quantita,prezzo,CATEGORIA)
VALUES ('"& request.form("articolo") & "','" & request.form("quantita") & "','" & request.form("prezzo")
& "','" & request.form("CATEGORIA") & "')"***scrivete questo testo tutto sulla stessa
riga per non commettere errori***
Con queste
istruzioni, integriamo il codice Sql per
colloquiare con il database al VBScript.
Assegniamo ad una variabile stringa che ho
chiamato sql, il risultato del codice sql
INSERT INTO per inserire i valori di una
nuova riga della tabella Articoli . Come
potete vedere la prima parte è semplice sql
quindi come da sintassi
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
dopo
Values, tra parentesi vengono indicati i valori
che devono essere prelevati dal form di
caricamagazzino.htm, seguendo queste poche ma
essenziali regole: dopo la parentesi, apice
singolo', poi doppi ",poi dovendo concatenare la
& poi indichiamo l'oggetto request.form("nome_campo1")
& chiudiamo i doppi apici" chiudiamo il singolo
' mettiamo una virgola e riapriamo il singolo '
, i doppi " e continuiamo con gli altri campi
quindi & request.form("nome_campo2") ecc.
Ovviamente nome_campo1, nome_campo2 ...sono i
nomi che abbiamo assegnato nel file
caricamagazzino.htm agli oggetti disegnati nel
modulo, quindi i textbox, e la casella di
riepilogo, non teniamo conto del campo ID della
tabella, che non facciamo nemmeno figurare nel form, visto che il suo valore non deve essere
inserito dall'utente: esserndo una chiave
contatore si incrementa da sola.
|
3- ESEGUO IL
CODICE DELLA STRINGA SQL E CHIUDO LE CONNESSIONI |
CN.EXECUTE SQL
CN.CLOSE
SET CN = NOTHING
Con queste
istruzioni, utilizziamo il metodo EXECUTE sull'oggetto connessione CN che abbiamo creato,
indicando di eseguire il codice SQL contenuto
nella stringa Sql : nome_connessione.Execute
stringa
A questo
punto è possibile chiudere la connessione con il
metodo
CLOSE: nome_connessione.close
Dopo aver
chiuso la connessione, con il metodo .NOTHING,
azzeriamo, resettiamo la variabile Cn:
nome_connessione.nothing |
4 - CODICE
MESSAGGIO DI CONFERMA REGISTRAZIONE |
<HTML>
<BODY>
<H2>
<% RESPONSE.WRITE "IL RECORD è STATO
REGISTRATO" %>
</H2>
Dopo aver
chiuso con %> il codice VbScript, apriamo
il codice html e con il tag <H2 >
definiamo la dimensione del testo di conferma
che inviamo all'utente con l'oggetto RESPONSE
(ovviamente riapriamo il <%....%>
<P><A HREF="visualizzaMAG3.asp">VISUALIZZA
LE MOVIMENTAZIONI DI MAGAZZINO </A>
<P><a href="ecommerceASp2.asp">ENTRA IN
NEGOZIO</a>
<P><a href="index.htm">HOME</a>
Con il tag
<HREF>, predisponiamo la possibilità per
l'utente di spostarsi sulle altre pagine del
progetto tramite semplici collegamenti
ipertestuali.
|
Codice
Asp RegistraMagazzino.asp |
<%
LANGUAGE = VBSCRIPTS %>
<%
'DICHIARO LE VARIABILI
DIM CN
DIM SQL
'CONNESSIONE AL DATA BASE
Set
cn=Server.CreateObject("ADODB.Connection")
cn.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" & Server.MapPath
("magazzino.mdb")
cn.Open
sql="INSERT INTO articoli (articolo,quantita,prezzo,CATEGORIA)
VALUES ('"& request.form("articolo") & "','"
& request.form("quantita") & "','" &
request.form("prezzo") & "','" &
request.form("CATEGORIA") & "')"
'METODO EXECUTE DELL'OGGETTO CONNECTION PER
INSERIRE IL RECORD
CN.EXECUTE SQL
CN.CLOSE
SET CN = NOTHING
%>
<HTML>
<BODY>
<H2>
<% RESPONSE.WRITE "IL RECORD è STATO
REGISTRATO" %>
</H2>
<P><A HREF="visualizzaMAG3.asp">VISUALIZZA
LE MOVIMENTAZIONI DI MAGAZZINO </A>
<P><a href="ecommerceASp2.asp">ENTRA IN
NEGOZIO</a>
<P><a href="index.htm">HOME</a>
</BODY>
</HTML>
|
Risultato RegistraMagazzino.asp |
|
IN SINTESI...
|
Set
nome_connessione=Server.CreateObject("ADODB.Connection")
Crea la connessione al database
cn.Open:apre
la connessione
cn.connectionstring = "DRIVER={Microsoft Access
Driver (*.mdb)};DBQ=" & Server.MapPath
("nome_database.mdb"): definisce il tipo di
database
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
:
codice
sql per caricare i dati in ogni riga della
tabella.
CN.EXECUTE
nome stringa: metodo per eseguire il codice
della stringa
SET CN = NOTHING:
azzera la connessione |
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
LEGGERE E
VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB
Per visualizzare i dati di una tabella in una pagina
web, dobbiamo utilizzare l'oggetto ADODB.Recordset a cui
abbiamo solo accennato nella lezione precedente.
AREA PROGETTO "Simulazione E-Commerce"
Proseguiamo realizzando la pagina
visualizzamag3.asp che prevede la lettura e la
visualizzazionedi tutti i record della tabella
Articoli. Come per l'esempio della lezione
precedente, prima cosa da fare, sarà definire l'oggetto
connessione, definire il connectionstring per definire
il tipo di db, e aprire la connessione.
1 -
CONNESSIONE DATABASE |
Set
objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" & Server.MapPath("magazzino.mdb")
objCon.Open |
2-
STRINGA SQL PER SELEZIONARE TUTTI I CAMPI DELLA
TABELLA |
strSQL = "SELECT * FROM articoli"
Con questa
istruzione, assegno alla variabile strSQL,
il risultato del codice Sql risultato della
query che produce l'elenco di tutti gli
attributi della tabella Articoli secondo la
sintassi:
Select
attributo1,attributo2,...attributoN from
nome_tabella |
3 -DEFINIZIONE
DI UN RECORD SET |
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
Nella
prima riga di questa istruzione, si definisce
l'oggetto recordSet con sintassi;
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
questo
permetterà di aprire la tabella in base alla
domanda(query) che abbiamo fatto
nell'istruzione sql assegnata alla variabile.Nella
seconda riga, apriamo il recordSet attraverso il
metodo open passando le
variabili strSQL (stringa codice Sql) e ObjCon
(variabile connessione) come parametri. Il
risultato sarà quello di raccogliere
nell'oggetto recordset, tutte le righe della
nostra tabella. |
4 - LETTURA
DI TUTTI I RECORD DELLA TABELLA |
Come detto
prima, il recordset ci permetterà di aprire la
tabella, ma ciò. non significa che potremo
leggere e visualizzare al volo tutti i dati, ma
dovremo scorrere tutte le righe per leggere una
ad una i dati da queste contenuti. Per scorrere
le righe all'interno del set di risultati(recordset),
si deve usare il ciclo While (che già avete
studiato in visual basic). Per spostarci da una
riga all'altra della tabella, utilizzeremo il
metodo .movenext, e scorreremo tutti i
record fino alla fine del recordset (.eof)
secondo la sintassi:
while
not nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend
Dove ho
messo i puntini, andranno inserite le istruzioni
che dovranno essere eseguite per ogni riga della
tabella, quindi visto che lo scopo è quello di
visualizzare i dati, il codice diventerà: |
while not
rs.EOF
response.write "CODICE: "& rs("id_articolo")
RESPONSE.WRITE "--------"
response.write "ARTICOLO: "& rs("articolo")
RESPONSE.WRITE "--------"
response.write "QUANTITA': "& rs("quantita")
RESPONSE.WRITE "--------"
response.write "PREZZO: "& rs("prezzo")
RESPONSE.WRITE "--------"
response.write "CATEGORIA: "& rs("categoria")
%>
<BR>
<%
rs.movenext
wend |
|
Il
risultato come potete vedere dal punto di vista
grafico fa un pò desiderare, dunque si potrà con
l'aiuto di frontpage, e con qualche modifica al
codice ottenere un risultato diverso:
Il
codice all'interno del ciclo while sarà
modificato così:
while
not rs.EOF
strid = rs("id_articolo")
strarticolo = rs("articolo")
strquantita = rs("quantita")
strprezzo = rs("prezzo")
strcategoria = rs("categoria")
%>
<body>
<form>
<div align="center">
<table border="1" width="99%" bgcolor="#C0C0C0">
<tr>
<td>CODICE: <input type="text" size="10" name="idarticolo"
value="<%=strid%>">
ARTICOLO: <input type="text" size="27" name="articolo"
value="<%=strarticolo%>">
QUANTITA :
<input type="text" size="16" name="quantita"
value="<%=strquantita%>">
PREZZO:
<input type="text" size="20" name="prezzo" value="<%=strprezzo%>">
CATEGORIA:
<input type="text" size="31" name="categoria"
value="<%=strcategoria%>"><p></td>
</tr>
</table>
</div>
<%
rs.movenext
wend
In
pratica, ogni campo del recordset verrà
scaricato in una variabile che sarà mandata a
video in un textbox di un form html (input type="text")
invece di essere inviate a video con
response.write.
Il codice sembra molto diverso ma in realtà,
inserite queste variabili al resto pensa Frontpage.
|
5 -CHIUSURA
E AZZERAMENTO DELLE VARIABILI DI CONNESSIONE |
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
Come già
detto procediamo alla chiusura degli oggetti
creati e al loro azzeramento liberando così la
memoria del server. |
Codice
Asp |
<html>
<head>
<title>MOVIMENTI MAGAZZINO</title>
</head>
<%
Set objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" &
Server.MapPath("magazzino.mdb")
objCon.Open
strSQL = "SELECT * FROM articoli"
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
while not rs.EOF
strid = rs("id_articolo")
strarticolo = rs("articolo")
strquantita = rs("quantita")
strprezzo = rs("prezzo")
strcategoria = rs("categoria")
%>
<body>
<form>
<div align="center">
<table border="1" width="99%" bgcolor="#C0C0C0">
<tr>
<td>CODICE: <input type="text" size="10"
name="idarticolo" value="<%=strid%>">
ARTICOLO: <input type="text" size="27" name="articolo"
value="<%=strarticolo%>">
QUANTITA :
<input type="text" size="16" name="quantita"
value="<%=strquantita%>">
PREZZO:
<input type="text" size="20" name="prezzo"
value="<%=strprezzo%>"> CATEGORIA:
<input type="text" size="31" name="categoria"
value="<%=strcategoria%>"><p></td>
</tr>
</table>
</div>
<%
rs.movenext
wend
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
%>
<P><A HREF="http://www.scuola24ore.net/progettoonline/caricaMagazzino.htm">TORNA
ALLA PAGINA CARICA MAGAZZINO</A>
<P><a href="ecommerceASp2.asp">ENTRA IN
NEGOZIO</a><P><a href="index.htm">HOME</a></form>
<p> </p>
</body>
</html>
|
IN SINTESI...
|
Select
attributo1,attributo2,...attributoN from
nome_tabella Codice della
query sql per selezionare le colonne della
tabella.
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
: creazione dell'oggetto recordset che
permette di conservare tutti i dati della
tabella selezionati con la query.
while not
nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend Codice vbscript per
scorrere tutte le righe della tabella, viene
utililzzata l'istruzione di ripetizione While e
il metodo movenext per spostarsi da un record
all'altro.
|
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
LEGGERE E
VISUALIZZARE I DATI FILTRATI E CALCOLATI DI UNA TABELLA IN UNA PAGINA WEB
Come nella lezione precedente, dovendo visualizzare i dati di una tabella in una pagina
web, dobbiamo utilizzare l'oggetto ADODB.Recordset. Se
però questi dati dovranno essere manipolati prima di
essere visualizzati, si dovrà arricchire il codice sql
di funzioni di aggregazione e campi calcolati.
AREA PROGETTO "Simulazione E-Commerce"
Proseguiamo realizzando la pagina ecommerceAsp2.asp
(vetrina del negozio online) che prevede la lettura e la visualizzazione di tutti i record della tabella
Articoli, filtrati in base ad una query di
selezione che prenderà ogni volta in esame i record dove
il campo articolo risulterà essere uguale alla
descrizione dell'articolo della vetrina a cui il codice
stesso si riferisce, Dapprima sarà necessario
predisporre con l'aiuto di Frontpage la grafica della
vetrina che dovrà risultare così:
Per ottenere questo risultato, creeremo dapprima una
tabella con 2 righe e 2 colonne. Formatteremo poi
le celle a sinistra, con larghezza pari a 20
(percentuale) e la prima in alto con altezza pari a
pixel 162. Gli sfondi saranno dei colori scelti e per la
cella a destra si prevederà di usare uno sfondo che
utilizzi l'immagine della serranda. Per la parte
centrale della pagina, creeremo un'altra tabella con 6
righe e 5 colonne, che verranno così formattate:
Le
celle a sinistra verranno unite in un'unica colonna, poi
dimensionata a 30 (percentuale)di larghezza, colore di
sfondo grigio. Le celle che diventeranno vetrine del
nostro negozio, avranno larghezza pari a 20(percentuale)
e le celle a destra verranno unite in un'unica colonna
stretta a fondo grigio.
Tra un "box vetrina" e l'altro, lasceremo una fila di
celle che conterrà la descrizione dell'articolo (che
scriveremo direttamente da frontpage) e per ciascun
articolo la quantità disponibile e il prezzo di vendita
che ricaveremo dal database utilizzando il codice Asp.
Infatti dovremo prevedere per ciascun articolo, una
selezione di tutti i record con la stessa descrizione
articolo, la somma delle quantità, e la ricerca
dell'ultimo prezzo inserito per l'articolo in esame. In
questo modo se l'utente vorrà anche solo utilizzare il
form della pagina carica magazzino per aggiornare il
prezzo di vendita, basterà indicare come quantità zero.
Oppure prevedere, inserendo quantità negative, anche lo
scarico di magazzino. Quando la pagina costruita in
frontpage avrà più o meno l'aspetto dell'immagine qui
sopra, passiamo a scrivere il codice asp, per
individuare la posizione esatta dove andare ad inserire
questo codice, ci posizioniamo con il mouse alla fine
della descrizione dell'articolo, e diamo invio, poi
passiamo alla visualizzazione codice di frontpage, il
cursore lampeggerà, basterà dunque dare invio per andare
a capo e cominciare a scrivere lo script.
Come per l'esempio della lezione
precedente, prima cosa da fare, sarà definire l'oggetto
connessione, definire il connectionstring per definire
il tipo di db, e aprire la connessione.
1 -
CONNESSIONE DATABASE |
Set
objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" & Server.MapPath("magazzino.mdb")
objCon.Open |
2-
STRINGA SQL PER SELEZIONARE E AGGREGARE I CAMPI DELLA
TABELLA E PRODURRE I CAMPI CALCOLATI |
strSQL = "SELECT SUM(quantita) as Q,LAST(prezzo)
as P FROM articoli where articolo='berretto nike'"
Con questa
istruzione, assegno alla variabile strSQL,
il risultato del codice Sql risultato della
query che calcola la somma delle quantità
nelle righe dove l'articolo è uguale alla
condizione espressa dopo il where , chiamandola
Q, e il prezzo dell'ultimo record
selezionato, definendolo P secondo la
sintassi:
Select
SUM(attributo1) as nome_campo_calcolato,LAST(attributo2)
as nome_campo_selezionato FROM nome_tabella
where attributo3='XXXXXX' |
3 -DEFINIZIONE
DI UN RECORD SET |
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
Come
nell'esempio della lezione precedente, si definisce
l'oggetto recordSet con sintassi;
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
questo
permetterà di aprire la tabella in base alla
domanda(query) che abbiamo fatto
nell'istruzione sql assegnata alla variabile.Nella
seconda riga, apriamo il recordSet attraverso il
metodo open passando le
variabili strSQL (stringa codice Sql) e ObjCon
(variabile connessione) come parametri. Il
risultato sarà quello di raccogliere
nell'oggetto recordset, le righe della
nostra tabella secondo la selezione effettuata
con la query sql. |
4 - LETTURA
dei RECORD selezionati DELLA TABELLA |
while not
rs.EOF
response.write "disponibilità: " &rs("Q") &"
prezzo: " &rs("P")
rs.movenext
wend
Come
nell'esempio della lezione precedentemente,
scorriamo il record set con un ciclo while, ed
utilizziamo response.write per mandare a video
le variabili calcolate e selezionate Q e P.
|
5 -CHIUSURA
E AZZERAMENTO DELLE VARIABILI DI CONNESSIONE |
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
Come già
detto procediamo alla chiusura degli oggetti
creati e al loro azzeramento liberando così la
memoria del server. |
Codice
Asp
ecommerceAsp2.asp
per l'articolo "berretto Nike" |
<%
Set objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" &
Server.MapPath("magazzino.mdb")
objCon.Open
strSQL = "SELECT SUM(quantita) as
Q,LAST(prezzo) as P FROM articoli where
articolo='berretto nike'"
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
while not rs.EOF
response.write "disponibilità: " &rs("Q") &"
prezzo: " &rs("P")
rs.movenext
wend
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
%>
|
Lo
stesso codice verrà modificato nella
condizione where articolo='berretto nike',
e copiato per ciascun box vetrina. |
Questo il risultato finale
|
Per
chiudere definitivamente il progetto non resta che
creare la pagina INDEX.htm che ci permetterà
di navigare tra le varie pagine fungendo da
PANNELLO DI CONTROLLO. Basterà prevedere i tre
link (collegamenti ipertestuali) e i link di ritorno
in ciascuna pagina.
IN SINTESI...
|
Select
attributo1,attributo2,...attributoN from
nome_tabella where attributoX ='xxxxx' Codice della
query sql per selezionare le colonne della
tabella che assolvono alla condizione espressa
dopo il where.
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
: creazione dell'oggetto recordset che
permette di conservare tutti i dati della
tabella selezionati con la query.
while not
nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend Codice vbscript per
scorrere tutte le righe della tabella, viene
utililzzata l'istruzione di ripetizione While e
il metodo movenext per spostarsi da un record
all'altro.
|
|
|
AREA
PROGETTO "Agenzia Turistica"
Lo scopo di
questo progetto, è quello di rappresentare
alcune tra le principali procedure relative alla
gestione di un agenzia turistica che offre un
servizio di prenotazione on-line per 4 aziende
agrituristiche. In particolare si procederà alla
realizzazione di alcune delle pagine web
necessarie sia dal punto di vista del gestore,
(dell'operatore turistico), che dal punto di
vista del cliente (l'utente ) che effettuerà le
prenotazioni attraverso un modulo online, Di
seguito sono elencate le pagine oggetto di
questo progetto :
Cliccando
sulle miniature è possibile salvare le pagine in
formato PDF.
AREA
CLIENTE
listinoStrutture.asp
prenotazione.htm
Registra.asp
AREA
GESTORE
Prenotazioni.asp
VisualizzaClienti.asp
Per
iniziare , creiamo il database che verrà
collegato con il sito. Salviamo questo database
con il nome AgenziaAgriturismo.mdb. Il Database
in oggetto, dovrà raccogliere le informazioni
relative alle prenotazioni dei soggiorni presso
4 aziende agroturistiche che abbiamo individuato
nel territorio che ci circonda: l'agro pontino.
Il diagramma ER avrà questo aspetto:
Le
tabelle
Pacchetti
e
Destinazioni
verranno
popolate direttamente da Access in fase
preliminare, mentre le tabelle
Clienti
e
Prenotazioni
si popoleranno durante la prenotazione
acquisendo i contenuti dal form della pagina
prenotazione.htm
Cominciamo ad
operare nell'area progetto applicando quanto
esposto nella lezione 3 e creiamo la pagina
web
prenotazione.htm
che conterrà il modulo (Form),
per caricare i dati del cliente che verranno
memorizzati nella tabella
Clienti
e i
dati della prenotazione che verranno registrati
nella tabella
Prenotazioni
del database. Vi mostrerò
codici "puliti", cioè scremati da quanto frontpage aggiunge automaticamente. quindi
provando questi codici vi appariranno solo i
contenuti essenziali, senza formattazione ne
immagini, che potremo poi aggiungere con poche
mosse direttamente da frontpage. Ho colorato il
codice delle pagine del progetto in viola perchè
possiate riconoscerlo facilmente.
Codice
HTML (prenotazione.htm) |
Risultato
(prenotazione.htm) |
<html><head><title>Modulo
Prenotazione</title>
<body>Agenzia
AgriTurismoPontino<BR>
<FORM
ACTION="registraPrenotazione.ASP"
METHOD="POST">
MODULO DI PRENOTAZIONE
<BR>
Codice fiscale
<INPUT
NAME="CodiceFiscale"
SIZE="25"><BR>
Cognome
<INPUT
NAME="Cognome"
SIZE="25"><BR>
Nome
<INPUT
NAME="Nome"
SIZE="25"><BR>
Telefono
<INPUT
NAME="Telefono"
SIZE="25"><BR>
Pacchetto
<select
size="1"
name="PacchettoStruttura">
<option>---</option>
<option
value="1">Small
- 3 notti HB</option>
<option
value="2">Plus
- 4 notti HB</option>
<option
value="3">Full
- 7 notti FB</option>
</select><BR>
Data
<select
size="1"
name="data">
<option>---</option>
<option>06/08/2011</option>
<option>13/08/2011</option>
<option>20/08/2011</option>
<option>27/08/2011</option>
</select><BR>
Struttura
<select
size="1"
name="struttura">
<option>---</option>
<option
value="1">L’Ovile
- Borgo Faiti</option>
<option
value="2">Casal
Damiano - Aprilia</option>
<option
value="3">Castel
Margherita - Cori</option>
<option
value="4">Agriturismo
Sabaudia - Sabaudia</option>
</select><BR>
N°Camere
<INPUT
NAME="camere"
SIZE="2"><BR>
N° Persone
<INPUT
NAME="Persone"
SIZE="2"><BR>
<INPUT
TYPE ="SUBMIT"
VALUE="INVIA"
NAME="B1">
<INPUT
TYPE="submit""
VALUE ="ANNULLA"
NAME="B2"><BR>
</FORM>
<a href="agenzia_agriturismo_pontino.htm">HOME</a>
</BODY>
</HTML>
|
|
La casella di riepilogo
Per
permettere all'utente di scegliere il
tipo di pacchetto tra le tre tipologie
offerte dall'agenzia, la data di
partenza a scelta tra 4 date disponibili e
la struttura tra le 4 aziende
agroturistiche presenti, creiamo tre caselle di
riepilogo.
Il tag Html per inserirla è: <select>
e <option>. All'interno del tag select,
definiamo gli attributi size 1 per rendere
visibile una sola voce a tendina chiusa, e
l'attributo name per definire il nome con
cui verrà richiamata nelle pagine. Con il
tag <option> è possibile definire le voci
dell'elenco.
Oltre il
pulsante INVIA (type ="submit") per inviare
i dati in un'altra pagina, ho previsto il
pulsante ANNULLA (type="reset"), che
automaticamente cancella quanto scritto nei
campi del modulo per resettare appunto il
form.
Notate il
tag <Form action>
che invia i dati alla
pagina registraPrenotazioni.asp per caricare i
dati nella 2 tabelle del database. Vedremo
come realizzare questa pagina nella prossima
lezione. |
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
CARICARE DATI IN UNA TABELLA DA UN FORM HTML
Per utilizzare il Database nel Web, è necessario essere
collegati al Db stesso, per far ciò, si utilizzano gli
ADO (Activex Data Objects). Sostanzialmente, è come
quando volete parlare al telefono con una persona, la
prima cosa che dovete fare è comporre il numero della
persona quindi cercarlo in rubrica, e comporlo. La
stessa cosa si deve fare con i database, ossia se dovete
leggere o aggiornare dati su una tabella di un database,
dovrete dapprima connettervi ad esso creando una
connessione diretta (=comporre il numero). Al telefono,
dopo aver composto il numero, dovete restare in attesa
che vi rispondano, per cominciare a parlare. La stessa
cosa è con il database, dopo aver creato la connessione
al db, dovete aprire questa connessione per poter
comunicare con il db. Gli oggetti ADO, disponibili
per connettersi al Database, sono:
-
ADODB.Connection:
Per creare la
connessione e quindi identificare in modo univoco il
database, quindi se si vuole operare su più database
sarà necessario aprire tante connessioni quanti sono
i database.
-
ADODB.Recordset:
Per conservare
l'insieme delle righe della tabella a cui siamo
interessati.
AREA
PROGETTO "Agenzia Turistica"
Cominciamo con l'aprire una connessione al data base
AgenziaAgriturismo.mdb (Lezione n°4)
1-
CONNESSIONE AL DATABASE |
'CONNESSIONE AL DATA BASE
Set cn=Server.CreateObject("ADODB.Connection")
cn.connectionstring = "DRIVER={Microsoft Access
Driver (*.mdb)};DBQ=" & Server.MapPath ("AgenziaAgriturismo.mdb")
cn.Open
Con queste
istruzioni, creiamo una connessione ad un
database Access chiamandola CN:
SET
CN crea la connessione
nominandola CN,quindi
la sintassi è SET nome_connessione
CN.connectionstring = "DRIVER=..........SERVER.mapPath...."
specifica il tipo di database (access).
cn.open apre la connessione
quindi la sintassi è nome_connessione.open |
2- STRINGA
SQL PER CARICARE I DATI NELLE TABELLE |
sql="INSERT INTO
Clienti (codFiscaleCliente,nomeCliente,cognomeCliente,TelefonoCliente)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("Nome") & "','" &
request.form("Cognome") & "','" & request.form("Telefono")
& "')"
***scrivete questo testo tutto sulla stessa
riga per non commettere errori***
Con queste
istruzioni, integriamo il codice Sql per
colloquiare con il database al VBScript.
Assegniamo ad una variabile stringa che ho
chiamato sql, il risultato del codice sql
INSERT INTO per inserire i valori di una
nuova riga della tabella
Clienti .
Come
potete vedere la prima parte è semplice sql
quindi come da sintassi
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
dopo
Values, tra parentesi vengono indicati i valori
che devono essere prelevati dal form di
prenotazione.htm, seguendo queste poche ma
essenziali regole: dopo la parentesi, apice
singolo', poi doppi ",poi dovendo concatenare la
& poi indichiamo l'oggetto request.form("nome_campo1")
& chiudiamo i doppi apici" chiudiamo il singolo
' mettiamo una virgola e riapriamo il singolo '
, i doppi " e continuiamo con gli altri campi
quindi & request.form("nome_campo2") ecc.
Ovviamente nome_campo1, nome_campo2 ...sono i
nomi che abbiamo assegnato nel file
prenotazione.htm agli oggetti disegnati nel
modulo, quindi i textbox, e la casella di
riepilogo, non teniamo conto dei campo ID della
tabella
Prenotazioni, che non facciamo nemmeno figurare nel form, visto che il suo valore non deve essere
inserito dall'utente: esserndo una chiave
contatore si incrementa da sola. Nella
tabella
Clienti
invece
dovremo inserire il campo codice fiscale che
funge da chiave primaria.
sql2="INSERT INTO
Prenotazioni (codCliente,codPacchetto,codDestinazione,data,NumeroPacchetti,NumeroCamere)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("PacchettoStruttura") &
"','" & request.form("Struttura") & "','" &
request.form("data") & "','" & request.form("persone")
& "','" & request.form("camere") & "')"
***scrivete questo testo tutto sulla stessa
riga per non commettere errori***
Assegniamo
ad una variabile stringa che ho chiamato sql2, il risultato del codice sql
INSERT INTO per inserire i valori di una
nuova riga della tabella
Prenotazioni .
|
3- ESEGUO IL
CODICE DELLA STRINGA SQL E CHIUDO LE CONNESSIONI |
CN.EXECUTE SQL
CN.EXECUTE SQL2
CN.CLOSE
SET CN = NOTHING
Con queste
istruzioni, utilizziamo il metodo EXECUTE sull'oggetto connessione CN che abbiamo creato,
indicando di eseguire il codice SQL contenuto
nella stringa Sql e Sql2: nome_connessione.Execute
stringa
A questo
punto è possibile chiudere la connessione con il
metodo
CLOSE: nome_connessione.close
Dopo aver
chiuso la connessione, con il metodo .NOTHING,
azzeriamo, resettiamo la variabile Cn:
nome_connessione.nothing |
4 - CODICE
MESSAGGIO DI CONFERMA REGISTRAZIONE |
<HTML>
<BODY>
<H2>
<% RESPONSE.WRITE "IL RECORD è STATO
REGISTRATO" %>
</H2>
Dopo aver
chiuso con %> il codice VbScript, apriamo
il codice html e con il tag <H2 >
definiamo la dimensione del testo di conferma
che inviamo all'utente con l'oggetto RESPONSE
(ovviamente riapriamo il <%....%>
<a href="prenotazione.htm">TORNA
A
MODULO DI PRENOTAZIONE</a>
<a href="index.htm">HOME</a>
Con il tag
<HREF>, predisponiamo la possibilità per
l'utente di spostarsi sulle altre pagine del
progetto tramite semplici collegamenti
ipertestuali.
|
Codice
Asp RegistraPrenotazione.asp |
<% LANGUAGE = VBSCRIPTS
%> <%
'DICHIARO LE VARIABILI
DIM CN
DIM SQL
DIM sql2
'CONNESSIONE AL DATA
BASE
Set cn=Server.CreateObject("ADODB.Connection")
'cn.provider="MICROSOFT.JET.OLEDB.4.0"
cn.connectionstring =
"DRIVER={Microsoft Access Driver (*.mdb)};DBQ="
& Server.MapPath("AgenziaAgriturismo.mdb")
cn.Open
sql="INSERT INTO Clienti
(codFiscaleCliente,nomeCliente,cognomeCliente,TelefonoCliente)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("Nome") & "','" &
request.form("Cognome") & "','" &
request.form("Telefono") & "')"
'METODO EXECUTE
DELL'OGGETTO CONNECTION PER INSERIRE IL
RECORD
CN.EXECUTE SQL
sql2="INSERT INTO
Prenotazioni (codCliente,codPacchetto,codDestinazione,data,NumeroPacchetti,NumeroCamere)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("PacchettoStruttura") &
"','" & request.form("Struttura") & "','" &
request.form("data") & "','" & request.form("persone")
& "','" & request.form("camere") & "')"
CN.EXECUTE sql2
CN.CLOSE
SET CN = NOTHING
%>
<HTML><BODY>
Agenzia
AgriTurismoPontino
<% RESPONSE.WRITE "LA PRENOTAZIONE E'STATA
REGISTRATA CON SUCCESSO" %>
<br>
<a
href="prenotazione.htm">TORNA
A MODULO DI PRENOTAZIONE
<br>
<a
href="agenzia_agriturismo_pontino.htm">HOME
</BODY>
</HTML> |
Risultato RegistraPrenotazioni.asp |
|
IN SINTESI...
|
Set
nome_connessione=Server.CreateObject("ADODB.Connection")
Crea la connessione al database
cn.Open:apre
la connessione
cn.connectionstring = "DRIVER={Microsoft Access
Driver (*.mdb)};DBQ=" & Server.MapPath
("nome_database.mdb"): definisce il tipo di
database
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
:
codice
sql per caricare i dati in ogni riga della
tabella.
CN.EXECUTE
nome stringa: metodo per eseguire il codice
della stringa
SET CN = NOTHING:
azzera la connessione |
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
LEGGERE E
VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB
Per visualizzare i dati di una tabella in una pagina
web, dobbiamo utilizzare l'oggetto ADODB.Recordset a cui
abbiamo solo accennato nella lezione precedente.
AREA PROGETTO "Agenzia Turistica"
Proseguiamo realizzando la pagina
visualizzaclienti.asp che prevede la lettura e la
visualizzazione di tutti i record della tabella
CLIENTI. Come per l'esempio della lezione
precedente, prima cosa da fare, sarà definire l'oggetto
connessione, definire il connectionstring per definire
il tipo di db, e aprire la connessione.
1 -
CONNESSIONE DATABASE |
Set
objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" & Server.MapPath("AgenziaAgriturismo.mdb")
objCon.Open |
2-
STRINGA SQL PER SELEZIONARE TUTTI I CAMPI DELLA
TABELLA |
strSQL = "SELECT * FROM Clienti"
Con questa
istruzione, assegno alla variabile strSQL,
il risultato del codice Sql risultato della
query che produce l'elenco di tutti gli
attributi della tabella Clienti secondo la
sintassi:
Select
attributo1,attributo2,...attributoN from
nome_tabella |
3 -DEFINIZIONE
DI UN RECORD SET |
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
Nella
prima riga di questa istruzione, si definisce
l'oggetto recordSet con sintassi;
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
questo
permetterà di aprire la tabella in base alla
domanda(query) che abbiamo fatto
nell'istruzione sql assegnata alla variabile.Nella
seconda riga, apriamo il recordSet attraverso il
metodo open passando le
variabili strSQL (stringa codice Sql) e ObjCon
(variabile connessione) come parametri. Il
risultato sarà quello di raccogliere
nell'oggetto recordset, tutte le righe della
nostra tabella. |
4 - LETTURA
DI TUTTI I RECORD DELLA TABELLA |
Come detto
prima, il recordset ci permetterà di aprire la
tabella, ma ciò. non significa che potremo
leggere e visualizzare al volo tutti i dati, ma
dovremo scorrere tutte le righe per leggere una
ad una i dati da queste contenuti. Per scorrere
le righe all'interno del set di risultati(recordset),
si deve usare il ciclo While (che già avete
studiato in visual basic). Per spostarci da una
riga all'altra della tabella, utilizzeremo il
metodo .movenext, e scorreremo tutti i
record fino alla fine del recordset (.eof)
secondo la sintassi:
while
not nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend
Dove ho
messo i puntini, andranno inserite le istruzioni
che dovranno essere eseguite per ogni riga della
tabella, quindi visto che lo scopo è quello di
visualizzare i dati, il codice diventerà: |
|
Risultato
VisualizzaClienti.asp |
while not
rs.EOF
response.write "CODICE: "& rs("CodFiscaleCliente")
RESPONSE.WRITE "--------"
response.write "Nome: "& rs("NomeCliente")
RESPONSE.WRITE "--------"
response.write "Cognome: "& rs("CognomeCliente")
RESPONSE.WRITE "--------"
response.write "Telefono: "& rs("TelefonoCliente")
%>
<BR>
<%
rs.movenext
wend |
|
Il
risultato come potete vedere dal punto di vista
grafico fa un pò desiderare, dunque si potrà con
l'aiuto di frontpage, e con qualche modifica al
codice ottenere un risultato diverso. Il
codice all'interno del ciclo while sarà
modificato così: |
|
Risultato
VisualizzaClienti.asp
modificata
con Frontpage |
while not
rs.EOF
strid = rs("CodFiscaleCliente")
strNOME = rs("NomeCliente")
strCOGNOME = rs("CognomeCliente")
strTELEFONO = rs("TelefonoCliente")
%>
<body bgcolor="#FFFFDF">
<form>
<div align="center">
<table border="1" width="94%" bgcolor="#FFFFFF">
<tr>
<td>CODICE FISCALE:
<input type="text" size="10" name="codfisc"
value="<%=strid%>">
NOME: <input type="text" size="27" name="nome"
value="<%=strNOME%>"> COGNOME:
<input type="text" size="10" name="cognome"
value="<%=strCOGNOME%>">
TELEFONO:
<input type="text" size="23" name="telefono"
value="<%=strTELEFONO%>"></tr>
</table>
</div>
<%
rs.movenext
wend
|
In
pratica, ogni campo del recordset verrà
scaricato in una variabile che sarà mandata a
video in un textbox di un form html (input type="text")
invece di essere inviate a video con
response.write.
Il codice sembra molto diverso ma in realtà,
inserite queste variabili al resto pensa Frontpage. |
5 -CHIUSURA
E AZZERAMENTO DELLE VARIABILI DI CONNESSIONE |
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
Come già
detto procediamo alla chiusura degli oggetti
creati e al loro azzeramento liberando così la
memoria del server. |
Codice
Asp |
<html><title>ELENCO
CLIENTI</title>
<%
Set objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" &
Server.MapPath("AgenziaAgriturismo.mdb")
objCon.Open
strSQL = "SELECT * FROM Clienti"
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, objcon
while not rs.EOF
strid = rs("CodFiscaleCliente")
strNOME = rs("NomeCliente")
strCOGNOME = rs("CognomeCliente")
strTELEFONO = rs("TelefonoCliente")
%>
<body bgcolor="#FFFFDF">
<form>
<div align="center">
<table border="1" width="94%" bgcolor="#FFFFFF">
<tr>
<td>CODICE
FISCALE: <input type="text" size="10" name="codfisc"
value="<%=strid%>">
NOME: <input type="text" size="27" name="nome"
value="<%=strNOME%>"> COGNOME:
<input type="text" size="10" name="cognome"
value="<%=strCOGNOME%>">
TELEFONO:
<input type="text" size="23" name="telefono"
value="<%=strTELEFONO%>"></tr>
</table>
</div>
<%
rs.movenext
wend
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
%>
</form>
<p> </p>
<P align="center"><b><font face="Times New
Roman"><a href="PRENOTAZIONI.asp">VISUALIZZA
LE PRENOTAZIONI</a></font></b><P align="center">
<b><font face="Times New Roman" size="5">
<A HREF="AGRITURISMO/AGENZIA_AGRITURISMO_PONTINO.htm">HOME</A></font></b></body></html>
|
IN SINTESI...
|
Select
attributo1,attributo2,...attributoN from
nome_tabella Codice della
query sql per selezionare le colonne della
tabella.
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
: creazione dell'oggetto recordset che
permette di conservare tutti i dati della
tabella selezionati con la query.
while not
nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend Codice vbscript per
scorrere tutte le righe della tabella, viene
utililzzata l'istruzione di ripetizione While e
il metodo movenext per spostarsi da un record
all'altro.
|
|
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
LEGGERE E
VISUALIZZARE I DATI FILTRATI E CALCOLATI DI UNA TABELLA IN UNA PAGINA WEB
Come nella lezione precedente, dovendo visualizzare i dati di una tabella in una pagina
web, dobbiamo utilizzare l'oggetto ADODB.Recordset. Se
però questi dati dovranno essere manipolati prima di
essere visualizzati, si dovrà arricchire il codice sql
di funzioni di aggregazione e campi calcolati.
AREA PROGETTO "Agenzia Turistica"
Proseguiamo realizzando la pagina Prenotazioni.asp
(pagina del lato gestore) che prevede dapprima la
realizzione dell'interfaccia grafica come nell'immagine
seguente:
Per
realizzarla useremo Frontpage. Dovremo dunque realizzare una
tabella per ciascun Agriturismo, che riporti per ciascuna data
disponibile e per ciascun pacchetto, 2 colonne che lasceremo vuote
in questa fase, che dovranno contenere, l'una il numero delle camere
prenotate e l'altra il numero delle camere ancora disponibli.
Queste due ultime informazioni derivano da calcoli che verranno
elaborati dalla pagina asp in tempo reale, restituendo così sempre
una situazione aggiornata.
Per effettuare
questi calcoli, utilizzeremo oltre che il semplice codice sql, una
funzione di aggregazione che effettuerà la somma ,SUM(), delle
prenotazioni per ciascuna tipologia di pacchetto-struttura-data, che
poi sottratte dal valore costante delle camere disponibili per
ciascuna struttura (che abbiamo supposto pari a 10), ci
restituiscono le disponibilità per ogni combinazione aggiornata in
tempo reale.
Cominciamo
allora con la creazione della struttura grafica con Frontpage:
Inserire una
Tabella con 9 righe 2 colonne specificando la larghezza in
percentuale 80 -spaziatura interna celle 1- spaziatura tra celle 2-
dimensione bordi 1.
Posizionarsi nella prima riga ed unire le celle, impostare il colore
di fondo (verde) e scrivere PRENOTAZIONI E DISPONIBILITA' (century
gotic 4 - bianco)
Nella 2° riga inserire l'immagine del primo agriturismo e procedere
allo stesso modo per tutti gli agriturismi. Proseguire con
l'inserimento nella seconda cella della seconda riga, di una tabella
ii 6 righe e 9 colonne, con allineamento a sinistra, larghezza
percentuale 100, spaziatura interna celle 1, spaziatura tra celle 2,
dimensioni bordi 1. unire di tre celle in tre celle e riempire con
PACCHETTO SMALL, PACCHETTO PLUS e PACCHETTO FULL. Per ciascun
pacchetto inserire nella prima colonna le date fisse dei pacchetti
offerti dall'agenzia.
Dopo aver
realizzato la medesima tabella per tutte le strutture, saremo pronti
per la parte più importante di questo progetto, cioè collegare
dinamicamente il sito al database, procedendo alla realizzazione
dello script asp che conterrà la funzione SUM e un campo calcolato.
Per cominciare a scrivere il codice asp, dobbiamo posizionarci sulla
prima casella bianca, (quella che si riferisce al calcolo delle
camere prenotate presso la struttura L'Ovile, per il 06/08/2011
Pacchetto Small . Passare dalla modalità normale di
frontpage alla modalità codice e li inserire dove si
sarà posizionato il cursore, il seguente codice. Come per l'esempio della lezione
precedente, prima cosa da fare, sarà definire l'oggetto
connessione, definire il connectionstring per definire
il tipo di db, e aprire la connessione.
1 -
CONNESSIONE DATABASE e DICHIARAZIONE DELLE
VARIABILI |
<% LANGUAGE =
VBSCRIPTS
DIM objCon,
Prenotate1
Set objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" & Server.MapPath("AgenziaAgriturismo.mdb")
objCon.Open
|
2-
STRINGA SQL PER SELEZIONARE E AGGREGARE I CAMPI DELLA
TABELLA E PRODURRE I CAMPI CALCOLATI |
Prenotate1=
SELECT Pacchetti.codPacchetto,
Destinazioni.codAgriturismo, Sum(Prenotazioni.NumeroCamere)
AS Prenotate, Prenotazioni.Data FROM Pacchetti
INNER JOIN (Destinazioni INNER JOIN Prenotazioni
ON Destinazioni.codAgriturismo =
Prenotazioni.codDestinazione) ON
Pacchetti.codPacchetto =
Prenotazioni.codPacchetto
GROUP BY Pacchetti.codPacchetto,
Destinazioni.codAgriturismo, Prenotazioni.Data
HAVING (((Pacchetti.codPacchetto)=1) AND ((Destinazioni.codAgriturismo)=1)
AND ((Prenotazioni.Data)='06/08/2011'))
***scrivete questo testo tutto sulla stessa
riga per non commettere errori*** OPPURE CREATE
LA QUERY IN ACCESS E RIPORTATE QUI LA TRADUZIONE
SQL
.
Con questa
istruzione, assegno alla variabile strSQL,
il risultato del codice Sql risultato della
query che calcola la somma delle camere
prenotate
nelle righe dove il codice pacchetto è uguale
a 1 il codice agriturismo è uguale ad 1 e la
data è pari a 06/08/2011.
Select
SUM(attributo1) as nome_campo_calcolato, FROM nome_tabella
where attributo='XXXXXX' and ,,, |
3 -DEFINIZIONE
DI UN RECORD SET |
Set rs=Server.CreateObject("ADODB.recordset")
rs.Open Prenotate1,objcon
Come
nell'esempio della lezione precedente, si definisce
l'oggetto recordSet con sintassi;
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
questo
permetterà di aprire la tabella in base alla
domanda(query) che abbiamo fatto
nell'istruzione sql assegnata alla variabile
Prenotate1.Nella
seconda riga, apriamo il recordSet attraverso il
metodo open passando le
variabili Prenotate1 (stringa codice Sql) e ObjCon
(variabile connessione) come parametri. Il
risultato sarà quello di raccogliere
nell'oggetto recordset, le righe della
nostra tabella secondo la selezione effettuata
con la query sql. |
4 - Emissione
dell'Output |
response.write rs("Prenotate")%>
utilizziamo response.write per mandare a video
la variabili calcolata Prenotate
|
5 - Emissione
dell'Output |
Ci
posizioniamo nella cella affianco, quella delle
disponibilità ed effettuiamo il calcolo delle
disponibilità aggiornate, sottraendo la somma
delle prenotazioni dal numero delle
disponibilità che noi abbiamo supposto pari a
10camere per ciascuna struttura.:
<%response.write 10 - rs("Prenotate") |
6 -CHIUSURA
E AZZERAMENTO DELLE VARIABILI DI CONNESSIONE |
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
%>
Come già
detto procediamo alla chiusura degli oggetti
creati e al loro azzeramento liberando così la
memoria del server. |
Codice
Asp Prenotazioni.asp
per il pacchetto Small (1) della
STruttura L'Ovile(1) per la data
06/08/2011 |
<%
DIM objCon, Prenotate1
Set objCon = Server.CreateObject( "ADODB.Connection"
)
objCon.connectionstring = "DRIVER={Microsoft
Access Driver (*.mdb)};DBQ=" &
Server.MapPath("AgenziaAgriturismo.mdb")
objCon.Open
Prenotate1 = "SELECT Pacchetti.codPacchetto,
Destinazioni.codAgriturismo, Sum(Prenotazioni.NumeroCamere)
AS Prenotate,Prenotazioni.Data FROM
Pacchetti INNER JOIN (Destinazioni INNER
JOIN Prenotazioni ON
Destinazioni.codAgriturismo =
Prenotazioni.codDestinazione) ON
Pacchetti.codPacchetto =
Prenotazioni.codPacchetto GROUP BY
Pacchetti.codPacchetto,
Destinazioni.codAgriturismo,
Prenotazioni.Data HAVING (((Pacchetti.codPacchetto)=1)
AND ((Destinazioni.codAgriturismo)=1) AND ((Prenotazioni.Data)='06/08/2011'))"
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open Prenotate1,objcon
response.write rs("Prenotate")%>
Ci
posizioniamo nella cella affianco, quella
delle disponibilità:
<%response.write
10 - rs("Prenotate")
rs.close
Set rs = Nothing
objcon.close
Set objcon = Nothing
%>
|
Lo
stesso codice verrà modificato nei criteri,
codPacchetto, codAgriturismo, e data, e
copiato in ogni casella. |
Ora per terminare sarà necessario procedere con la
pagina ListinoStrutture.asp, che
prevede l'utilizzo di tre query, una per ciascun
tipo di pacchetto, che mostrano rispettivamente il
costo del pacchetto per persona, che si intende
unico per tutte le date e strutture. Come per la
pagina delle prenotazioni, procediamo con la
realizzazione della parte grafica con l'utilizzo di
frontpage. Nelle caselle lasciate libere per
inserire il prezzo, ci posizioniamo e inseriamo il
codice asp seguente. Come al solito dovremo aprire
una connessione ed un recordset, e
predisporre il codice Sql che vi ho evidenziato. Lo
stesso stralcio di codice dovrà essere copiato nelle
altre due caselle lasciate libere provvedendo
ovviamente alla modifica del criterio nella query
che diventerà 2 e poi 3, a seconda del pacchetto.
ListinoStrutture.asp |
<%
DIM objConLISTINO, listino
Set objConLISTINO = Server.CreateObject( "ADODB.Connection"
)
objConLISTINO.connectionstring =
"DRIVER={Microsoft Access Driver (*.mdb)};DBQ="
& Server.MapPath("AgenziaAgriturismo.mdb")
objConLISTINO.Open
listino=
"select CostoIndividuale as Prezzo From
PAcchetti where codpacchetto=1"
Set rs=Server.CreateObject("ADODB.recordset")
rs.Open listino,objconLISTINO
response.write rs("Prezzo")
rs.close
Set rs = Nothing
objconLISTINO.close
Set objconLISTINO = Nothing
%> |
IN SINTESI...
|
Select
attributo1,attributo2,...attributoN from
nome_tabella where attributoX ='xxxxx' Codice della
query sql per selezionare le colonne della
tabella che assolvono alla condizione espressa
dopo il where.
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
: creazione dell'oggetto recordset che
permette di conservare tutti i dati della
tabella selezionati con la query.
Select
SUM(attributo1) as nome_campo_calcolato, FROM nome_tabella
where attributo='XXXXXX' and ,,,: Codice SQL
da assegnare ad una variabile nel codice asp,
per produrre un campo calcolato con l'utilizzo
delle funzioni di aggregazione di Access (sql). |
|
|
Utilizziamo
il codice Visual Basic per effettuare dei calcoli
CONFERMA REGISTRAZIONE
CON CALCOLO DEL PREVENTIVO
registraPrentotazione.asp |
<%
LANGUAGE = VBSCRIPTS %>
<%
'DICHIARO LE VARIABILI
DIM CN
DIM SQL
DIM sql2,sql3
dim p, n, prev
'CONNESSIONE AL DATA BASE
Set cn=Server.CreateObject("ADODB.Connection")
'cn.provider="MICROSOFT.JET.OLEDB.4.0"
cn.connectionstring = "DRIVER={Microsoft Access
Driver (*.mdb)};DBQ=" & Server.MapPath("AgenziaAgriturismo.mdb")
cn.Open
sql="INSERT INTO Clienti (codFiscaleCliente,nomeCliente,cognomeCliente,TelefonoCliente)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("Nome") & "','" &
request.form("Cognome") & "','" & request.form("Telefono")
& "')"
'METODO EXECUTE DELL'OGGETTO CONNECTION PER
INSERIRE IL RECORD
CN.EXECUTE SQL
sql2="INSERT INTO Prenotazioni (codCliente,codPacchetto,codDestinazione,data,NumeroPacchetti,NumeroCamere)
VALUES ('"& request.form("CodiceFiscale") &
"','" & request.form("PacchettoStruttura") &
"','" & request.form("Struttura") & "','" &
request.form("data") & "','" & request.form("persone")
& "','" & request.form("camere") & "')"
CN.EXECUTE sql2
p=request.form("Struttura")
n=request.form("Persone")
if p = 1 then
prev = 330 * n
else
if p = 2 then
prev = 400 * n
else
prev = 950 * n
end if
end if
%>
<HTML>
<BODY bgcolor="#FFFFDF">
<p align="center"><font size="8" face="Century
Gothic">Agenzia Agri<font
color="#008080">Turismo</font>
Pontino</font></p>
<P align="center"><b><center><% RESPONSE.WRITE
"LA PRENOTAZIONE E'STATA REGISTRATA CON
SUCCESSO" %><font size="5"><br>
<font color="#008080"><b>
<%response.write "Preventivo soggiorno: " & prev
CN.CLOSE
SET CN = NOTHING
%>
€</font></center>
</b><P align="center"> <img src="IMMAGINI
AGRITURISMO/AgriturismoModuloPrenotazione.jpg">
<b>
</b>
<P align="center"><b>
<a href="http://www.patriziatarantino.net/agriturismo/prenotazione.htm">TORNA
A
MODULO DI PRENOTAZIONE</a></b><P align="center"><b>
<a href="agenzia_agriturismo_pontino.htm"><font
size="5">HOME</font></a><font size="5">
</font></b>
</BODY>
</HTML>
|
|
|
AREA PROGETTO "Studio Legale"
Lo scopo di questo progetto, è
quello di realizzare un semplice sito web per uno studio legale. La
parte dinamica del sito consiste nell'area dedicata ai Contatti,
dove si vuole prevedere un modulo per l'invio di richiesta
informazioni/consulenza. Quest'ultime vengono poi inviate attraverso
codice Asp, in un Database access, (Messaggi.accdb) che per
l'occorrenza sarà inizialmente costituito solo dalla tabella
ContattiMex. Si prevederà poi la lettura dei dati registrati nel
database e l'invio dei dati raccolti ad un'altra pagina dinamica per
la visualizzazione protetta da password.
Questa è l'ipotesi di Homepage che ciascun gruppo di lavoro
realizzerà secondo i propri criteri grafici e che diverrà di
conseguenza la base grafica di tutte le altre pagine del sito.
Per
iniziare , creiamo il database che verrà collegato con il sito.
Salviamo questo database con il nome Messaggi.accdb. Il Database in
oggetto, dovrà raccogliere le informazioni relative alla data
corrente al momento della compilazione del modulo (per questo
useremo lo script asp con la funzione 'now'), i dati del richiedente
(nome e indirizzo mail) , e un messaggio di testo.
Cominciamo ad operare nell'area progetto applicando quanto esposto
nella lezione 3 e creiamo la pagina web
contatti.asp
che conterrà il modulo (Form), per caricare le informazioni del
visitatore che intendiamo raccogliere. Quando si realizza la pagina
web di raccolta, il Form appunto, non è necessario utilizzare codice
asp, il form di per se è realizzato con codice Html, nel nostro
caso, volendo registrare nel database in modo automatico la data e
l'ora della richiesta, siamo costretti ad utilizzare una funzione
dinamica (now) che rende di fatto l'intera pagina asp una pagina web
dinamica e non statica. La data e l'ora corrente infatti, verranno
mostrate nel browser costantemente aggiornate. Vi mostrerò codici
"puliti", cioè scremati da quanto frontpage aggiunge
automaticamente, quindi provando questi codici vi appariranno solo i
contenuti essenziali, senza formattazione ne immagini, che potremo
poi aggiungere con poche mosse direttamente da frontpage. Ho
colorato il codice delle pagine del progetto in viola perchè
possiate riconoscerlo facilmente.
Codice
HTML (contatti.asp) |
Risultato (contatti.asp) |
<html><title>Contatti</title><body>
<FORM ACTION="registraMESSAGGIO.ASP"
METHOD="POST">
Invia un messaggio
mm-gg-aaaa
ora
<input type="text"
name="dataOra" size="20" value="<%=now()%>">
Mi chiamo </FONT>
<INPUT NAME="nome"
SIZE="51">
il mio indirizzo email<INPUT
NAME="email" SIZE="51">
il mio messaggio
(scrivi il tuo messaggio max 255 caratteri nel Box senza
andare a capo con
Invio)<textarea
rows="17" name="messaggio" cols="60" style="float: left"></textarea>
<INPUT TYPE ="submit"
VALUE="INVIA IL MESSAGGIO" NAME="B1">
</FORM>
</body></html> |
Con gli <Input type="text">,
ho definito gli input box dove l'utente inserirà i
propri dati, in particolare nel box DataOra, ho
attribuito il contenuto direttamente da codice,
utilizzando la funzione now che restituisce data ed ora
corrente di sistema. Essendo uno script asp, è racchiuso
tra i "tag" <% (apri) e %> (chiudi)
Con <textarea rows="17" name="messaggio" cols="60"
style="float: left"> , inseriamo una casella di testo di
17righe e 60 colonne, dove l'utente scriverà la sua
richiesta di informazioni.
Notate il tag <Form
action> che
crea un modulo, che sarà inviato in modo riservato alla
pagina registraMessaggio.asp per caricare i dati nella
tabella del database. Vedremo come realizzare questa
pagina nella prossima lezione.
|
IN SINTESI...
|
<FORM
method="POST" action="pagina.asp">:
crea un modulo html, che sarà inviato in
modo riservato a pagina.asp.
INPUT TYPE="text": Tag Html per
inserire in un form Html un text box
INPUT TYPE="submit": Tag Html per
inserire in un form Html un pulsante
TEXTAREA
Tag Html per inserire in un form Html un
box di testo
|
|
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
CARICARE DATI IN UNA TABELLA DA UN FORM
Per utilizzare il Database nel Web, è necessario essere
collegati al Db stesso, per far ciò, si utilizzano gli
ADO (Activex Data Objects). Sostanzialmente, è come
quando volete parlare al telefono con una persona, la
prima cosa che dovete fare è comporre il numero della
persona quindi cercarlo in rubrica, e comporlo. La
stessa cosa si deve fare con i database, ossia se dovete
leggere o aggiornare dati su una tabella di un database,
dovrete dapprima connettervi ad esso creando una
connessione diretta (=comporre il numero). Al telefono,
dopo aver composto il numero, dovete restare in attesa
che vi rispondano, per cominciare a parlare. La stessa
cosa è con il database, dopo aver creato la connessione
al db, dovete aprire questa connessione per poter
comunicare con il db. Gli oggetti ADO, disponibili
per connettersi al Database, sono:
-
ADODB.Connection:
Per creare la
connessione e quindi identificare in modo univoco il
database, quindi se si vuole operare su più database
sarà necessario aprire tante connessioni quanti sono
i database.
-
ADODB.Recordset:
Per conservare
l'insieme delle righe della tabella a cui siamo
interessati.
AREA
PROGETTO "Studio Legale"
Cominciamo con l'aprire una connessione al data base
Messaggi.accdb (questo argomento è già stato
trattato nelle lezioni 4 e 8, ma i database oggetto
della connessione erano file .mdb dunque la stringa di
connessione era differente.)
1-
CONNESSIONE AL DATABASE |
Set cn =
Server.CreateObject("ADODB.Connection")
cn.connectionstring= "driver={Microsoft Access
Driver (*.mdb, *.accdb)};dbq=" & Server.MapPath("Messaggi.accdb")
cn.Open
Con queste
istruzioni, creiamo una connessione ad un
database Access chiamandola CN:
SET
CN crea la connessione
nominandola CN,quindi
la sintassi è SET nome_connessione
CN.connectionstring = "DRIVER=..........SERVER.mapPath...."
specifica il tipo di database (access),
dunque questa stringa cambia in relazione alla
versione del db.
cn.open apre la connessione
quindi la sintassi è nome_connessione.open |
2- STRINGA
SQL PER CARICARE I DATI IN TABELLA |
sql="INSERT INTO contattiMex (DATAeORA,nome,email,messaggio)
VALUES ('"& request.form("dataOra") & "','"&
request.form("nome") & "','" & request.form("email")
& "','" & request.form("messaggio") & "')"
***scrivete questo testo tutto sulla stessa
riga per non commettere errori***
Con queste
istruzioni, integriamo il codice Sql per
colloquiare con il database al VBScript.
Assegniamo ad una variabile stringa che ho
chiamato sql, il risultato del codice sql
INSERT INTO per inserire i valori di una
nuova riga della tabella Articoli . Come
potete vedere la prima parte è semplice sql
quindi come da sintassi
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
dopo
Values, tra parentesi vengono indicati i valori
che devono essere prelevati dal form di
contatti.asp, seguendo queste poche ma
essenziali regole: dopo la parentesi, apice
singolo', poi doppi ",poi dovendo concatenare la
& poi indichiamo l'oggetto request.form("nome_campo1")
& chiudiamo i doppi apici" chiudiamo il singolo
' mettiamo una virgola e riapriamo il singolo '
, i doppi " e continuiamo con gli altri campi
quindi & request.form("nome_campo2") ecc.
Ovviamente nome_campo1, nome_campo2 ...sono i
nomi che abbiamo assegnato nel file
contatti.asp agli oggetti disegnati nel
modulo, quindi i textbox, e la textarea, non teniamo conto del campo ID della
tabella, che non facciamo nemmeno figurare nel form, visto che il suo valore non deve essere
inserito dall'utente: essendo una chiave
contatore si incrementa da sola.
|
3- ESEGUO IL
CODICE DELLA STRINGA SQL E CHIUDO LE CONNESSIONI |
CN.EXECUTE SQL
CN.CLOSE
SET CN = NOTHING
Con queste
istruzioni, utilizziamo il metodo EXECUTE sull'oggetto connessione CN che abbiamo creato,
indicando di eseguire il codice SQL contenuto
nella stringa Sql : nome_connessione.Execute
stringa
A questo
punto è possibile chiudere la connessione con il
metodo
CLOSE: nome_connessione.close
Dopo aver
chiuso la connessione, con il metodo .NOTHING,
azzeriamo, resettiamo la variabile Cn:
nome_connessione.nothing |
4 - CODICE
MESSAGGIO DI CONFERMA REGISTRAZIONE |
<HTML>
<BODY>
<H2>
<% RESPONSE.WRITE "IL MESSAGGIO E' STATO
INOLTRATO" %>
</H2>
Dopo aver
chiuso con %> il codice VbScript, apriamo
il codice html e con il tag <H2 >
definiamo la dimensione del testo di conferma
che inviamo all'utente con l'oggetto RESPONSE
(ovviamente riapriamo il <%....%>
<P><A HREF="contatti.asp">TORNA ALLA PAGINA
CONTATTI</A>
<P><a href="index.htm">HOME</a>
Con il tag
<HREF>, predisponiamo la possibilità per
l'utente di spostarsi sulle altre pagine del
progetto tramite semplici collegamenti
ipertestuali.
|
Codice
Asp RegistraMessaggio.asp |
<% LANGUAGE
= VBSCRIPTS %>
<%
'DICHIARO LE VARIABILI
DIM CN
DIM SQL
'CONNESSIONE AL DATA BASE
Set cn =
Server.CreateObject("ADODB.Connection")
cn.connectionstring= "driver={Microsoft Access Driver
(*.mdb, *.accdb)};dbq=" & Server.MapPath("Messaggi.accdb")
cn.Open
sql="INSERT INTO
contattiMex (DATAeORA,nome,email,messaggio) VALUES ('"&
request.form("dataOra") & "','"& request.form("nome") &
"','" & request.form("email") & "','" & request.form("messaggio")
& "')"
'METODO EXECUTE DELL'OGGETTO CONNECTION PER INSERIRE IL
RECORD
CN.EXECUTE SQL
CN.CLOSE
SET CN = NOTHING
%>
<HTML>
<BODY>
<H2>
<% RESPONSE.WRITE "IL MESSAGGIO E' STATO INOLTRATO" %>
</H2>
<P><A HREF="contatti.asp">TORNA
ALLA PAGINA CONTATTI</A>
<P><a href="index.html">HOME</a>
</BODY>
</HTML>
|
Risultato RegistraMessaggio.asp |
|
IN SINTESI...
|
Set
nome_connessione=Server.CreateObject("ADODB.Connection")
Crea la connessione al database
cn.Open:apre
la connessione
cn.connectionstring= "driver={Microsoft Access
Driver (*.mdb, *.accdb)};dbq=" & Server.MapPath("Messaggi.accdb"): definisce il tipo di
database
INSERT
INTO nome_tabella(campo1,campo2,...campoN)
VALUES (dato1,dato2...datoN)
:
codice
sql per caricare i dati in ogni riga della
tabella.
CN.EXECUTE
nome stringa: metodo per eseguire il codice
della stringa
SET CN = NOTHING:
azzera la connessione |
|
|
ACTIVE
SERVICE PAGES E DATABASE: tecnologia ADO
LEGGERE E
VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB
Per visualizzare i dati di una tabella in una pagina
web, dobbiamo utilizzare l'oggetto ADODB.Recordset a cui
abbiamo solo accennato nella lezione precedente.
AREA PROGETTO "Studio legale"
Proseguiamo realizzando la pagina
visualizzamessaggi.asp che prevede la lettura e la
visualizzazione di tutti i record della tabella
ContattiMex. Come per l'esempio della lezione
precedente, prima cosa da fare, sarà definire l'oggetto
connessione, definire il connectionstring per definire
il tipo di db, e aprire la connessione.
1 -
CONNESSIONE DATABASE |
Set cn =
Server.CreateObject("ADODB.Connection")
cn.connectionstring= "driver={Microsoft Access
Driver (*.mdb, *.accdb)};dbq=" & Server.MapPath("Messaggi.accdb")
cn.Open |
2-
STRINGA SQL PER SELEZIONARE TUTTI I CAMPI DELLA
TABELLA |
strSQL = "SELECT * FROM contattiMex"
Con questa
istruzione, assegno alla variabile strSQL,
il risultato del codice Sql risultato della
query che produce l'elenco di tutti gli
attributi della tabella ContatttiMex secondo la
sintassi:
Select
attributo1,attributo2,...attributoN from
nome_tabella |
3 -DEFINIZIONE
DI UN RECORD SET |
Set
rs=Server.CreateObject("ADODB.recordset")
rs.Open strSQL, cn
Nella
prima riga di questa istruzione, si definisce
l'oggetto recordSet con sintassi;
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
questo
permetterà di aprire la tabella in base alla
domanda(query) che abbiamo fatto
nell'istruzione sql assegnata alla variabile.Nella
seconda riga, apriamo il recordSet attraverso il
metodo open passando le
variabili strSQL (stringa codice Sql) e cn
(variabile connessione) come parametri. Il
risultato sarà quello di raccogliere
nell'oggetto recordset, tutte le righe della
nostra tabella. |
4 - LETTURA
DI TUTTI I RECORD DELLA TABELLA |
Come detto
prima, il recordset ci permetterà di aprire la
tabella, ma ciò. non significa che potremo
leggere e visualizzare al volo tutti i dati, ma
dovremo scorrere tutte le righe per leggere una
ad una i dati da queste contenuti. Per scorrere
le righe all'interno del set di risultati(recordset),
si deve usare il ciclo While (che già avete
studiato in visual basic). Per spostarci da una
riga all'altra della tabella, utilizzeremo il
metodo .movenext, e scorreremo tutti i
record fino alla fine del recordset (.eof)
secondo la sintassi:
while
not nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend
Dove ho
messo i puntini, andranno inserite le istruzioni
che dovranno essere eseguite per ogni riga della
tabella, quindi visto che lo scopo è quello di
visualizzare i dati, il codice diventerà: |
while not
rs.EOF
response.write "CODICE: "& rs("id_iscritto")
RESPONSE.WRITE "--------------------------------"
response.write "Data e Ora: "& rs("dataEora")
RESPONSE.WRITE "--------------------------------"
response.write "NOME: "& rs("nome")
RESPONSE.WRITE "--------------------------------"
response.write "E-MAIL: "& rs("email")
RESPONSE.WRITE "--------------------------------"
response.write "MESSAGGIO: "& rs("messaggio")
%>
<BR><br><br>
<%
rs.movenext
wend |
|
Il
risultato come potete vedere dal punto di vista
grafico fa un pò desiderare, dunque si potrà con
l'aiuto di un software web editor (come
frontpage), e con qualche modifica al
codice ottenere un risultato diverso: |
|
Il
codice all'interno del ciclo while sarà
modificato così:
while
not rs.EOF
strid =
rs("id_iscritto")
strdataEora = rs("dataEora")
strnome = rs("nome")
stremail = rs("email")
strmessaggio = rs("messaggio")
%>
<form>
<div align="center">
<table border="1" width="75%" bgcolor="#CC9900">
<tr>
<td> <font face="Arial"><font
color="#990000"><b>CODICE:</b></font>
</font>
<input type="text" size="10" name="idarticolo"
value="<%=strid%>">
<b><font face="Arial" color="#990000">DATA:</font></b>
<input
type="text" size="24" name="dataEora" value="<%=strdataEora%>"> <b><font
color="#990000"><font face="Arial">
NOME:</font>
</font></b>
<input
type="text" size="34" name="nome" value="<%=strnome%>"><p> <font
face="Arial"><b><font color="#990000">EMAIL:</font></b>
</font>
<input
type="text" size="23" name="email" value="<%=stremail%>">
<font face="Arial"><b><font color="#990000"> MESSAGGIO:</font></b>
</font><textarea
rows="5" name="messaggio" cols="45"><%=strmessaggio%></textarea>
</p>
<p> </td>
</tr>
<tr>
<td bgcolor="#C0C0C0" background="bg2.jpg"> </td>
</tr>
</table>
</div>
In
pratica, ogni campo del recordset verrà
scaricato in una variabile che sarà mandata a
video in un textbox di un form html (input type="text")
invece di essere inviate a video con
response.write.
Il codice sembra molto diverso ma in realtà,
inserite queste variabili al resto pensa Frontpage. |
5 -CHIUSURA
E AZZERAMENTO DELLE VARIABILI DI CONNESSIONE |
rs.close
Set rs = Nothing
cn.close
Set cn = Nothing
Come già
detto procediamo alla chiusura degli oggetti
creati e al loro azzeramento liberando così la
memoria del server.
Per
rendere più professionale il nostro progetto
potremmo
proteggere l'accesso a questa pagina con una
password. |
IN SINTESI...
|
Select
attributo1,attributo2,...attributoN from
nome_tabella Codice della
query sql per selezionare le colonne della
tabella.
Set
nome_recordSet = Server.CreateObject("ADODB.recordset")
: creazione dell'oggetto recordset che
permette di conservare tutti i dati della
tabella selezionati con la query.
while not
nome_recordset.EOF
.......
.......
nome_recordset.movenext
wend Codice vbscript per
scorrere tutte le righe della tabella, viene
utililzzata l'istruzione di ripetizione While e
il metodo movenext per spostarsi da un record
all'altro.
|
|
|