Autore: Classe: Nicola Ceccon QUINTA INFORMATICA (5IA) Anno scolastico: 2003/2004 Scuola: Itis Euganeo ASP: DOMANDE E RISPOSTE (Q&A) Dispensa La dispensa presenta i contenuti fondamentali di ASP nella forma di risposte a domande. Le domande sono suddivise in 5 gruppi: basic, database, SQL, Cookies e carrello (per la realizzazione di siti di ecommerce).
Basic Quali sono le prime istruzioni di una pagina ASP? Le prime istruzioni consistono in specifiche per la pagina riguardanti l obbligo di dichiarazione delle variabili, la bufferizzazione e il caching della pagina. Option Explicit Response.Buffer = True Response.Expires = -1024 Cosa sono i parametri? I parametri sono coppie Nome e Valore che si utilizzano per scambiare dati tra le pagine ASP: i dati quindi che si inviano alle pagine ASP o che si passano tra una pagina e un'altra sono nel linguaggio ASP chiamati parametri. Per esempio, il codice di autenticazione é un parametro inviato dal Form di autenticazione. Come si passano i parametri? Le pagine dell'applicazione interagiscono tra di loro passandosi, con diverse tecniche, dei parametri che determinano la creazione della pagina HTML inviata al Browser. Esistono diversi tipi di parametri e a seconda del tipo si utilizzano meccanismi diversi. Tipi di parametri: 1. Parametri a livello a livello di pagina 2. Parametri a livello di sessione 3. Parametri al livello di applicazione I metodi di passaggio dei parametri consistono in: 1. A livello di pagina con il passaggio mediante Form: passaggio da una pagina sorgente (la pagina del Form) ad una pagina destinazione (la pagina specificata nell attributo Action del Form). 2. A livello di pagina con il passaggio mediante URL o collegamento: passaggio da una pagina sorgente (la pagina contenente il collegamento con il passaggio dei parametri) e la pagina di destinazione (specificata nel collegamento) mediante, nel sorgente, la costruzione di una stringa dei parametri con accodamento e, nella destinazione, con le istruzioni di lettura dei parametri. La sintassi del passaggio mediante URL è la seguente: NomePaginaDest.asp?NomePar1=Val1&NomePa2=Val2... in cui le coppie (parametro,valore) sono accodate con il simbolo di ecommerciale (&). 3. Passaggio a livello di sessione utente: i parametri sono disponibili a tutte le pagine e solo per l utente (un esempio è il Nickname di entrata in una area protetta del sito). 4. Passaggio a livello di applicazione: i parametri sono disponibili a tutte le pagine e a tutti gli utenti (un esempio è il numero di utenti che sono all interno di un area protetta del sito). Itis Euganeo - Nicola Ceccon 2
Come si acquisiscono i parametri passati mediante Form con il metodo Get? I parametri si acquiscono utilizzando Request.QueryString specificando il nome del parametro tra virgolette esattamente come è stato scritto nel Form. Option Explicit Response.Buffer = True Response.Expires = -1024 Dim strnic, strpas, strpass strnic = Request.QueryString("COGDOC") strpass = Request.QueryString("PASSW") Come si acquisiscono i parametri passati mediante Form con il metodo Post? I parametri si acquiscono utilizzando Request.Form specificando il nome del parametro tra virgolette esattamente come è stato scritto nel Form. Option Explicit Response.Buffer = True Response.Expires = -1024 Dim strnic, strpas, strpass strnic = Request.Form("COGDOC") strpass = Request.Form("PASSW") Come si passa un parametro mediante un collegamento? Il passaggio mediante collegamento, detto passaggio mediante URL, consiste nell accodare alla pagina collegata i parametri come coppie Parametro=valore separate dal carattere &. intcodice = Request.QueryString("CODICE") intscorte = Request.QueryString("SCORTID") <a href="inscar.asp?codice= =intcodice &CODSCORTE= =intscorte ">Inserisci</a> Itis Euganeo - Nicola Ceccon 3
In alternativa: intcodice = Request.QueryString("CODICE") intscorte = Request.QueryString("SCORTID") Dim strparurl strparurl = CODICE= & =intcodice & & & CODSCORTE= & intscorte <a href="inscar.asp? =strparurl ">Inserisci</a> Come si rende disponibile un parametro per una intera sessione utente? Per rendere disponibile un parametro per tutta la sessione utente (che termina per esempio con la chiusura del browser) Distinguiamo tra parametri passati mediante l'oggetto Session e parametri passati mediante cookies. Per esempio con Session. Dim intvotato intvotato = 1 Session( VOTATO ) = intvotato Come si legge un parametro Session e come si controlla l eventuale esistenza? La lettura avviene utilizzando Session( nome parametro ) e se dalla lettura risulta una stringa vuota questo significa che non esiste. If Session( VOTATO ) = Then Session( VOTATO ) = 1 Else Hai già votato! End If Come si rende disponibile un parametro per tutti gli utenti? Si utilizza l oggetto Application. Application.Lock Application("NVisite") = Application("NVisite") + 1 Application.UnLock... Visitata: =Application("NVisite") volte!... Il metodo Lock previene la scrittura simultanea da parte di due utenti nella variabile NVisiste e il metodo UnLock libera il blocco. L'esempio pone un interrogativo: come inizializzo la variabile NVisite? Itis Euganeo - Nicola Ceccon 4
DataBase Come si connette un database? La connessione DSN Less consiste nell effettuare la connessione, mediante la creazione di un connettore al database come istanza dell oggetto connettore server, direttamente al percorso fisico del file secondo una specifica sintassi legata alla tipologia di database. Nel caso di un database Access la sequenza di istruzioni ASP è: Dim conndb, strdriver, strpercorso Set conndb = Server.CreateObject("ADODB.Connection") strdriver = "Driver={Microsoft Access Driver (*.mdb)};" strpercorso = " DBQ=C:\WINDOWS\Desktop\siti\quitaia\prodotti.mdb" strpercorso = strdriver & strpercorso conndb.open(strpercorso) Un altro modo che permette di slegare la posizione nelal cartella del server prevede l utilizzo di Server.MapPath: Dim conncw, strdriver, strpercorso Set conncw = Server.CreateObject("ADODB.Connection") strdriver = "Driver={Microsoft Access Driver (*.mdb)};dbq=" strpercorso = "prodotti.mdb" strpercorso = strdriver & server.mappath(strpercorso) conncw.open(strpercorso) Come rendere disponibile il codice di connessione per tutte le pagine? Il metodo per rendere disponibile le istruzioni di connessione a tutte le pagine consiste nel creare un file di connessione e richiamarlo all interno della pagina Asp utilizzando una direttiva di include. Questa soluzione permette anche di modificare una sola volta il percorso del database per tutte le pagine. Option Explicit Response.Buffer = True Response.Expires = -1024 <!-- #INCLUDE FILE="conndatabase.inc"--> Itis Euganeo - Nicola Ceccon 5
SQL Come si esegue una query SELECT? L esecuzione della query comporta la scrittura della stessa rispettando la sintassi SQL e la sua esecuzione applicando il metodo execute al connettore al database. L esecuzione, infine, associa ad un recordset. Dim strquery,rsprodotti strquery = "SELECT * FROM articoli" conndb.open(strpercorso) Set rsprodotti = conndb.execute(strquery) Come si accede ad un valore della colonna (campo) del recordset? Si utilizza il recordset specificando tra apici il nome del campo. Dim strdescrizione strdescrizione = rsprodotti("articolodesc") Come visualizzo il contenuto di una variabile, una funzione o di un campo del recordset (della tabella) nella pagina del browser? Per visualizzare il contenuto posso utilizzare il metodo rapido che consiste nell utilizzare = prima dell oggetto da visualizzare oppure Response.Write(oggetto). Data di oggi: =date() Ora: Response.Write(time()) Itis Euganeo - Nicola Ceccon 6
Come visualizzo sul browser il risultato di una query SQL, cioè il contenuto dell intero recordset? Questa operazione nota come scansione della tabella comporta in primo luogo la definizione in HTML della tabella e della riga di intestazione (prima riga della tabella con i nomi dei campi) con l impostazione, eventuale, del colore di sfondo e della larghezza della cella (in percentuale o pixel). Successivamente si creano dinamicamente le righe dei dati visualizzando i contenuti delle colonne all interno di una struttura di iterazione Do While Loop al cui interno c è l istruzione per spostare il puntatore alla riga del recordset. La condizione del ciclo di iterazione è il controllo che il puntatore non punti alla riga speciale EOF. Dim strquery, rsprodotti, intconta strquery = "SELECT * FROM articoli ORDER BY categoria" Set rsprodotti = conndb.execute(strquery) <table> <tr> <td><b>n</b></td> <td><b>cod</b></td> <td><b>descrizione</b></td> <td><b>categoria</b></td> <td><b>promo</b></td> </tr> intconta = 0 Do While NOT rsprodotti.eof intconta = intconta + 1 <tr> <td> =intconta </td> <td> =rsprodotti("articid") </td> <td> =rsprodotti("articolodesc") </td> <td> =rsprodotti("categoria") </td> <td> =rsprodotti("promozione") </td> </tr> rsprodotti.movenext Loop conndb.close </table> Itis Euganeo - Nicola Ceccon 7
Come scrivo una query con condizione Where? La creazione della stringa strquery che contiene la query deve essere effettuata rispettando la sintassi SQL che prevede che i dati alfanumerici, comprese la data, siano racchiusi tra apici. La condizione della clausola Where è normalmente una variabile o una funzione e quindi la stringa di query si crea come concatenazione di stringhe utilizzando l operatore &. Option Explicit Response.Buffer = True Response.Expires = -1024 Dim strquery, intiddoc, rsprodotti, intconta, strdescrizione <!-- #INCLUDE FILE="conndatabase.inc"--> strdescrizione = Request.QueryString("DES") strquery = "SELECT * FROM articoli WHERE articolodesc=" & & strdescrizione & "'" & " ORDER BY promozione DESC" Set rsprodotti = conndb.execute(strquery) Come inserisco un record in una tabella? Si utilizza l istruzione SQL INSERT INTO tabella (campi) VALUES (valori) in cui i nomi dei campi e i valori sono separati da virgole e i valori alfanumerici sono tra apici. Successivamente si esegue la query con il metodo Execute del connettore al database. If Session("CARRELLO") = "" Then Dim strinserimento strquery = "SELECT MAX(IDCARRELLO) AS ultimo FROM carrello" set rsultimocarrello = conndb.execute(strquery) Session("CARRELLO") = rsultimocarrello("ultimo") + 1 intcarrello = rsultimocarrello("ultimo") + 1 strinserimento = "INSERT INTO carrello (idcarrello, data) VALUES (" & intcarrello & "," & & date() & "' & )" conndb.execute(strinserimento) End If Itis Euganeo - Nicola Ceccon 8
Cookies Un cookie registra le informazioni sotto forma do coppie nome/valori, formate dal nome di una variabile e dal valore associato. Ciascuna coppia é separata dalla successiva mediante il carattere punto e virgola (;). Per esempio un cookie che memorizza il codice di un utente e la password per un Login potrebbe avere una variabile cookie chiamata IDCodice che memorizza il valore sonofigo e una seconda variabile cookie chiamata Passw che memorizza il valore propriovero12. In questo caso il cookie memorizza le coppie nella seguente forma: IDCodice= sonofigo e Passw= propriovero12 Un singolo cookie memorizza un massimo di 20 coppie oppure 4096 caratteri. Esistono due tipi di cookie: Temporanei,che sono memorizzati nella RAM del Client come stringa e disponibili sino a che l'utente non esce dalla sessione corrente del browser (non chiude il browser) Permanenti, che sono memorizzati nell'hd del Client come file di testo e quindi sempre disponibili sino ad una data di scadenza oltre la quale il sistema del client li cancella automaticamente.un cookie permanente si crea aggiungendo una data di scadenza di tipo data. La scrittura di un cookie temporaneo si effettua con: Response.Cookies("Nome") = Valore mentre la creazione di un cookie permanente si effettua con: Response.Cookies("Nome") = Valore Response.Cookies("Nome").Expires = data La forma generale della data è giorno, gg-mm-aa hh:mm:ss GMT, ma anche" venerdì, 03 maggio, 2002" oppure "03 Maggio, 2002 " o "03/05/2002" vanno bene. La lettura di un cookie avviene con l'istruzione: Request.Cookies("Nome") e il controllo si effettua verificando che la variabile non sia vuota, con l'istruzione: If Request.Cookies("Nome")<>"" Then... Itis Euganeo - Nicola Ceccon 9
Itis Euganeo - Nicola Ceccon 10
Carrello (ecommerce) Come implemento il carrello? Per implementare il carrello si possono utilizzare due tabelle che contengono i dati del carrello e i carrelli degli utenti come singoli record. In questo caso la visualizzazione del carrello di un utente è data da una query che estrae i record con il codice del carrello. Nel caso di un catalogo organizzato a due livelli: 1. Livello Master contenente la descrizione del prodotto 2. Livello Detail contenente più record La tabella dei carrelli contiene oltre al codice del prodotto anche il codice della dettaglio. Per esempio il database potrebbe essere: 1. Articoli(Articid, descrizione, commento) 2. Scorte (Scortid, taglia, colore, prezzo, diponibilita) 3. Carrello(Idcarrello, data) 4. Carrelli(Id, Articid, Scortid, Idcarrello, Quantita) L inserimento nel carrello comporta l inserimento dei codici delle varie tabelle coinvolte, del codice del carrello assegnato e della quantità acquistata, mentre la visualizzazione comporta la costruzione del carrello dei prodotti come query su più tabelle partendo dai codici delle righe di Carrelli che hanno lo stesso codice carrello. Risulta quindi fondamentale arrivare alla pagina di inserimento nel carrello con i parametri (variabili) relativi al codice del prodotto (Articid), codice del dettaglio (Scortid) e codice del carrello (Idcarrello). I primi due codici si passano tra le pagine come parametri di tipo Url mentre il codice del carrello è disponibile in tutte le pagine come parametro Session o eventualmente come Cookie. Quindi, nel caso si utilizzi una pagina Asp per visualizzare il catalogo, una per visualizzare il dettaglio e una per l inserimento nel carrello si devono passare di volta in volta i seguenti parametri: Scansione.asp Visualizza il catalogo Passaggio del codice del prodotto come parametro URL Dettaglio.asp Visualizza il dettaglio Passaggio del codice del codice prodotto e del codice del dettaglio come parametro URL Inscarrello.asp Inserimento nel catalogo Creazione Lettura Variabili SESSION CARRELLO Itis Euganeo - Nicola Ceccon 11
Come visualizzo il carrello di un utente? Semplicemente estraggo dalla tabella Carrelli i record che presentato il codice Articid uguale al codice del carrello assegnato all utente e visualizzo i dati prelevandoli dalle altre tabelle (poiché la tabella Carrelli contiene solamente i codici). Come svuoto il carrello? Svuotare il carrello di un utente nl caso in cui il carrello sia impostato come parte della tabella Carrelli consiste nell effettuare la query SQL DELETE per i record che hanno come valore di Articid il valore del carrello dell utente. E evidente che la pagina che effettua l operazione deve ricevere il codice del carrello e visualizzare il risultato dell operazione. intcarrello = Session( CARRELLO ) strdel = DELETE FROM carrelli WHERE articid= & intcarrello conndb.execute(strdel) Carrello svuotato con successo. Come cancello dal carrello un item (prodotto)? Si effettua una operazione SQL DELETE per il record che presenta contemporaneamente il valore del carrello dell utente e il valore della chiave primaria Idrighe. Il codice Idrighe serve appunto per la cancellazione poiché senza questa chiave non sarebbe possibile cancellare un unico prodotto. Itis Euganeo - Nicola Ceccon 12
Titolo: Autore: Email: Classe: ASP: domande e risposte (Q&A) Nicola Ceccon nicola.ceccon@istruzione.it 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 informazioni@itiseuganeo.it Nessuna restrizione all'utilizzo