ASP:
un esempio pratico parte II |
Cominciamo
con la pagina di Login, login.asp, che è anche la più
semplice.
Controlleremo che user e password siano presenti nel file
utenti.txt ed in caso affermativo ritorneremo ad index.asp
passando i parametri cmd=LOGIN e user=userID; se non presente
ritorneremo subito ad index.asp mentre se la password è
errata scriveremo un messaggio di errore.
Il formato di utenti.txt è utente;password;e-mail ed
codice è il seguente:
<%
Dim Trovato
Dim UserW
Dim PassW
Trovato = False
UserW = ""
PassW = ""
Dim fso
Dim MyFile
Dim recinp
Dim testo
Dim I
Dim J
Set fso = Server.CreateObject("Scripting.FileSystemObject")
MyFile = Server.MapPath("utenti.txt")
Set recinp = fso.OpenTextFile(MyFile, 1)
Do While not recinp.AtEndOfStream
testo = recinp.ReadLine
I = InStr(testo, ";")
If I > 0 Then
If Trim(Request.Form("Utente")) = Trim(Left(Testo,I-1))
Then
Trovato = True
UserW = Trim(Left(Testo,I-1))
J = InStr(I+1, testo, ";")
PassW = Mid(testo, I+1, J-I-1)
Exit Do
End If
End If
Loop
recinp.Close
set recinp = Nothing
set fso = Nothing
If Not Trovato
Then
Response.Buffer = True
Response.Redirect("index.asp")
Response.End
End If
If Request.Form("Passwd") = PassW Then
Response.Buffer = True
Response.Redirect("index.asp?cmd=LOGIN&user="
& UserW)
Response.End
End If
%>
<html>
<head>
<title>Login errato</title>
</head>
<body>
<br>
<div style="position:relative; left:15%; width:70%;
font-family: Verdana, sans-serif; text-align: center;">
<% Response.write "<b>Password errata</b><br>"
%>
<br><br>
<a href="index.asp"><img src="chiudi.gif"
border=0></a>
<br>
</div>
<br>
</body>
</html>
|
Da
notare che il file utenti.txt deve essere presente altrimenti
la Open provoca un errore; inizialmente lo dovremo creare
noi vuoto col Blocco Note di Windows.
Inoltre abbiamo dichiarato tutte le variabili anche se VbScript
accetta le dichiarazioni implicite; è una buona abitudine
poiché lo Script Engine del server impiega un tempo
maggiore per allocare le variabili non dichiarate.
Vediamo
adesso registra.asp, il programma di registrazione di un nuovo
utente.
Nel form di registrazione chiediamo il nome, l'indirizzo e-mail,
la password, la riconferma della password e con un Checkbox
se si desidera salvare i dati.
Il codice è il seguente :
<%
Dim Trovato
Dim Errore
Dim UserW
Dim fso
Dim MyFile
Dim recinp
Dim testo
Dim I
Trovato = False
Errore = ""
UserW = Trim(Request.Form("Utente"))
MyFile = Server.MapPath("utenti.txt")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set recinp = fso.OpenTextFile(MyFle, 1)
Do While not recinp.AtEndOfStream
testo = recinp.ReadLine
I = InStr(testo, ";")
If I > 0 Then
If UserW = Trim(Left(Testo,I-1)) Then
Trovato = True
exit do
End If
End If
Loop
recinp.Close
set recinp = Nothing
If Trim(Request.Form("Passwd"))
<> Trim(Request.Form("Passwd2")) Then
Errore = "Errore password - ridigita"
End If
If Len(Trim(Request.Form("Passwd") )) <
4 Then
Errore = "Errore: la password deve essere almeno
4 caratteri"
End If
If Len(UserW) < 4 Then
Errore = "Errore: l'utente deve essere almeno 4
caratteri"
End If
If Not Trovato
And Len(Errore) = 0 Then
Response.Buffer = True
Set recinp = fso.OpenTextFile(MyFile, 8) ' Apre For
Append
testo = UserW & "; " & Request.Form("Passwd")
& "; " _
& Trim(Request.Form("Email"))
recinp.WriteLine(testo) ' Registra sul file
recinp.Close
set recinp = Nothing
set fso = Nothing
If Request.Form(Ch1) = True Then ' Registra cookie
Response.Cookies("ForumASP763")("UserID")
= UserW
Response.Cookies("ForumASP763")("Pwd")
= Request.Form("Passwd")
Response.Cookies("ForumASP763")("EMail")
= Trim(Request.Form("Email"))
Response.Cookies("ForumASP763").Expires =
Date + 3650
End If
Response.Redirect "index.asp?cmd=NEWUSER&user="
& UserW
Response.End
End If
set fso = Nothing
%>
<html>
<head>
<title>Registrazione</title>
<style type="text/css">
div.Saluto { font-size: 120%;
font-weight: bold; color: red;
z-order: 0;}
div.Login { background: rgb(255,153,0);
border: solid; border-width: thin;
border-color: black; padding: 1em;
z-order: 1;}
</style>
</head>
<body background="sfondo1.gif" leftmargin=0
topmargin=0>
<img src="logo763.jpg" border=0>
<br>
<div class="Login" style="position:relative;
top:20px; left:30%; width=40%;">
<form name="Form1" id="Form1"
method="POST">
<table width="100%">
<tr>
<td width="30%">Nome:</td>
<td width="50%"><input type="text"
name="Utente" size="20"></td>
<td width="*"> </td>
</tr>
<tr>
<td>E-mail:</td>
<td><input type="text" name="Email"
size="20"></td>
<td> </td>
</tr>
<tr>
<td>Password:</td>
<td colspan="2">
<input type="password" name="Passwd"
size="8"> max 8 car.</td>
</tr>
<tr>
<td>ridigita Password:</td>
<td><input type="password" name="Passwd2"
size="8"></td>
<td> </td>
</tr>
<tr>
<td colspan="3"><input type="checkbox"
name="Ch1">
salva Utente e Password in un cookie</td>
</tr>
<tr height="5">
<td colspan="3"></td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" value="invia"
name="B1"></td>
</tr>
</table>
</form>
</div>
<br>
<div class="Saluto" style="position:relative;
top:10px; text-align:center;">
<%
If Trovato Then
Response.write "Utente già presente"
Else
Response.write Errore
End If
%>
</div>
<br>
<div style="position:relative; top:60px; text-align:center;">
<a href="index.asp"><img src="back.gif"
border=0></a><br>
</div>
<br>
</body>
</html>
|
Il
blocco iniziale è molto simile a quello di login.asp;
poi controlliamo che non vi siano stati errori nella immissione
nel Form (campi troppo corti o le 2 password diverse).
Se tutto è andato bene apriamo il file "For Append"
e scriviamo la riga con i dati del nuovo utente (è
bene fare come abbiamo fatto, prima mettere la riga in una
variabile e poi fare WriteLine(variabile));
inoltre se è stato cliccato il Checkbox registriamo
il nostro cookie sul PC dell'utente ed infine ritorniamo ad
index.asp passandogli i parametri.
Segue poi la parte HTML, destinata ad essere inviata solo
in caso di errore.
Affrontiamo
adesso un'altro problema: le pagine chiamate da index.asp.
Quando tornano a index.asp devono ripassare indietro gli eventuali
parametri ricevuti, ma ci tornerebbe più comodo se
fossero delle normali pagine HTML, facilmente visibili e modificabili;
poiché l'unica cosa da modificare è l'URL del
link alla Home Page possiamo fare nel modo seguente:
sostituiamo la stringa <a href="index.asp">
con <COMMENT>LINK</COMMENT>
e la stringa </a>
con <COMMENT>/LINK</COMMENT>;
in questo modo in IE vedremo l'aspetto definitivo della pagina
e potremo fare tutte le modifiche che vogliamo, ma il link
non funzionerà.
I vari ricotta1.asp, ricotta2.asp, etc. leggeranno ricotta1.html,
ricotta2.html, etc. scriveranno prima con Response.Write tutta
la parte fino a <COMMENT>LINK</COMMENT>, poi scriveranno
(sempre con Response.Write) il tag href voluto, la parte rimanente
fino a <COMMENT>/LINK</COMMENT>, il tag </a>
e la parte rimanente.
Vediamo il codice.
<%
Dim fso
Dim MyFile
Dim recinp
Dim testo
Dim TestoOut
Dim I
Dim embedd1
Dim embedd2
Dim sCommand
Dim NewComm
embedd1 = "<COMMENT>LINK</COMMENT>"
embedd2 = "<COMMENT>/LINK</COMMENT>"
MyFile = Server.MapPath("ricotta1.html")
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set recinp = fso.OpenTextFile(MyFile, 1)
testo = recinp.ReadAll
recinp.Close
Set fso = Nothing
NewComm = ""
sCommand = UCase(Trim(Request.QueryString("cmd")))
If Len(sCommand) > 0 Then
NewComm = "?cmd=" & sCommand & "&user="
& Trim(Request.QueryString("user"))
End If
I = InStr(testo,
embedd1)
TestoOut = Left(Testo, 1, I-1)
testo = Right(testo, Len(testo)-I-Len(embedd1)+1)
Response.Write TestoOut
Response Write "<a href=" & Chr(34)
& "index.asp" & NewComm & Chr(34)
& ">"
I = InStr(testo, embedd2)
TestoOut = Left(Testo, 1, I-1)
testo = Right(testo, Len(testo)-I-Len(embedd2)+1)
Response.Write TestoOut & "</a>"
Response.Write testo
%>
|
E'
abbastanza semplice da costruire e molto comodo in tutte quelle
occasioni in cui vogliamo tenere separate la parte ASP dalla
parte HTML.
Abbiamo utilizzato la funzione InStr poiché sapevamo
la sequenza in cui avremmo trovato i <COMMENT>
ma in altri casi potremmo usare la funzione Replace, ad esempio
nell'interrogazione di un database per sostituire la stringa
<COMMENT>nomecampo</COMMENT>
col
valore di nomecampo.
Tutti
i file, immagini incluse, sono contenuti in Esempio1.zip
(46kb).
Prima
di terminare la lezione approfittiamo dell'esempio per introdurre
dei concetti più generali.
Sia in login.asp, sia in registra.asp esiste una parte di
codice quasi uguale, quella della ricerca su utenti.txt; avremmo
potuto scrivere, con lievi aggiustamenti, una unica subroutine
ed adoperarla in entrambi i casi?
La risposta è si. Tramite la direttiva <!-- #include
file="nomefile" --> da porre all'inizio della
nostra pagina ASP possiamo inserire codice scritto in un file
a parte.
Il codice presente nel file avrebbe potuto essere:
<%
' Dichiarazione variabili Public
Dim sblnTrovato
Dim sstrUserW
Dim sstrPassW
Sub Cerca(strUser,
strPassw)
' Dichiarazione variabili Private
Dim strMyFile
Dim objfso
Dim objRecord
Dim strTesto
Dim intI
Dim intJ
sblnTrovato =
False
strPassw = ""
strMyFile = Server.MapPath("\utenti.txt")
Set objfso = Server.CreateObject("Scripting.FileSystemObject")
Set objRecord = objfso.OpenTextFile(strMyFle, 1)
Do While not objRecord.AtEndOfStream
strTesto = objRecord.ReadLine
intI = InStr(strTesto, ";")
If intI > 0 Then
If strUser = Trim(Left(strTesto, intI-1)) Then
intJ = InStr(intI+1, strTesto, ";")
If intJ > 0 Then strPassw = Mid(strTesto, intI+1,
intJ-intI-1)
sblnTrovato = True
Exit do
End If
End If
Loop
objRecord.Close
set objRecord = Nothing
set objfso = Nothing
End Sub
%>
|
Per
i nomi delle variabili ci siamo attenuti alle raccomandazioni
di Microsoft: il prefisso s indica le variabili Public, seguono
poi tre lettere che indicano il tipo, poi il nome.
Nelle nostre pagine dovremo ovviamente utilizzare sblnTrovato,
sstrUserW ed sstrPassW, al posto di quelli che avevamo usato,
senza dichiararli; per utilizzare la subroutine scriveremo:
Cerca
Trim(Request.Form("Utente")), sstrPassW |
ovviamente
il contenuto di sstrPassW restituito da Cerca ci servirà
solo in login.asp, mentre in entrambe testeremo ssblnTrovato.
|