Guestbook in ASP e ACCESS con paginazione

Discuti dei problemi relativi alla programmazione nel tuo linguaggio preferito!

Moderatori: cb_123, thrantir, tonertemplum

Guestbook in ASP e ACCESS con paginazione

Messaggiodi tonertemplum il 09 mar 2007, 23:02

Buonasera a tutti.... come promesso tempo fa eccoci con lo script per creare un guestbook in ASP e ACCESS.... in più vedremo come possiamo dividere i messaggi 5 per pagina in maniera da avere sempre una pagina snella!

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
mail
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>&nbsp;</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 &egrave; 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>&nbsp;</td>
          </tr>
          <tr>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td>&nbsp;</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">&nbsp;</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">&nbsp;</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!
ASUS M3N78-PRO -- AMD ATHLON 64 X2 5200+@3100 vcore default -- ZALMAN CNPS9500A LED -- 2x2GB TEAM GROUP DDR2 800 -- ATI HD 3650 con ZALMAN VF900 CU-LED -- 2 X SEAGATE 160GB RAID 0 + 1 x MAXTOR 260 GB SATA + 1 x MAXTOR 120 GB SATA
Avatar utente
tonertemplum
Moderatore
Moderatore
 
Messaggi: 6906
Iscritto il: 11 set 2005, 19:11
Località: Roma

 

Messaggiodi nemesys_72 il 10 mar 2007, 00:22

grande sandro, ottimo lavoro come sempre..
:roll:
Mors Omnia Aequat
Immagine
Avatar utente
nemesys_72
Magister
Magister
 
Messaggi: 21760
Iscritto il: 11 feb 2005, 14:56
Località: Il Veneto è la mia Patria..

Messaggiodi tonertemplum il 10 mar 2007, 09:48

grazie :D
ASUS M3N78-PRO -- AMD ATHLON 64 X2 5200+@3100 vcore default -- ZALMAN CNPS9500A LED -- 2x2GB TEAM GROUP DDR2 800 -- ATI HD 3650 con ZALMAN VF900 CU-LED -- 2 X SEAGATE 160GB RAID 0 + 1 x MAXTOR 260 GB SATA + 1 x MAXTOR 120 GB SATA
Avatar utente
tonertemplum
Moderatore
Moderatore
 
Messaggi: 6906
Iscritto il: 11 set 2005, 19:11
Località: Roma

Messaggiodi Aragorn il 10 mar 2007, 13:11

:)


«Non tutto quel ch'è oro brilla,
Né gli erranti sono perduti;
Il vecchio ch'è forte non s'aggrinza,

le radici profonde non gelano.
Dalle ceneri rinascerà un fuoco,
L'ombra sprigionerà una scintilla;
Nuova sarà la lama ora rotta,
E re quei ch'è senza corona.»

Avatar utente
Aragorn
Site Admin
Site Admin
 
Messaggi: 21155
Iscritto il: 06 ago 2004, 23:45
Località: Lunà Cepeen (varès)


Torna a Programmare

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron