Redazione
a- a+

Creare una directory di link

Vediamo come creare una directory con un database in modo semplice.

Introduzione
Una directory non è altro che una raccolta di link, ciascuno classificato, recensito e volendo con altre opzioni interessanti. Yahoo, Virgilio e molti altri siti del genere sono delle directory, certo molto piu' complesse (gestire migliaia o milioni di link, con migliaia o centinaia di migliaia di utenti è diverso).

Il progetto
Per realizzare una directory la soluzione piu' comoda è sicuramente un database. Vedremo come realizzare le 2 parti principali di quasi tutti i progetti (lato utente e lato amministratore).
Realizzeremo una versione semplice facilmente modificabile per progetti piu' complessi.

Il database
Il database chiamato lez09_directory.mdb (formato Access) è formato da 2 tabelle:

Nella tabella categorie ci sarà l'elenco delle categorie della directory:

Nella tabella siti ogni record conterrà informazioni sui siti recensiti:

Lato amministratore - Pannello
Per le applicazioni che necessitano l'inserimento di informazioni da parte dell'amministratore o dello staff è necessario un Pannello di Controllo che renda l'accesso sicuro e facile e veloce l'aggiornamento dei dati.

Pagina: lez09_home.asp

All'interno del Pannello è necessario inserire tutti i link alle pagine .asp che permettono le varie modifiche. Analizziamo ora la gestione delle categorie dei siti web. Grazie a questa analisi vedremo come inserire un nuovo record, modificare record esistenti e cancellarli.

Lato amministratore - Nuova Categoria
Come in tutte le operazioni che lavorano sui database, è necessario creare e aprire una connessione e un recordset per poi effettuare le operazioni di inserimento, modifica e cancellazione.

Codice 9.1

<%tipo = Request.Form("tipo")msg = ""If Trim(tipo) = "add" then    'Recupero dati    nome = Trim(Request.Form("nome"))    'Controllo inserimento nome    If Trim(nome) <> "" then' Connessione al database Set conn = Server.CreateObject("ADODB.Connection")conn.open "provider=microsoft.jet.oledb.4.0; _data source=" & Server.MapPath("lez09_directory.mdb")'Apertura recordsetSet rs = Server.CreateObject("ADODB.Recordset")rs.Open "categorie", conn, 3, 3'Inserimento nuovo recordrs.AddNew  rs("nome") = nomers.Update'Chiusura recordset e connessioners.CloseSet rs = Nothingconn.closeSet conn = Nothingmsg = "<b><font size=""2"" face=""verdana"">Categoria"msg = msg & " inserita correttamente</font></b>"    Elsemsg = "<b><font size=""2"" face=""verdana"">Categoria"msg = msg & " NON inserita</font></b>"    End IfEnd If%><html><head><title>WebMasterPoint.org</title></head><body><p align="left"><b><font face="Verdana" size="2">Gestione Categorie </font><font face="Verdana" size="1">&gt;</font><font face="Verdana" size="2"> Nuova Categoria</font></b></p><%If Trim(msg) <> "" then%><p align="center"><font face="Verdana" size="2"><b><font color="#FF0000">AVVISO:</font></b><%=msg%></font></p><%End If%><div align="center"><center><form action="lez09_cat_new.asp" method="POST"><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF9900" width="559" height="43"><tr><td width="152" height="15" bgcolor="#FFCC00"><b><font size="2" face="Verdana">Nome categoria:</font></b></td><td width="407" height="15" bgcolor="#FFFFCC"><input type="text" name="nome" size="20"></td></tr><tr><td width="559" height="28" colspan="2" bgcolor="#FFCC00"><p align="center"><input type="submit" value="Inserisci" name="B1"></td></tr></table><input type="hidden" name="tipo" value="add"></form></center></div><p align="center"><b><font size="2" face="Verdana">[ <a href="lez09_home.asp">HomePage</a> ]</font></b></p></body></html>

Questo è il codice che lavora sul database:

