Innanzittuto dobbiamo preparare il nosro database access, l'ho chiamato guestbook.mdb e al suo interno ho creato la tabella "guestbook" con i seguenti campi:
ID (sempre obbligatorio) è il contatore incrementale!
nickname
url (se il nostro ospite ha un sito internet e vuole farcelo conoscere...)
messaggio
data (sarà la data del post, presa automaticamente).
Avremo bisogno di due paginette: una che stampa i messaggi presenti e una che effettivamente fa l'inserimento....
vediamo la pagina principale, che ho banalmente chiamato guestbook.asp
- Codice: Seleziona tutto
<%@LANGUAGE = JScript%>
<%
var Cn = new ActiveXObject("ADODB.Connection");
var Sc = "driver={Microsoft Access Driver (*.mdb)};pwd=f3d3r1c4;dbq=" + Server.MapPath("guestbook.mdb");
Cn.Open(Sc);
var Sql = "SELECT count (*) as totalimex FROM guestbook";
// vediamo quanti messaggi ci sono all’interno del nostro database
var Mostra2 = new ActiveXObject("ADODB.Recordset");
Mostra2.Open(Sql,Cn,1);
%>
<%
var Cn = new ActiveXObject("ADODB.Connection");
var Sc = "driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath(“guestbook.mdb");
Cn.Open(Sc);
var Sql = "SELECT * FROM guestbook ORDER BY data DESC";
// con questo ordinamento faremo in modo che l’ultimo messaggio inserito sia il primo visibile
var Mostra = new ActiveXObject("ADODB.Recordset");
Mostra.Open(Sql,Cn,1);
var pag = parseInt(Request.QueryString("id"));
if (isNaN(pag) || pag < 1) pag = 1;
// se il valore passato nella pagina non è numerico, oppure è negative, andiamo alla pagina 1
if (!Mostra.EOF) {
Mostra.PageSize = 5;
Mostra.AbsolutePage = pag;
var paginetotali = Mostra.PageCount;
// abbiamo deciso di visualizzare 5 messaggi per pagina
}
var i = 0;
// mi uso questa variabile che si incrementerà fino al valore dato + in alto, nel nostro caso 5
%>
<!--- partiamo con il codice HTML vero e proprio -- >
<html>
<head>
<title>webtemplum.com - Costruzione creazione aggiornamento siti internet</title>
<script language="JavaScript" type="text/JavaScript">
<!--- la seguente funziona controlla se sono stati inseriti I dati obbligatori; li distinguiamo facendo iniziare la casella di testo con la parola “required” -->
function checkrequired(which){
var pass=true
if (document.images){
for (i=0;i<which.length;i++){
var tempobj=which.elements[i]
if (tempobj.name.substring(0,8)=="required"){
if (((tempobj.type=="text"||tempobj.type=="textarea")&&tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&tempobj.selectedIndex==-1)){
pass=false
break
}
}
}
}
if (!pass){
alert("Non hai compilato alcuni dati obbligatori! Correggi e riprova")
return false
}
else
return true
}
//-->
</script>
</head>
<body >
<!—iniziamo nel creare la nostra tabella, che conterrà nickname, mail, sito, messaggio
<p> </p><table width="830" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr>
<td width="179" rowspan="2" align="left" valign="top"><p>
<td width="660" height="43" align="right" valign="top"> <div align="right”></div></td>
</tr>
<tr>
<td height="607" align="left" valign="top">
<table width="600" border="0" align="center" cellpadding="0" cellspacing="0" class="testi">
<tr>
<td height="28">
<p>Se il sito ti è piaciuto, e se vuoi, ti invitiamo a lasciarci
un messaggio firmando il libro degli ospiti!</p>
</td>
</tr>
</table>
<form name="form1" method="post" onSubmit="return checkrequired(this)" action="aggiungi_guestbook.asp">
<!—due parole su quel onSubmit=”return checkrequired(this)”: fa praticamente partire la funzione che controlla se I dati obbligatori sono stati tutti inseriti- - >
<table width="520" border="1" align="center" cellpadding="0" cellspacing="1" class="testi">
<tr>
<td width="115">Nickname (*)</td>
<td width="396"><input name="requirednickname" type="text" id="requirednickname" size="40" maxlength="20"></td>
</tr>
<tr>
<td>Sito web</td>
<td><input name="url" type="text" id="url" value="http://" size="40"></td>
</tr>
<tr>
<td>E-mail</td>
<td><input name="email" type="text" id="email" size="40"></td>
</tr>
<tr>
<td>Messaggio (*)</td>
<td rowspan="4"><textarea name="requiredmessaggio" cols="40" rows="5" id="requiredmessaggio"></textarea></td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td> </td>
</tr>
<tr>
<td colspan="2"><div align="center">
<input name="Submit" type="submit" class="testi" value="Firma il guestbook">
</div></td>
</tr>
</table>
</form>
<p align="center" class="testi"><strong>Sono presenti
<%Response.Write(Mostra2("totalimex"))%>
messaggi</strong> </p>
<p align="center" class="testi">
<%while((!Mostra.EOF) && (i<5)){%>
<! - - Ecco lìinizio della paginazione: finchè il database non è vuoto e la variabile I è minore di 5 (quanti messaggi abbiamo scelto dall’inizio) allora stampa I messaggi
</p>
<p align="center" class="testi"> </p>
<table width="632" border="1" align="center" cellpadding="0" cellspacing="1" class="td">
<tr class="testo">
<td width="367" height="20" bgcolor="#FF6600"><font color="#FFFFFF">Messaggio
lasciato il <%=Mostra("data")%> da <a href="mailto:<%=Mostra("mail")%>" target="_blank"><%=Mostra("nickname")%></a></font></td>
<td width="256" bgcolor="#FF6600">
<div align="right"><font color="#FFFFFF"><a href="<%=Mostra("url")%>" target="_blank"><%=Mostra("url")%></a></font></div></td>
</tr>
<tr>
<td height="20" colspan="2" class="testo"><%=Mostra("messaggio")%></td>
</tr>
</table>
<table width="600" border="0" align="center" cellpadding="0" cellspacing="0">
<tr>
<td height="19"> </td>
</tr>
</table>
<p>
<%
i++; // incrementiamo la variabile dopo ogni messaggio stampato a video
Mostra.MoveNext();
}
%>
<!—Qui iniziamo I link per la paginazione
<table width="600" align="center" cellpadding="0" cellspacing="0" class="testi">
<tr>
<td width="40%">
<%if (pag > 1) {%>
« <a href="guestbook.asp?id=<%=pag - 1%>" ><font color="#000000">Precedenti</font></a>
<%}%>
<%else {%>
<font color="#778899">« Precedenti</font>
<%}%>
</td>
<td width="20%"><div align="center">Pagina <%=pag%>
di <%=paginetotali%></div></td>
<td width="40%" align="right">
<%if (!Mostra.EOF) {%>
<a href="guestbook.asp?id=<%=pag + 1%>" ><font color="#000000">Successivi</font></a>
<font color="#000000">»</font>
<%}%>
<%else {%>
<font color="#778899">Successivi »</font>
<%}%>
</td>
</tr>
</table>
<p>
<%Cn.Close()%>
</p>
</td>
</tr>
</table>
</body>
</html>
Bene o male ho commentato il codice al suo interno, nelle parti un po' più ostiche. Andiamo ad affrontare la pagina invece che si occupa dell'inserimento nel database... chiamata "aggiungi_guestbook.asp"
- Codice: Seleziona tutto
<%
nicknameoriginale = Request.Form("requirednickname")
nickname = Replace(nicknameoriginale,"'","''")
urloriginale= Request.Form("url")
url = replace(urloriginale,"'","''")
mailoriginale = request.Form("email")
mail = replace(mailoriginale,"'","''")
messaggiooriginale=request.Form("requiredmessaggio")
messaggiounariga=replace(messaggiooriginale,"'","''")
messaggio=replace(messaggiounariga, VbCrLf, "<BR>")
'se avete seguito l'altro corso avrete visto che consiglio sempre di inserire quel "replace" in quanto
'qualora il nostro ospite inserisca nel suo messaggio il carattere " ' " ed è molto semplice
' che questo accada ciò causerebbe errore. In più vediamo che stamperemo anche quando il nostro
' ospite sarà andato a capo, sostituendo il valore VbCrlF che appunto indica la pressione del tasto ENTER con
' il codice HTML <BR>
data = Now()
' ecco la data, di questo istante preciso, che useremo per ordinare i messaggi
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("guestbook.mdb")
'la classica connessione al Database e di seguito l'istruzione insert
SQL = "insert into guestbook (data, nickname, url, mail, messaggio)"
SQL = SQL & "values ('" & data
SQL = SQL & "','" & nickname
SQL = SQL & "','" & url
SQL = SQL & "','" & mail
SQL = SQL & "','" & messaggio & "')"
rs.Open sql, cn
Set rs = Nothing
cn.Close
Set cn = Nothing
Response.Redirect("guestbook.asp")
'chiudiamo tutte le connessione e reinviamo immediatamente il nostro gentile firmatario alla pagina
' del guestbook
%>
Finito..... non è difficilissimo come script, ma senza dubbio è uno dei più richiesti in rete!
Il risultato finale lo potete vedere sul mio sito http://www.webtemplum.com
A presto!