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 recordset
      Set rs = Server.CreateObject("ADODB.Recordset")
      rs.Open "categorie", conn, 3, 3

      'Inserimento nuovo record
      rs.AddNew

        rs("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 & " inserita correttamente</font></b>"

    Else

      msg = "<b><font size=""2"" face=""verdana"">Categoria"
      msg = msg & " NON inserita</font></b>"

    End If

End 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 database
      Set conn = Server.CreateObject("ADODB.Connection")
      conn.open "provider=microsoft.jet.oledb.4.0; _
      data source=" & Server.MapPath("lez09_directory.mdb")

      'Apertura recordset
      Set rs = Server.CreateObject("ADODB.Recordset")
      rs.Open "categorie", conn, 3, 3

      'Inserimento nuovo record
      rs.AddNew

        rs("nome") = nome

      rs.Update

      'Chiusura recordset e connessione
      rs.Close
      Set rs = Nothing

      conn.close
      Set conn = Nothing

In particolare, per aggiungere un nuovo record dobbiamo utilizzare:

'Inserimento nuovo record
      rs.AddNew

        rs("nome") = nome

      rs.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, 3

      rs("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 If

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
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 = Nothing

End If
If 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.movenext
loop
....

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 = Nothing

End 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, 3

      rs("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 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="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

C'è 1 commento
Sara
Hai dubbi su questo articolo?