Come gestire gli utenti con Access e il linguaggio asp

In questo tutorial vedremo come realizzare un sistema più articolato per la gestione delle aree private del sito; più precisamente vedremo come realizzare un sistema per la registrazione el'autenticazione degli utenti, in modo da consentire ai soli utenti registrati l'accesso ad alcune aree del nostro sito.
Precisamente, nel nostro articolo vedremo come è possibile realizzare da zero:
  • un pannello per la registrazione di nuovi utenti
  • un sistema di login e di gestione dei privilegi dei vari utenti
  • un sitema per l'amministrazione degli utenti
Ok. Rimbocchiamoci le maniche ed iniziamo.
Per prima cosa apriamo MS Access e creiamo un DB vuoto chiamato "utenti_sito.mdb"; poi creiamo una tabella che chiamiamo UTENTI con una struttura come da immagine:
Il campo "ID" è contatore, "email", "user" e "pass" sono testo, mentre "stato" è un campo tipo Si/No.

Ora che abbiamo il nostro DB possiamo iniziare a lavorare con il codice... per prima cosa buttiamo giù il codice del sistema di registrazione!
Aprite il bocco note e scrivete come di seguito:
<%
'Creo la variabile Action
Dim Action
Action = request.form("act")
'Se Action è vuoto stampo il modulo
if Action = "" then
%>
<form method="POST">
<input type="hidden" name="act" value="salva">
<table border="0">
<tr><td>Tua Email</td><td><input type="text" name="email" size="30"></td></tr>
<tr><td>Username</td><td><input type="text" name="user" size="30"></td></tr>
<tr><td>Password</td><td><input type="password" name="pass" size="30"></td></tr>
<tr><td colspan="2"><input type="submit" value="ISCRIVITI"></td></tr>
</table>
</form>
<%
'Se Action ha come valore "salva"...
'Inserisco i valori del modulo nel DB
elseif Action = "salva" then
'Apro la connessione al DB
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&_
Server.MapPath("utenti_sito.mdb")
'Aggiungo un nuovo record al DB
Dim Rs
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open "UTENTI", conn, 1, 3
Rs.AddNew()
Rs("email") = request.form("email")
Rs("user") = request.form("user")
Rs("pass") = request.form("pass")
Rs("stato") = False
Rs.Update
'chiudo recordset e connessione
Rs.Close
set Rs = Nothing
Conn.Close
set Conn = Nothing
'Messaggio a video di conferma
response.write "Registrazione avvenuta con successo"
response.end
end if
%>
Salvate come "registrati.asp" e caricate il file nel vostro server. Lanciatelo e testatelo.

Il codice, come al solito, è ampiamente comentato e non dovrebbe esere un problema per Voi capirne il funzionamnto ed apportare le modifiche che eventualmente riterrete opportune.
L'unica cosa che voglio farvi notare è che di default abbiamo impostato su False il campo "stato" che è quello che ci consente di verificare se l'utente è abilitato (True) o meno (False) all'accesso all'area privata.
Una volta registrato, quindi, l'utente NON è ancora abilitato a navigare nell'area protetta (il campo "stato" è settato su False) fino a quando l'amministratore non lo avrà confermato (settando in True il campo "stato").

Vediamo quindi come realizzare il nostro piccolo pannello di amministrazione per la gestione delle registrazioni. Ecco il codice:
<%
'Imposto una password per accedere al file...
'ricordatevi di cambiarla :-)
Dim AdminPass
AdminPass = "123456"
'Recupero il valore della querystring pass...
Dim MyPass
MyPass = request.querystring("pass")
'Verifico che MyPass sia uguale ad AdminPass
'In caso contrario stampo un errore...
if NOT MyPass = AdminPass then
response.write "Accesso NON autorizzato"
response.end
end if
'Se l'accesso è autorizzato proseguo...
'Apro la connessione al DB
Dim Conn
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&_
Server.MapPath("utenti_sito.mdb")
'Creo la variabile Action
Dim Action
Action = request.querystring("act")
if Action = "" then
'Imposto la query ed apro il recordset
Dim Query, Rs
Query = "select * from UTENTI order by ID desc"
Set Rs = Server.CreateObject("ADODB.Recordset")
Rs.Open Query, Conn, 3, 3
'Se il recordset NON è vuoto...
if NOT rs.EOF Then
response.write "<table border=""1"">"
'Imposto un ciclo do While per scorrere il recordset
Do While NOT Rs.EOF
response.write "<tr><td>" & Rs("user") & "</td>"
response.write "<td><a href=""admin.asp?pass=" & MyPass & "&act=attiva&id=" & Rs("id") & """>Attiva</a> - "
response.write "<a href=""admin.asp?pass=" & MyPass & "&act=disattiva&id=" & Rs("id") & """>Disattiva</a></td></tr>"
Rs.MoveNext
Loop
response.write "</table>"
'Se il recordset è vuoto stampo un mesaggio
else
response.write "Nessun utente iscritto"
response.end
end if
'chiudo il recordset
Rs.Close
set Rs = Nothing
'Se action è su attiva...
elseif Action = "attiva" then
Conn.Execute "update UTENTI set stato = True where id = " & request("id")
'Se invece è su disattiva
elseif Action = "disattiva" then
Conn.Execute "update UTENTI set stato = False where id = " & request("id")
end if
'Chiudo la connessione al DB
Conn.Close
Set Conn= Nothing
%>
Salvo tutto come "admin.asp", carico sul server e testo lanciando il file in questo modo:
http://www.miosito.com/admin.asp?pass=123456
Relativamente allo script "admin.asp" credo non ci sia proprio poco da dire:
  • abbiamo aperto la connessione al nostro DB poi abbiamo costruito una serie di condizioni
  • se Action è vuoto stampo a video tutti i record presenti nel DB accompagnati dai relativi ink per attivazione/disattivazione;
  • se invece Action ha valore "attiva" o "disattiva" eseguo una query che non fa altro che modificare il valore del campo "stato" del DB da False a True e viceversa;
  • alla fine abbiamo chiuso, come al solito, la nostra connessione al DB per liberare un po' di risorse;

fonte: http://www.mrwebmaster.it/asp/articoli/sistema-gestione-utenti-acceso-aree-protette-1a-parte_177.html

Commenti