Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Allora diamogli le chiavi e facciamoli lavorare

Dare l'accesso agli altri utenti.
Dare l'accesso agli altri utenti.
Link copiato negli appunti

Tanto per finire questo tutorial e per essere sicuro che mi hai seguito fino a qui, facciamo anche questo piccolo programma. Cosa vogliamo fare? Adesso che abbiamo degli impiegati virtuali, dobbiamo dargli accesso al nostro ufficio virtuale.

Questo è facile, abbiamo già il nostro login e dobbiamo solo presentarlo all'utente. Poiché i suoi dati sono già inseriti dovrebbe essere in grado di eseguire il login senza problemi. 

Prima però bisognerebbe considerare questo problema. Non tutti i nostri impiegati virtuali sono uguali quindi bisogna che li classifichiamo in modo da dargli gli strumenti di cui hanno bisogno per lavorare. 

Mettiamo un nuovo campo in tbl_login e chiamiamolo permesso. Io l'ho reso numerico in modo da ottenere:

0 = permetti tutto
1 = permetti solo le news

Se vuoi lo puoi rendere anche testuale specialmente se dovessi aver bisogno più di 2 livelli.

Ora cambiamo il necessario in Login.asp:

<% strsql = "Select id, login, password FROM tbl_login"
%>

questa linea deve cambiare. Adesso abbiamo bisogno di sapere non solo id, login, password ma anche che tipo di permesso ha l'utente. In più possiamo anche prendere tutti i dettagli in modo da poterlo chiamare per nome. Ad esempio:

<% strsql = " Select * FROM tbl_login" %>

poi login.asp cambia così:

<%
If objRs.EOF then
'Non è valido, mandalo indietro
response.redirect "login.asp"
Else
'è valido, fallo entrare
session("login") = True
'raccogli tuttle le variabili di cui abbiamo bisogno
id = objRs("id")
nome = objRs("nome")
cognome = objRs("cognome")
email = objRs("email")
permesso = objRs("permesso")
objRs.close
Set objRs = Nothing
response.redirect "ufficio.asp" 
end if
%>

A questo punto vediamo un paio di scelte che dipendono dal tipo di sito con cui lavoriamo.
Siccome vogliamo mantenere queste variabili durante tutto il tempo che il nostro impiegato rimane nel nostro ufficio virtuale, sarebbe molto comodo se rendessimo le sessioni variabili così che le possiamo chiamare da qualunque pagina:

<%
session("id") = id
session("nome") = nome
session("cognome") = cognome
session("email") = email
session("permesso") = permesso
%>

Se prendiamo questa strada, ci rendiamo la vita molto più semplice ma, poiché IIS mantiene uno spazio di memoria per ogni sessione che apre i costi per mantenere queste variabili crescono proporzionalmente con il numero di sessioni che apriamo o, per dirlo in un'altra maniera, il numero di utenti che adoperano il nostro sito.

Ne segue che se diventiamo vittime del nostro successo, che spesso capita con siti scritti bene e apprezzati dal pubblico, saremmo forzati a cambiare questo programma per tenere conto delle risorse sulla memoria del nostro server.

Questo problema si risolve facilmente usando la collezione QueryString dell'oggetto Request cambiando la linea seguente:

<% response.redirect "ufficio.asp?id=" & id & "&nome=" & nome & "&email=" & email & "&permesso=" & permesso & """  %>

così ci passiamo da pagina a pagina le variabili di cui abbiamo bisogno e le richiamiamo quando vogliamo. C'è un po' più da scrivere ma in questo modo non stressiamo la memoria del nostro IIS.

Allora ecco tutto il nostro login.asp coi cambiamenti che abbiamo fatto:

<%
Option Explicit
'--------------------------------------------------------
'Purpose: Login
'Date: 07 April 2001
'Commenti: 
'--------------------------------------------------------
Response.Buffer = True
%>
<!--#include file="adovbs.inc"-->
<%
Dim objConn, strConn, objRs, strsql
Dim submitted, login, password
Dim id, nome, cognome, email, permesso
%>
<html>
<head>
<title>Login</title>
</head>
<body bgcolor=powderblue>
<%
submitted = Request.Querystring("submitted")
If Submitted then
strConn = Application("dbconn")
login = Request.Form("login")
password = Request.Form("password")
strsql = "Select * FROM tbl_login "
strsql = strsql & "WHERE login1 ='" & login & "' AND password1 = '" & password & "'"
response.write strsql & "<br>"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
set objRs = objConn.Execute(strsql)
If objRs.EOF then
'Non è valido, mandalo indietro
response.redirect "login.asp"
Else
'è valido, fallo entrare
session("login") = True
'raccogli tuttle le variabili di cui abbiamo bisogno
id = objRs("id")
nome = objRs("nome")
cognome = objRs("cognome")
email = objRs("email")
permesso = objRs("permesso")
objRs.close
Set objRs = Nothing
response.redirect "ufficio.asp?id=" & id & "&nome=" & nome & "&email=" & email & "&permesso=" & permesso
end if
else
'show the form
%>
<div align="center">
<form action="login.asp?submitted=true" method="post">
<table align="center" cellspacing="0" cellpadding="5" border="1" bordercolor="midnightblue" bgcolor="ivory" width="400">
<tr>
<th><font color=firebrick size=+2><b>Solo chi voglio io!</b></font></th>
</tr> 
<tr>
<td align="center" bgcolor="azure">
<%
if session("login") and Submitted then
response.redirect "login.asp" 
else
response.write "<br><br> Per favore, entra login/password. <br><br>"
end if
%>
<table>
<tr>
<td class=event>Login:</td>
<td><input type="text" name="Login" size="10" maxlength="30"></td>
</tr>
<tr>
<td class=event>Password:</td>
<td><input type="password" name="Password" size="10" maxlength="12"></td>
</tr>
</table>
<br>
<input type="submit" value="Submit">
<input type="reset" value="Cancel" Onclick="Javascript:history.go(-1)">
</td>
</tr>
</table>
</form> 
</div>
</body>
</html>
<%
end if
Response.end
Response.Clear
%>

Ed ecco anche il nuovo ufficio.asp che tiene conto del permesso dell'utente così che mostriamo gli attrezzi disponibili nel nostro ufficio in accordo col permesso del cliente. Per esempio nel mio database ho inserito un utente col permesso 1 e lo lascio lavorare con le news ma non con il feedback che non è il suo lavoro.

Ed ecco il nuovo ufficio.asp:

<% 
Option Explicit
'--------------------------------------------------------
'Purpose: Il nostro ufficio virtuale
'Date: 07 April 2001
'Commenti: aggiunto "permesso" per cliente 
'--------------------------------------------------------
response.buffer = True
'dichiariamo le variabili nuove
dim id, nome, cognome, email, permesso
%>

Qui cambiamo leggermente così che possiamo usare l'ufficio come porta di entrata. Per esempio, oltre a mettere un click sulla nostra pagina per lasciare accesso ai nostri clienti potremmo anche comunicargli: vieni direttamente a questo URL. Se non ha effettuato il login chiederemo di inserire i dati di autenticazione.

<%
If NOT session("login") then
response.redirect "login.asp"
else
'raccogliamo I dati sul cliente
id = Request.QueryString("id")
nome = Request.QueryString("nome")
cognome = Request.QueryString("cognome")
email = Request.QueryString("email")
permesso = Request.QueryString("permesso")
%>
<html>
<head>
<title>Ufficio</title>
</head>
<body>
<table width="95%" border="0" cellspacing="4" cellpadding="4">
<tr>
<th align="left" width="170"><img src="NFM.GIF" width="158" height="100" alt="" border="0"></th>
<th align="left" width="100%"><font size=+2 color="firebrick">Il Nostro Ufficio Virtuale</font>
<hr size="1" color="firebrick" width="100%"></th>
</tr>
<tr>
<td valign="top" bgcolor="#ffcc99"><font color="firebrick">
Ciao <%= nome %> ,<br>sei venuto a lavorare?<br>Se hai bisogno, chiama. 
</font></td>
<td>
<%
'e qui naturalmente non facciamo altro che controllare se l'utente ha proprio bisogno di questo strumento
if permesso <= 1 then
%> 
<!-----------comincia News---------------------->
<table width="60%" border="0" cellspacing="1" cellpadding="0" bgcolor="red"><tr><td>
<!--tanto per fare un border rosso-->
<table width="100%" border="0" cellspacing="0" cellpadding="4" bgcolor="white">
<th align="left" bgcolor="red" colspan="2"><font color="white">News</font></th>
<tr>
<td width="40">
<img src="news1.gif" width="35" height="35" alt="" border="0"></td>

naturalmente dobbiamo passare l'id alla news.asp in modo da sapere chi è che ha inserito questa news nel database e nel sito. In più bisogna mettere un campo in più nella tbl_news per sapere chi è responsabile per quel specifico pezzo. Io lo chiamo "responsabile":

<td width="100>
<a href="news.asp?id=<%=id%>&nome=<%=nome%>">
<font color="red">Entra un nuovo articolo nelle News</font></a></td>
</tr>
<tr>
<td width="40"><img src="chemistry.gif" width="30" height="32" alt="" border="0"></td>
<td width="100%">
<a href="mantieni_news.asp<%= id %>&nome=<%=nome%>">
<font color="red">Cambia o cancella un articolo nelle News</font></a></td>
</tr>
<tr>
<td></td>
</tr>
</table>
</td></tr></table>
<!-----------finisce News--------------> 
<%
end if
If permesso = 0 then
%>
<!-----------comincia CRM---------------------->
<table width="60%" border="0" cellspacing="1" cellpadding="0" bgcolor="green"><tr><td>
<!--tanto per fare un border verde-->
<table width="100%" border="0" cellspacing="0" cellpadding="4" bgcolor="white">
<th align="left" bgcolor="green" colspan="2"><font color="white">CRM</font></th>
<tr>
<td width="40"><img src="news1.gif" width="35" height="35" alt="" border="0"></td>
<td width="100%"><a href="feedback_mostra.asp"><font color="green">Rispondi al feedback</font></a></td>
</tr>
<tr>
<td></td>
</tr>
</table>
</td></tr></table>
<!-----------finisce CRM--------------> 
<%
end if
%>
</td>
</tr>
</table>
</body>
</html>
<%
end if
%>

Adesso tutto quello che c'è rimasto da fare è modificare le news in modo che ognuno è solo responsabile per i suoi pezzi. Penso che in sostanza dovrebbe tutto rimanere come prima con la piccola differenza che quando costruiamo le nostre query dobbiamo tenere conto dell'id dell'utente.

Cambiamo questa linea ed è tutto fatto:

<% strsql ="Select * from tbl_news where id = " & id & "," & "data_morto >= #" & oggi & "#"
%>

adesso il cliente vede solo le sue notizie che è esattamente quello che volevamo fare.

Segue news.asp con diversi piccoli cambiamenti, ma di sicuro tu li vedi subito.

<%
Option Explicit
'--------------------------------------------------------
'Purpose: applicazione per le news
'Date: 30 March 2001
'Commenti: 
'--------------------------------------------------------
%>
<!-- la mia è nella stessa folder --> 
<!-- #include file="attrezzi_db.asp" -->
<%
Dim strConn, message
dichiare le nuove variabili id e nome
Dim titolo, sottotitolo, testo, vivo, morto, id, nome
call Main()
Sub Main()
'--------------------------------------------------------
'Purpose: la logica dell'applicazione
'Date: 29 March 2001
'Commenti: 
'--------------------------------------------------------
Dim submitted, query, form
submitted = Request.QueryString("submitted")
raccogli anche queste 
id = Request.QueryString("id")
nome = Request.QueryString("nome")
response.write id
If submitted then
call vendemmia(form)
'bisogna passargli anche l'id e spero che tutit sia ricordato di entrare il campo nell tbl_news
query = costruisci_query(titolo,sottotitolo,testo,vivo,morto,id)
strConn = Application("dbconn") 
'questa è in attrezzi_db.inc, ti ricordi? quindi ce l'abbiamo
call fai_query(strConn, query)
call quale_risultato(message)
else 
%> 
<!-- mettiamo la form qui -->

cambiato il nome. Poiché ho messo delle variabili nella vecchia news_inc ora bisogna chiamarla news_in.asp

<!-- #include file="news_in.asp"--> 
<% 
end if
end Sub
Sub vendemmia(form)
'--------------------------------------------------------
'Purpose: raccogli i dati dalla form
'Date: 29 March 2001
'Commenti: corregge il problema di "
'--------------------------------------------------------
'questo Replace lo facciamo per il carattere """
'altrimenti la Database si confonde
titolo = Replace(Request.Form("titolo"),"'","''")
sottotitolo = Replace(Request.Form("sottotitolo"),"'","''")
testo = Replace(Request.Form("testo"),"'","''")
vivo = Request.Form("vivo")
morto = Request.Form("morto") 
se non inseriamo una data di scadenza allora la facciamo durare solo un giorno 
if morto = "" then
morto = vivo
end if
end sub
'abbiamo una nuova variabile
Function costruisci_query(titolo,sottotitolo,news,vivo,morto,id)
'--------------------------------------------------------
'Purpose: costruisce la query
'Date: 29 March 2001
'Commenti: 
'--------------------------------------------------------
response.write "hellO=" & id
Dim strsql
strsql = "INSERT INTO tbl_news ( titolo, sottotitolo, testo, data_vivo, data_morto, responsabile)" 
strsql = strsql & " Values('" 
strsql = strsql & titolo & "','"
strsql = strsql & sottotitolo & "','"
strsql = strsql & testo & "',#"
strsql = strsql & vivo & "#,#"
strsql = strsql & morto & "#,'"
strsql = strsql & id & "')" 
'se hai dei guai costruendo questa, metti un
Response.Write strsql & "<br>"
'così la vedi e la puoi accomodare
costruisci_query = strsql
End Function
Sub quale_risultato(message)
'--------------------------------------------------------
'Purpose: cronaca il risultato dell query e format una risposta
'Date: 29 March 2001
'Commenti: 
'-------------------------------------------------------- 
Select case message
case "ok"
response.write "Tutto è andato bene, <br> e grazie per il pesce." 
response.write "<br><br><div align='center'><a href='JavaScript:history.back()'>Click to go back</a></div>"
case "not ok"
response.write "È un grosso disastro! <br> Chissa cosa è successo?"
response.write "Prova a scrivere la query e altre variabili per vedere se riesci a risolvere il problema." 
response.write "<br>Anche la professione del falegname è onorevole ;o)"
response.write "<br><br><div align='center'><a href='JavaScript:history.back()'>Click to go back</a></div>" 
case else
response.write "Se sei qui è metafisica pura" 
end select
end sub 
%>