' Connessione al databaseSet conn = Server.CreateObject("ADODB.Connection")conn.open "provider=microsoft.jet.oledb.4.0; _data source=" & Server.MapPath("lez09_directory.mdb")'Apertura recordsetSet rs = Server.CreateObject("ADODB.Recordset")rs.Open "categorie", conn, 3, 3'Inserimento nuovo recordrs.AddNew  rs("nome") = nomers.Update'Chiusura recordset e connessioners.CloseSet rs = Nothingconn.closeSet conn = Nothing

In particolare, per aggiungere un nuovo record dobbiamo utilizzare:

'Inserimento nuovo recordrs.AddNew  rs("nome") = nomers.Update

Dove

rs.AddNew
Indica di creare un nuovo record nella tabella indicata nell'apertura del recordset

rs("nome") = nome
Memorizza in alcuni campi o in tutti i dati inseriti nel modulo.

rs.Update
Applica le istruzioni precedenti. Senza questa istruzione non verrà creato nessun record nuovo.

In tutti gli script per eseguire delle operazioni dopo la compilazione di un modulo nella stessa pagina, è consigliato utilizzare un campo nascosto (hidden) chiamato per esempio tipo (negli script presentati sarà chiamato tipo, ma può assumere qualsiasi nome) in memorizzare l'azione (solitamente new, mod, del) e solo ricavando questi valori verranno eseguite le istruzioni.

Nel Codice 9.1 nel form c'è il campo:

<input type="hidden" name="tipo" value="add">

All'inizio della pagina viene subito recuperato questo campo:

tipo = Request.Form("tipo")

Se è uguale a "add" vuol dire che l'utente ha già compilato il modulo e quindi si può procedere in questo caso all'inserimento, se tipo è uguale ad una stringa vuota "" o ad altro... l'utente non proviene dal modulo, ma deve ancora compilarlo.

Lato amministratore - Modifica Categoria
Aggiornare dati su database è molto semplice:

Codice 9.2

<%tipo = Request.Form("tipo")msg = ""If Trim(tipo) = "mod" then  'Recupero dati  nome = Trim(Request.Form("nome"))  'Controllo inserimento nome  If Trim(nome) <> "" then    ' Connessione al database     Set conn = Server.CreateObject("ADODB.Connection")    conn.open "provider=microsoft.jet.oledb.4.0; _    data source=" & Server.MapPath("lez09_directory.mdb")    'Apertura recordset    SQL = "SELECT * FROM categorie WHERE id_c = "_ & Request.Form("id_c")    Set rs = Server.CreateObject("ADODB.Recordset")    rs.Open sql, conn, 3, 3rs("nome") = nome    rs.Update    'Chiusura recordset e connessione    rs.Close    Set rs = Nothing    conn.close    Set conn = Nothing    msg = "<b><font size=""2"" face=""verdana"">Categoria"    msg = msg & " modificata correttamente</font></b>"  Else    msg = "<b><font size=""2"" face=""verdana"">Categoria"    msg = msg & " NON modificata.</font></b>"  End IfEnd If%><html><head><title>WebMasterPoint.org</title></head><body><p align="center"><b><font face="Verdana" size="6">PANNELLO DI CONTROLLO</font></b></p><p align="left"><b><font face="Verdana" size="2">Gestione Categorie </font><font face="Verdana" size="1">&gt;</font><font face="Verdana" size="2"> Modifica Categoria</font></b></p><%If Trim(msg) <> "" then%><p align="center"><font face="Verdana" size="2"><b><font color="#FF0000">AVVISO:</font></b><%=msg%></font></p><%End IfIf Trim(tipo) = "vis" then  ' Connessione al database   Set conn = Server.CreateObject("ADODB.Connection")  conn.open "provider=microsoft.jet.oledb.4.0; _  data source=" & Server.MapPath("lez09_directory.mdb")  'Apertura recordset  SQL = "SELECT * FROM categorie WHERE id_c = " _  & Cint(Request.Form("cat"))  Set rs = Server.CreateObject("ADODB.Recordset")  rs.Open sql, conn, 3, 3%><div align="center"><center><form action="lez09_cat_mod.asp" method="POST"><input type="hidden" name="id_c" value="<%=Request("cat")%>"><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF9900" width="559" height="43" id="AutoNumber1"><tr><td width="152" height="15" bgcolor="#FFCC00"><b><font size="2" face="Verdana">Nome categoria:</font></b></td><td width="407" height="15" bgcolor="#FFFFCC"><input type="text" name="nome" size="20" value="<%=rs("nome")%>"></td></tr><tr><td width="559" height="28" colspan="2" bgcolor="#FFCC00"><p align="center"><input type="submit" value="Modifica" name="B1"></td></tr></table><input type="hidden" name="tipo" value="mod"></form></center></div><%  rs.Close  Set rs = Nothing  conn.close  Set conn = NothingEnd IfIf Trim(tipo) <> "vis" AND Trim(tipo) <> "mod" then%><div align="center"><center><form action="lez09_cat_mod.asp" method="POST"><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF9900" width="559" height="43" id="AutoNumber2"><tr><td width="152" height="15" bgcolor="#FFCC00"><b><font face="Verdana" size="2">Seleziona categoria:</font></b></td><td width="407" height="15" bgcolor="#FFFFCC"><select size="1" name="cat"><%  ' Connessione database  Set conn = Server.CreateObject("ADODB.Connection")  sql = "SELECT * FROM categorie ORDER BY nome"  conn.open "provider=microsoft.jet.oledb.4.0;_data source=" & Server.MapPath("lez09_directory.mdb")  ' Esecuzione query  Set rs = Conn.Execute(sql)  Set id_c=rs("id_c")  Set nome=rs("nome")  'Visualizzazione record  Do Until rs.EOF%>    <option value="<%=id_c%>"><%=nome%></option> <%    'Record successivo    rs.movenext   loop  'Chiusura database  rs.close  Set rs = nothing   conn.close  Set conn = nothing%></select></td></tr><tr><td width="559" height="28" colspan="2" bgcolor="#FFCC00"><p align="center"><input type="submit" value="Modifica" name="B1"></td></tr></table><input type="hidden" name="tipo" value="vis"></form></center></div><%End if%><p align="center"><b><font size="2" face="Verdana">[ <a href="lez09_home.asp">HomePage</a> ]</font></b></p><p align="center">&nbsp;</p><p align="center"><font face="Verdana" size="2">www.webmasterpoint.org</font></p></body></html>

Il Codice 9.2 è apparentemente molto complesso, ma non lo è. Immaginate di dove modificare un record, sono necessarie 3 operazioni:

  • selezionare il record da modificare
  • visualizzare il modulo per modificare il record
  • modifica del record

