Autore: Nicola Ceccon Classe: QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004 Scuola: Itis Euganeo ASP: ESERCIZI E SOLUZIONI Esercizi Si propongono tre esercizi in ASP che prevedono l'utilizzo di un database Access. I primi due esercizi sono di difficoltà medio/bassa e coinvolgono l'accesso ad una tabella del database, mentre l'utlimo esercizio è di difficoltà media e prevede l'accesso a due tabelle. In tutti gli esercizi sono previste le operazioni di scansione e di inserimento. INDICE Esercizio A....................................................................................................... 3 (difficoltà bassa) Esercizio B....................................................................................................... 4 (difficoltà media) Esercizio C ...................................................................................................... 5 (difficoltà media) Suluzione A ..................................................................................................... 7 Soluzione B ..................................................................................................... 9 Soluzione C ..................................................................................................... 11 ASP: esercizi e soluzioni Esercizio A Scrivere il codice HTML e ASP della pagina registra.asp che effettua la registrazione di un utente per accedere al servizio di mailing list di un sito. La pagina registra.asp viene elaborata da server web a seguito dell’invio di un form presente nella home page del sito di nome index.asp con il metodo GET. Il form invia i seguenti dati: • Nominativo (testo di dimensione 40, dato obbligatorio) • Email (testo di dimensione 20, dato obbligatorio) • Password (intero di dimensione 5, dato obbligatorio) La pagina registra.asp deve effettuare il controllo della obbligatorietà dei dati e l’inserimento nella tabella di supporto di nome Navigatori presente nel database Access 2000 di nome Serviziweb.mdb memorizzato nella cartella C:\SITOPRINCIPALE\ECOMMERCE. La struttura della tabella Navigatori è la seguente: • Nominativo, tipo testo lunghezza 40, chiave primaria che rappresenta il Nickname • Passw, tipo intero corto che rappresenta la Password • Email, tipo testo lunghezza 20 che rappresenta l’indirizzo Email In caso di fallimento dell’inserimento il server web restituisce la pagina index2.asp con la visualizzazione del messaggio di errore passato dalla pagina registra.asp. In caso di successo la pagina oltre ad effettuare l’inserimento mette a disposizione di tutte le pagine del sito web il Nickname per la sua visualizzazione e restituisce la pagina index.asp che in questo caso visualizza anch’essa il Nickname. Nella scrittura del codice della pagina registra.asp utilizzare il seguente file di inclusione conndatabase.inc, che deve essere opportunamente completato, per la connessione al database Access e memorizzato nella stessa cartella delle pagina ASP: <% <% <% <% <% <% Dim connDB, strDriver, strPercorso %> Set connDB = Server.CreateObject("ADODB.Connection") %> strDriver = "Driver={Microsoft Access Driver (*.mdb)};" %> strPercorso = " DBQ=_________________________ " %> strPercorso = strDriver & strPercorso %> connDB.open(strPercorso) %> Presentare al fine della valutazione: • Analisi del problema (individuazione dei possibili casi di fallimento dell’inserimento e risposta al verificarsi dei diversi eventi) • Lo schema tra le pagine coinvolte in cui sono evidenziati gli eventuali parametri passati • Il codice della pagina registra.asp ASP: esercizi e soluzioni Esercizio B Scrivere il codice HTML e ASP della pagina ordini.asp che inserisce l’ordine di un cliente nella tabella Ordini del database Ecomm.mdb in Access 2000. La pagina ordini.asp riceve dalla pagina ordina.asp i parametri codice del prodotto (di nome ProdID) e quantità (di nome ProdQ) con la tecnica del passaggio mediante URL (su collegamento). Il codice del cliente è invece ricevuto con la tecnica dei parametri a livello di sessione utente(di nome CodCli). La struttura della tabella Ordini è la seguente: • Nitem, tipo intero corto, chiave primaria e rappresenta il numero dell’ordine • CodProdotto, tipo testo 5 e rappresenta il codice del prodotto ordinato • Q, tipo intero corto e rappresenta la quantità ordinata • CodCliente, intero corto e rappresenta il codice del cliente • Consegna, tipo testo lunghezza 1, possibili valori (S e N) e rappresenta se l’ordine è stato consegnato oppure no. La pagina ordini.asp effettua l’inserimento nella tabella e visualizza gli ordini del cliente non ancora consegnati. Nella scrittura del codice della pagina ordini.asp utilizzare il seguente file di inclusione conndati.inc, che deve essere opportunamente completato, per la connessione al database Access che e memorizzato nella cartella CONF contenuta nella cartelle che contiene le ASP. Il file Access Ecomm.mdb è invece memorizzato nella cartella C:\ DB. <% <% <% <% <% <% Dim connDB, strDriver, strPercorso %> Set connDB = Server.CreateObject("ADODB.Connection") %> strDriver = "Driver={Microsoft Access Driver (*.mdb)};" %> strPercorso = " DBQ=_________________________ " %> strPercorso = strDriver & strPercorso %> connDB.open(strPercorso) %> Presentare al fine della valutazione: • Analisi del problema (individuazione dei possibili casi di fallimento dell’inserimento e risposta al verificarsi dei diversi eventi) • Lo schema tra le pagine coinvolte in cui sono evidenziati gli eventuali parametri passati • Il codice della pagina ordini.asp ASP: esercizi e soluzioni Esercizio C Scrivere il codice HTML e ASP della pagina consegna.asp che visualizza lo stato della consegna di un ordine effettuato nel sito di ecommerce dell’azienda e memorizza le richieste di controllo. La pagina consegna.asp viene elaborata da server web a seguito dell’invio di un form presente nella home page del sito che di nome index.asp con il metodo POST. Il form invia i seguenti dati: • CodiceUtente (testo di dimensione 5, dato obbligatorio) che rappresenta il codice del cliente • NumOrdine (intero di dimensione 5, dato obbligatorio) che rappresenta il numero dell’ordine La pagina consegna.asp deve effettuare il controllo della obbligatorietà dei dati (con passaggio dell’errore alla pagina index.asp) e dopo aver effettuato la visualizzazione dello stato dell’ordine, in forma tabellare, mediante interrogazione nella tabella Ordini effettua l’inserimento della richiesta nella tabella Richieste presente nel database Access 2000 di nome Serviziweb.mdb memorizzata nella cartella C:\DB. La struttura della tabella Ordini è la seguente: • • • • • Nitem, tipo intero corto, chiave primaria e rappresenta il numero dell’ordine CodProdotto, tipo testo lunghezza 5 e rappresenta il codice del prodotto ordinato Q, tipo intero corto e rappresenta la quantità ordina ta CodCliente, tipo testo lunghezza 5 e rappresenta il codice del cliente Consegna, tipo testo lunghezza 1, possibili valori (S e N) e rappresenta se l’ordine è stato consegnato oppure no. La struttura della tabella Richieste è la seguente: • • • CodCliente, tipo testo lunghezza 5 che rappresenta il codice del cliente Data, tipo data che rappresenta la data della richiesta Nitem, tipo intero corto, che rappresenta il numero dell’ordine La pagina consegna.asp visualizza l’ordine specificato dal cliente, memorizzati nella tabella Ordini, e inserisce i dati della richiesta nella tabella Richieste. Nella scrittura del codice della pagina consegna.asp utilizzare il seguente file di inclusione conndati.inc, che deve essere opportunamente completato, per la connessione al database Access che e memorizzato nella cartella CONF contenuta nella cartelle che contiene le ASP. <% <% <% <% <% <% Dim connDB, strDriver, strPercorso %> Set connDB = Server.CreateObject("ADODB.Connection") %> strDriver = "Driver={Microsoft Access Driver (*.mdb)};" %> strPercorso = " DBQ=_________________________ " %> strPercorso = strDriver & strPercorso %> connDB.open(strPercorso) %> Presentare al fine della valutazione: • • • Analisi del problema (individuazione dei possibili casi di fallimento dell’inserimento e risposta al verificarsi dei diversi eventi) Lo schema tra le pagine coinvolte in cui sono evidenziati gli eventuali parametri passati Il codice della pagina consegna.asp Nello svolgimento del compito è possibile utilizzare gli appunti. Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 A <% Option Explicit Response.Buffer = true Response.Expires = -1024 %> <-- #include file=”condatabase.inc” --> <% Dim strNom, strEmail, intPass, strQuery, strIns, strMess, rsUtenti ‘Lettura parametri passati dalla pagina index.asp strNom = Request.QueryString(“Nominativo”) strEmail = Request.QueryString(“Email”) intPass = Request.QueryString(“Password”) ‘Controllo obbligatorietà dei dati strMess = “Errore: “ If strNom = “” Then StrMess = strMess & “non inserito il Nominativo. Ripetere inserimento” ConnDB.Close Response.Redirect(“index2.asp?ERRORE=” & strMess End If If strEmail = “” Then StrMess = strMess & “non inserito indirizzo email. Ripetere inserimento” ConnDB.Close Response.Redirect(“index2.asp?ERRORE=” & strMess End If If strPas = “” Then StrMess = strMess & “non inserita la Password. Ripetere inserimento” ConnDB.Close Response.Redirect(“index2.asp?ERRORE=” & strMess End If ‘I dati sono tutti presenti ‘Controllo che il Nominativo non sia già in uso strQuery = “SELECT * FROM navigatori WHERE nominativo= “ & “’” & strNom & “’” SET rsUtenti = connDB.Execute(strQuery) 7 Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 A ‘Se recordset rsUtenti è vuoto EOF allora il nominativo può essere inserito If rsUtenti.EOF Then StrIns = “INSERT INTO navigatori (nominativo, passw, email) VALUES “ & “(“ & “’”_ & strNom & “’” & “, “ & intPass & “, “ & “’” & strEmail & “’” & “)” connDB.Execute(strIns) ‘Creazione parametro sessione Nome per il passaggio del nominativo Session(“NOME”) = strNom ‘Il nominativo non può essere inserito perché esistente e si passa l’errore a index2.asp Else StrMess = strMess & “Nome utente già utilizzato. Cambialo.” ConnDB.Close Response.Redirect(“index2.asp?ERRORE=” & strMess) End If ‘Inserimento effettuato e ritorno alla home page index.asp ConnDB.Close Response.Redirect(index.asp”) 8 Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 B <% Option Explicit Response.Buffer = true Response.Expires = -1024 %> <-- #include file=”CONF\condati.inc” --> <% Dim strProdID, intQ, strIns, intItem, rsOrdini ‘Lettura parametri passati dalla pagina ordina.asp strProdID = Request.QueryString(“ProdID”) intQ = Request.QueryString(“ProdQ”) ‘Lettura del codice del cliente disponibile come parametro Session intCodCli = Session(“CODCLI”) ‘Inserimento nella tabella ordini ‘Individuazione numero ordine daterminando il max valore del campo Nitem della tabella Ordini strQuery = “SELECT MAX(nitem)AS maxitem FROM ordini” SET rsOrdini = connDB.Execute(strQuery) intItem = rsOrdini(“MAXITEM”) + 1 ‘inserimento nella tabella ordini strIns = “INSERT INTO ordini (nitem, codprodotto, q, codicecliente, consegna) VALUES _ (“ & intItem $ “, “ & “’” & strProdID & “’” & “, “ & intCodCli & “, “ & “’” & “N” & “’” & “)” connDB.Execute(strIns ‘Servizio ordini non consegnati ‘Ricerca ordini non consegnati strQuery = “SELECT * FROM ordini WHERE codicecliente=” & intCodCli & “ AND consegna=’N’)” SET rsOrdini = connDB.Execute(strQuery) ‘visualizzazione %> <HTML> <HEAD> <TITLE>Inserimento ordine</TABLE> … </HEAD> 9 Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 B <BODY> ‘Intestazione tabella <TABLE> <TR> <TD>Ordine</TD> <TD>Codice Prodotto</TD> <TD>Q</TD> </TR> ‘Scansione recordset rsOrdini e visualizzazione <% Do While NOT rsOrdini.EOF %> <TR> <TD><% =rsOrdini(“NITEM”)%></TD> <TD><% =rsOrdini(“CODPRODOTTO”)%></TD> <TD><% =rsOrdini(“Q”)%></TD> </TR> <% rsOrdini.MoveNext %> <% Loop %> <% connDB.Close %> ‘Chiusura codice HTML tabella </TABLE> … </BODY> </HTML> 10 Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 C <% Option Explicit Response.Buffer = true Response.Expires = -1024 %> <-- #include file=”CONF\condati.inc” --> <% Dim strCodCli, strIns, intNumOrdine, rsOrdini, strMess ‘Lettura parametri FORM metodo POST passati dalla pagina index.asp strCodCli = Request.Form(“CodiceUtente”) intNumOrdine = Request.Form(“NumOrdine”) ‘Controllo obbligatorietà dei dati strMess = “Errore: “ If strCodCli =”” Then StrMess = strMess & “Codice utente non inserito. Riprovare.” ConnDB.Close Response.Redirect(“index.asp?ERRORE=” & strMess) End If If strCodCli =”” Then StrMess = strMess & “Numero utente non inserito. Riprovare.” ConnDB.Close Response.Redirect(“index.asp?ERRORE=” & strMess) End If ‘Ricerca ordini non consegnati strQuery = “SELECT * FROM ordini WHERE = nitem” & intNumOrdine SET rsOrdini = connDB.Execute(strQuery) ‘Controllo che ordine sia presente If rsOrdini.EOF Then StrMess = strMess & “Ordine non esiste. Riprovare.” ConnDB.Close Response.Redirect(“index.asp?ERRORE=” & strMess) End If ‘visualizzazione ordine 11 Soluzione esercizio 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 C %> <HTML> <HEAD> <TITLE>Controllo ordine</TABLE> … </HEAD> <BODY> ‘Intestazione tabella <TABLE> <TR> <TD>Ordine</TD> <TD>Codice Prodotto</TD> <TD>Q</TD> </TR> ‘Visualizzazione stato ordine <TR> <TD><% =rsOrdini(“NITEM”)%></TD> <TD><% =rsOrdini(“CODPRODOTTO”)%></TD> <TD><% =rsOrdini(“Q”)%></TD> </TR> ‘Inserimento richiesta nella tabella richieste Dim strData strData = date() strIns = “INSERT INTO richieste (codcliente, data, nitem) VALUES (“ & “’” & strCodCli &_ “’” & “, “ & “’” & strData & “’” & “, “ & intNumOrdine & “)” connDB.Execute(strIns) <% connDB.Close %> ‘Chiusura codice HTML tabella </TABLE> … </BODY> </HTML> 12 Titolo: ASP: esercizi e soluzioni Autore: Nicola Ceccon Email: [email protected] Classe: QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004 Scuola: Note legali: Itis Euganeo Via Borgofuro, 6 Via Borgofuro 6 - 35042 Este (PD) - Italy Telefono 0429.21.16 - 0429.34.72 Fax 0429.41.86 http://www.itiseuganeo.it [email protected] Diffusione consentita con obbligo di citarne le fonti