poi viene la form normale in cui ho solo messo il nome dell'utente. 
News_in.asp:

<HTML>
<HEAD>
<TITLE>News Input</TITLE>
</head>
</HEAD>
<BODY>
<FORM ACTION="news.asp?submitted=true&id=<%=id%>&nome=<%=nome%>" METHOD="post">
<div align="center">
<table border="0" width="95%" celpadding="2" cellspacing="2">
<tr>

<td><h1><%= nome %>, entra le news per oggi qui...<hr align="LEFT" size="1" width="100%" color="navy"></h1></td>
</tr>
<td align="center"><br><br>
<table width="80%" border="0" celpadding="2" cellspacing="2">
<tr>
<td>Titolo</td>
<td><INPUT NAME="titolo" TYPE="TEXT" size="80" MAXLENGTH="80"></td>
</tr>
<tr>
<td>Sottotitolo</td>
<td valign="top"><TEXTAREA NAME="sottotitolo" ROWS="3" COLS="60"></TEXTAREA></td>
</tr>
<tr>
<tr>
<td valign="top">News</td>
<td valign="top"><TEXTAREA NAME="testo" ROWS="10" COLS="60"></TEXTAREA></td>
</tr>
<tr>
<td nowrap>Data di entrata</td>
<td valign="top"><INPUT NAME="vivo" TYPE="TEXT" Value="<%= Now() %>" size="24" MAXLENGTH="24"></td>
</tr>
<tr>
<td nowrap>Data di scadenza</td>
<td valign="top"><INPUT NAME="morto" TYPE="TEXT" size="24" MAXLENGTH="24"></td>
</tr> 
<tr>
<td nowrap>URL</td>
<td valign="top"><INPUT NAME="url" TYPE="TEXT" size="24" MAXLENGTH="100"></td>
</tr> 
<tr>
<td valign="top"><b> </b></td>
<td>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<table width="40%" border="0" celpadding="6" cellspacing="2">
<tr> 
<td align="right"><INPUT TYPE="submit" NAME="submit" VALUE="Entra"></td>
<td align="left"><INPUT TYPE="reset" NAME="Reset" VALUE="Reset"></td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</FORM>
</BODY>
</HTML>

Adesso che il nostro utente può entrare nelle News con un suo id, le possiamo anche estrarre alla stessa maniera quando vuole mantenere i suoi dati. Prendiamo il nostro vecchio file mantieni_new.asp e modifichiamolo:

<%
Option Explicit
'--------------------------------------------------------
'Purpose: mostra le news per cambiarle
'Date: 7 Aprile 2001
'Commenti: adattata per clienti con ID 
'--------------------------------------------------------
%>
<!--#include file="adovbs.inc"-->
<%
Dim objConn, strConn, objRs, strsql
dobiamo dichiararle e raccoglierle
Dim id, nome 
id = Request.QueryString("id")
nome = Request.QueryString("nome")

If Session("login") then
strConn = Application("dbconn")
'come vedi cambiamo la query con la clausola id
strsql = "Select * from tbl_news where responsabile= " & id & " order by data_morto Asc"
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open strConn
Set objRs = Server.CreateObject("ADODB.Recordset")
objRs.CursorLocation = adUseClient
set objRs = objConn.Execute(strsql)

response.write "<div align=center>" 
response.write "<table border='1' width='80%' cellpadding='4' cellspacing='4' bgcolor='bisquè>"
response.write "<tr><th colspan='4' align='center'><font size='+2' color='firebrick'>Mantieni le News</font></th</tr>"
Do while Not objRs.EOF
%> 
<tr>
<td width="5%"><font color='teal'><%= objRs("id") %></font></td>
<td width="75%"><font color='teal'><%= objRs("titolo") %></font></td>
<td width="10%"><a href="cambia_news.asp?id=<%= objRs("id") %>">cambia</a></td>
<td width="10%"><a href="cancella_news.asp?id=<%= objRs("id") %>">cancella</td>
</tr> 
<%
objRs.MoveNext
Loop
Response.write "</table></div>"
'quando hai tempo, metti questa in un .inc e formatala con un bel messaggio
'poi la puoi mettere dappertutto nell'ufficio
else
response.write "Mi dispiace ma questo è il mio ufficio e tu non hai la chiave..."
end if
%>

E adesso basta. Chiudiamo questo benedetto ufficio e andiamo a farci una pensata sopra.

Ti consigliamo anche