Selezionare il record
Per indicare quale record si vuol modificare è necessario visualizzarli tutti in un menu a tendina (ogni voce ha come valore l' ID univoco) di un form.

<select size="1" name="cat"><%  ' Connessione database  Set conn = Server.CreateObject("ADODB.Connection")  sql = "SELECT * FROM categorie ORDER BY nome"  conn.open "provider=microsoft.jet.oledb.4.0;_data source=" & Server.MapPath("lez09_directory.mdb")  ' Esecuzione query  Set rs = Conn.Execute(sql)  Set id_c=rs("id_c")  Set nome=rs("nome")  'Visualizzazione record  Do Until rs.EOF%>    <option value="<%=id_c%>"><%=nome%></option><%    'Record successivo    rs.movenext  loop  'Chiusura database  rs.close  Set rs = nothing  conn.close  Set conn = nothing%></select>

Quindi è necessaria una connessione al database, la creazione di un recordset e lo scorrimento di tutti i campi della tabella, fino a quanto finiscono. Grazie all'istruzione nomerecordset.EOF possiamo sapere quando i record sono finiti:

....Do Until rs.EOF%>    <option value="<%=id_c%>"><%=nome%></option><%    'Record successivo    rs.movenextloop....

Il il ciclo a condizione anticipata Do Until indica "Ripeti il ciclo fino a quando la condizione si verifica", la condizione in questo caso è rs.EOF, quindi il ciclo sarà ripetuto fino a quando si raggiungerà l'ultimo record della tabella. Con l'istruzione nomerecordset.MoveNext indichiamo al recordset di posizionarsi sul record successivo, e con Loop si comanda di tornare nuovamente a Do Until per continuare il ciclo.

Visualizzare il modulo per modificare il record
Una volta selezionato il record viene passato attraverso un form l' ID del record scelto e visualizzati i campi che si possonodevono modificare:

If Trim(tipo) = "vis" then  ' Connessione al database  Set conn = Server.CreateObject("ADODB.Connection")  conn.open "provider=microsoft.jet.oledb.4.0; _  data source=" & Server.MapPath("lez09_directory.mdb")  'Apertura recordset  SQL = "SELECT * FROM categorie WHERE id_c = " _  & Cint(Request.Form("cat"))  Set rs = Server.CreateObject("ADODB.Recordset")  rs.Open sql, conn, 3, 3%><div align="center"><center><form action="lez09_cat_mod.asp" method="POST"><input type="hidden" name="id_c" value="<%=Request("cat")%>"><table border="1" cellpadding="0" cellspacing="0"style="border-collapse: collapse" bordercolor="#FF9900"width="559" height="43" id="AutoNumber1"><tr><td width="152" height="15" bgcolor="#FFCC00"><b><font size="2" face="Verdana">Nome categoria:</font></b></td><td width="407" height="15" bgcolor="#FFFFCC"><input type="text" name="nome" size="20"value="<%=rs("nome")%>"></td></tr><tr><td width="559" height="28" colspan="2" bgcolor="#FFCC00"><p align="center"><input type="submit" value="Modifica" name="B1"></td></tr></table><input type="hidden" name="tipo" value="mod"></form></center></div><%  rs.Close  Set rs = Nothing  conn.close  Set conn = NothingEnd If

Questa parte controlla se l'utente proviene dal modulo di selezione del record

If Trim(tipo) = "vis" then

se proviene da questo modulo viene effettuata la connessione al database e creato il recordset, con una query SQL di selezione

SQL = "SELECT * FROM categorie WHERE id_c = " & Cint(Request.Form("cat"))

il recordset si posiziona sul record che si vuole modificare, si crea il modulo e all'interno dei campi inseriamo i valori prelevati dal record. Infine si chiude la connessione e il recordset.

Modifica del record
Dopo le modifiche inserite nell'ultimo modulo avviene la modifica. Viene controllata la provenienza

If Trim(tipo) = "mod" then

ed effettuata la connessione al database, la creazione del recordset aperto con la stessa query SQL utilizzata precedentemente:

SQL = "SELECT * FROM categorie WHERE id_c = " & Cint(Request.Form("cat"))

Infine vengono applicate le modifiche.

' Connessione al database    Set conn = Server.CreateObject("ADODB.Connection")    conn.open "provider=microsoft.jet.oledb.4.0; _    data source=" & Server.MapPath("lez09_directory.mdb")    'Apertura recordset    SQL = "SELECT * FROM categorie WHERE id_c = " & Request.Form("id_c")    Set rs = Server.CreateObject("ADODB.Recordset")    rs.Open sql, conn, 3, 3rs("nome") = nome    rs.Update    'Chiusura recordset e connessione    rs.Close    Set rs = Nothing    conn.close    Set conn = Nothing

La modifica dei campi di un record è molto simile all'inserimento di un nuovo record, l'unica differenza che nella modifica non viene comandato di creare un nuovo record con rs.AddNew

Lato amministratore - Cancellazione Categoria
Cancellare un record è molto semplice e per farlo ci avvaliamo di una query SQL.

Codice 9.3

<%tipo = Request.Form("tipo")msg = ""If Trim(tipo) = "del" then  ' Connessione al database   Set conn = Server.CreateObject("ADODB.Connection")  conn.open "provider=microsoft.jet.oledb.4.0;_  data source=" & Server.MapPath("lez09_directory.mdb")  'Apertura recordset  SQL = "DELETE * FROM categorie WHERE id_c = " & Request.Form("cat")  Set rs = Server.CreateObject("ADODB.Recordset")  rs.Open sql, conn, 3, 3  msg = "<b><font size=""2"" face=""verdana"">Categoria"  msg = msg & " cancellata correttamente</font></b>"End If%><html><head><title>WebMasterPoint.org</title></head><body><p align="center"><b><font face="Verdana" size="6">PANNELLO DI CONTROLLO</font></b></p><p align="left"><b><font face="Verdana" size="2">Gestione Categorie </font><font face="Verdana" size="1">&gt;</font><font face="Verdana" size="2"> Modifica Categoria</font></b></p><%If Trim(msg) <> "" then%><p align="center"><font face="Verdana" size="2"><b><font color="#FF0000">AVVISO:</font></b><%=msg%></font></p><%End If%><div align="center"><center><form action="lez09_cat_del.asp" method="POST"><table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#FF9900" width="559" height="43" id="AutoNumber2"><tr><td width="152" height="15" bgcolor="#FFCC00"><b><font face="Verdana" size="2">Seleziona categoria:</font></b></td><td width="407" height="15" bgcolor="#FFFFCC"><%cat = " name=""cat"""%><select size="1" ­<%=cat%>><%' Connessione databaseSet conn = Server.CreateObject("ADODB.Connection")sql = "SELECT * FROM categorie ORDER BY nome"conn.open "provider=microsoft.jet.oledb.4.0;_data source=" & Server.MapPath("lez09_directory.mdb")' Esecuzione querySet rs = Conn.Execute(sql)Set id_c=rs("id_c")Set nome=rs("nome")'Visualizzazione recordDo Until rs.EOF%>  <option value="<%=id_c%>"><%=nome%></option> <%  'Record successivo  rs.movenext loop'Chiusura databasers.closeSet rs = nothing conn.closeSet conn = nothing%></select></td></tr><tr><td width="559" height="28" colspan="2" bgcolor="#FFCC00"><p align="center"><input type="submit" value="Modifica" name="B1"></td></tr></table><input type="hidden" name="tipo" value="del"></form></center></div></body></html>

Per cancellare un record è necessario:

  • selezionare il record da cancellare
  • cancellazione del record

Selezione del record
Il ragionamento è identico a quello per la selezione di un record da modificare, ovvero si utilizza un menu a tendina in un modulo con cui visualizzare tutti i record.

Cancellazione del record
Per cancellare un record si necessitano di poche righe di codice

If Trim(tipo) = "del" then  ' Connessione al database  Set conn = Server.CreateObject("ADODB.Connection")  conn.open "provider=microsoft.jet.oledb.4.0;_  data source=" & Server.MapPath("lez09_directory.mdb")  'Apertura recordset  SQL = "DELETE * FROM categorie WHERE id_c = " & Request.Form("cat")  Set rs = Server.CreateObject("ADODB.Recordset")  rs.Open sql, conn, 3, 3  msg = "<b><font size=""2"" face=""verdana"">Categoria"  msg = msg & " cancellata correttamente</font></b>"End If

Dopo il controllo:

If Trim(tipo) = "del" then

Viene creata la connessione e il recordset, ed impostata la query SQL per cancellare il record selezionato:

SQL = "DELETE * FROM categorie WHERE id_c = " & Request.Form("cat")

Si apre il recordset con la stringa SQL

rs.Open sql, conn, 3, 3

ed abbiamo cancellato il record.

E' consigliato inserire un passaggio intermedio che chiede la conferma della cancellazione del record, molto comodo sarebbe visualizzare anche il contenuto del record in modo da poter essere sicuri dell'operazione che si sta compiendo.



Ti potrebbe interessare anche

commenta la notizia